summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/main.cpp10
1 files changed, 5 insertions, 5 deletions
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp
index 5bbed59..8ed8710 100644
--- a/core/launcher/main.cpp
+++ b/core/launcher/main.cpp
@@ -1,255 +1,255 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** Copyright (C) 2003-2005 The Opie Team <opie-devel@handhelds.org> 3** Copyright (C) 2003-2005 The Opie Team <opie-devel@handhelds.org>
4** 4**
5** This file may be distributed and/or modified under the terms of the 5** This file may be distributed and/or modified under the terms of the
6** GNU General Public License version 2 as published by the Free Software 6** GNU General Public License version 2 as published by the Free Software
7** Foundation and appearing in the file LICENSE.GPL included in the 7** Foundation and appearing in the file LICENSE.GPL included in the
8** packaging of this file. 8** packaging of this file.
9** 9**
10** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 10** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
11** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 11** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
12**********************************************************************/ 12**********************************************************************/
13 13
14#ifndef QTOPIA_INTERNAL_FILEOPERATIONS 14#ifndef QTOPIA_INTERNAL_FILEOPERATIONS
15#define QTOPIA_INTERNAL_FILEOPERATIONS 15#define QTOPIA_INTERNAL_FILEOPERATIONS
16#endif 16#endif
17#ifdef QT_QWS_LOGIN 17#ifdef QT_QWS_LOGIN
18#include "../login/qdmdialogimpl.h" 18#include "../login/qdmdialogimpl.h"
19#endif 19#endif
20#include "calibrate.h" 20#include "calibrate.h"
21#include "server.h" 21#include "server.h"
22#include "serverapp.h" 22#include "serverapp.h"
23#include "stabmon.h" 23#include "stabmon.h"
24#include "firstuse.h" 24#include "firstuse.h"
25 25
26/* OPIE */ 26/* OPIE */
27#include <opie2/odebug.h> 27#include <opie2/odebug.h>
28#include <opie2/odevice.h> 28#include <opie2/odevice.h>
29#include <opie2/oglobal.h> 29#include <opie2/oglobal.h>
30#include <qtopia/network.h> 30#include <qtopia/network.h>
31#include <qtopia/alarmserver.h> 31#include <qtopia/alarmserver.h>
32using namespace Opie::Core; 32using namespace Opie::Core;
33 33
34/* QT */ 34/* QT */
35#include <qdir.h> 35#include <qdir.h>
36#include <qmessagebox.h> 36#include <qmessagebox.h>
37#ifdef QWS 37#ifdef QWS
38#include <qwindowsystem_qws.h> 38#include <qwindowsystem_qws.h>
39#include <qtopia/qcopenvelope_qws.h> 39#include <qtopia/qcopenvelope_qws.h>
40#endif 40#endif
41#ifdef Q_WS_QWS 41#ifdef Q_WS_QWS
42#include <qkeyboard_qws.h> 42#include <qkeyboard_qws.h>
43#endif 43#endif
44 44
45/* STD */ 45/* STD */
46#include <stdlib.h> 46#include <stdlib.h>
47#include <stdio.h> 47#include <stdio.h>
48#include <signal.h> 48#include <signal.h>
49#include <unistd.h> 49#include <unistd.h>
50#include <errno.h> 50#include <errno.h>
51#include <string.h> 51#include <string.h>
52 52
53void create_pidfile(); 53void create_pidfile();
54void remove_pidfile(); 54void remove_pidfile();
55 55
56static void cleanup() 56static void cleanup()
57{ 57{
58 QDir dir( "/tmp", "qcop-msg-*" ); 58 QDir dir( "/tmp", "qcop-msg-*" );
59 59
60 QStringList stale = dir.entryList(); 60 QStringList stale = dir.entryList();
61 QStringList::Iterator it; 61 QStringList::Iterator it;
62 for ( it = stale.begin(); it != stale.end(); ++it ) { 62 for ( it = stale.begin(); it != stale.end(); ++it ) {
63 dir.remove( *it ); 63 dir.remove( *it );
64 } 64 }
65} 65}
66 66
67void initEnvironment() 67void initEnvironment()
68{ 68{
69 Config config("locale"); 69 Config config("locale");
70 config.setGroup( "Location" ); 70 config.setGroup( "Location" );
71 QString tz = config.readEntry( "Timezone", getenv("TZ") ).stripWhiteSpace(); 71 QString tz = config.readEntry( "Timezone", getenv("TZ") ).stripWhiteSpace();
72 72
73 // timezone 73 // timezone
74 if (tz.isNull() || tz.isEmpty()) tz = "America/New_York"; 74 if (tz.isNull() || tz.isEmpty()) tz = "America/New_York";
75 setenv( "TZ", tz, 1 ); 75 setenv( "TZ", tz, 1 );
76 config.writeEntry( "Timezone", tz); 76 config.writeEntry( "Timezone", tz);
77 77
78 // language 78 // language
79 config.setGroup( "Language" ); 79 config.setGroup( "Language" );
80 QString lang = config.readEntry( "Language", getenv("LANG") ).stripWhiteSpace(); 80 QString lang = config.readEntry( "Language", getenv("LANG") ).stripWhiteSpace();
81 if( lang.isNull() || lang.isEmpty()) lang = "en_US"; 81 if( lang.isNull() || lang.isEmpty()) lang = "en_US";
82 setenv( "LANG", lang, 1 ); 82 setenv( "LANG", lang, 1 );
83 config.writeEntry("Language", lang); 83 config.writeEntry("Language", lang);
84 config.write(); 84 config.write();
85 85
86 // rotation 86 // rotation
87 int t = ODevice::inst()->rotation(); 87 int t = ODevice::inst()->rotation();
88 odebug << "ODevice reports transformation to be " << t << oendl; 88 odebug << "ODevice reports transformation to be " << t << oendl;
89 89
90 QString env( getenv("QWS_DISPLAY") ); 90 QString env( getenv("QWS_DISPLAY") );
91 if ( env.isEmpty() ) 91 if ( env.isEmpty() )
92 { 92 {
93 int rot = ODevice::inst()->rotation() * 90; 93 int rot = ODevice::inst()->rotation() * 90;
94 QString qws_display = QString("Transformed:Rot%1:0").arg(rot); 94 QString qws_display = QString( "%1:Rot%2:0").arg(ODevice::inst()->qteDriver()).arg(rot);
95 odebug << "setting QWS_DISPLAY to '" << qws_display << "'" << oendl; 95 odebug << "setting QWS_DISPLAY to '" << qws_display << "'" << oendl;
96 setenv("QWS_DISPLAY", (const char*) qws_display, 1); 96 setenv("QWS_DISPLAY", (const char*) qws_display, 1);
97 } 97 }
98 else 98 else
99 odebug << "QWS_DISPLAY already set as '" << env << "' - overriding ODevice transformation" << oendl; 99 odebug << "QWS_DISPLAY already set as '" << env << "' - overriding ODevice transformation" << oendl;
100 100
101 QPEApplication::defaultRotation(); /* to ensure deforient matches reality */ 101 QPEApplication::defaultRotation(); /* to ensure deforient matches reality */
102} 102}
103 103
104static void initKeyboard() 104static void initKeyboard()
105{ 105{
106 Config config("qpe"); 106 Config config("qpe");
107 107
108 config.setGroup( "Keyboard" ); 108 config.setGroup( "Keyboard" );
109 109
110 int ard = config.readNumEntry( "RepeatDelay" ); 110 int ard = config.readNumEntry( "RepeatDelay" );
111 int arp = config.readNumEntry( "RepeatPeriod" ); 111 int arp = config.readNumEntry( "RepeatPeriod" );
112 if ( ard > 0 && arp > 0 ) 112 if ( ard > 0 && arp > 0 )
113 qwsSetKeyboardAutoRepeat( ard, arp ); 113 qwsSetKeyboardAutoRepeat( ard, arp );
114 114
115 QString layout = config.readEntry( "Layout", "us101" ); 115 QString layout = config.readEntry( "Layout", "us101" );
116 Server::setKeyboardLayout( layout ); 116 Server::setKeyboardLayout( layout );
117} 117}
118 118
119static bool firstUse() 119static bool firstUse()
120{ 120{
121 bool needFirstUse = FALSE; 121 bool needFirstUse = FALSE;
122 if ( QWSServer::mouseHandler() && 122 if ( QWSServer::mouseHandler() &&
123 QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) { 123 QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) {
124 if ( !QFile::exists( "/etc/pointercal" ) ) 124 if ( !QFile::exists( "/etc/pointercal" ) )
125 needFirstUse = TRUE; 125 needFirstUse = TRUE;
126 } 126 }
127 127
128 { 128 {
129 Config config( "qpe" ); 129 Config config( "qpe" );
130 config.setGroup( "Startup" ); 130 config.setGroup( "Startup" );
131 needFirstUse |= config.readBoolEntry( "FirstUse", TRUE ); 131 needFirstUse |= config.readBoolEntry( "FirstUse", TRUE );
132 } 132 }
133 133
134 if ( !needFirstUse ) 134 if ( !needFirstUse )
135 return FALSE; 135 return FALSE;
136 136
137 FirstUse *fu = new FirstUse(); 137 FirstUse *fu = new FirstUse();
138 fu->exec(); 138 fu->exec();
139 bool rs = fu->restartNeeded(); 139 bool rs = fu->restartNeeded();
140 delete fu; 140 delete fu;
141 return rs; 141 return rs;
142} 142}
143 143
144int initApplication( int argc, char ** argv ) 144int initApplication( int argc, char ** argv )
145{ 145{
146 cleanup(); 146 cleanup();
147 initEnvironment(); 147 initEnvironment();
148 148
149#ifdef QWS 149#ifdef QWS
150 QWSServer::setDesktopBackground( QImage() ); 150 QWSServer::setDesktopBackground( QImage() );
151#endif 151#endif
152 ServerApplication a( argc, argv, QApplication::GuiServer ); 152 ServerApplication a( argc, argv, QApplication::GuiServer );
153 initKeyboard(); 153 initKeyboard();
154 154
155 if ( firstUse() ) 155 if ( firstUse() )
156 { 156 {
157 a.restart(); 157 a.restart();
158 return 0; 158 return 0;
159 } 159 }
160 160
161 { 161 {
162 QCopEnvelope e("QPE/System", "setBacklight(int)" ); 162 QCopEnvelope e("QPE/System", "setBacklight(int)" );
163 e << -3; // Forced on 163 e << -3; // Forced on
164 } 164 }
165 165
166 AlarmServer::initialize(); 166 AlarmServer::initialize();
167 Server *s = new Server(); 167 Server *s = new Server();
168 new SysFileMonitor(s); 168 new SysFileMonitor(s);
169#ifdef QWS 169#ifdef QWS
170 Network::createServer(s); 170 Network::createServer(s);
171#endif 171#endif
172 s->show(); 172 s->show();
173 173
174#if 0 174#if 0
175 if ( QDate::currentDate().year() < 2005 ) 175 if ( QDate::currentDate().year() < 2005 )
176 { 176 {
177 if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ), 177 if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ),
178 ServerApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ) 178 ServerApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" )
179 .arg( TimeString::dateString( QDate::currentDate())), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) 179 .arg( TimeString::dateString( QDate::currentDate())), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes )
180 { 180 {
181 QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" ); 181 QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" );
182 e << QString ( ); 182 e << QString ( );
183 } 183 }
184 } 184 }
185#endif 185#endif
186 186
187 create_pidfile(); 187 create_pidfile();
188 odebug << "--> mainloop in" << oendl; 188 odebug << "--> mainloop in" << oendl;
189 int rv = a.exec(); 189 int rv = a.exec();
190 odebug << "<-- mainloop out" << oendl; 190 odebug << "<-- mainloop out" << oendl;
191 remove_pidfile(); 191 remove_pidfile();
192 odebug << "removing server object..." << oendl; 192 odebug << "removing server object..." << oendl;
193 delete s; 193 delete s;
194 194
195 odebug << "returning from qpe/initapplication..." << oendl; 195 odebug << "returning from qpe/initapplication..." << oendl;
196 return rv; 196 return rv;
197} 197}
198 198
199static const char *pidfile_path = "/var/run/opie.pid"; 199static const char *pidfile_path = "/var/run/opie.pid";
200 200
201void create_pidfile() 201void create_pidfile()
202{ 202{
203 FILE *f; 203 FILE *f;
204 204
205 if (( f = ::fopen( pidfile_path, "w" ))) { 205 if (( f = ::fopen( pidfile_path, "w" ))) {
206 ::fprintf( f, "%d", getpid ( )); 206 ::fprintf( f, "%d", getpid ( ));
207 ::fclose( f ); 207 ::fclose( f );
208 } 208 }
209 else 209 else
210 { 210 {
211 odebug << "couldn't create pidfile: " << strerror( errno ) << oendl; 211 odebug << "couldn't create pidfile: " << strerror( errno ) << oendl;
212 } 212 }
213} 213}
214 214
215void remove_pidfile() 215void remove_pidfile()
216{ 216{
217 ::unlink( pidfile_path ); 217 ::unlink( pidfile_path );
218} 218}
219 219
220void handle_sigterm( int sig ) 220void handle_sigterm( int sig )
221{ 221{
222 qDebug( "D'oh! QPE Server process got SIGNAL %d. Trying to exit gracefully...", sig ); 222 qDebug( "D'oh! QPE Server process got SIGNAL %d. Trying to exit gracefully...", sig );
223 ::signal( SIGCHLD, SIG_IGN ); 223 ::signal( SIGCHLD, SIG_IGN );
224 ::signal( SIGSEGV, SIG_IGN ); 224 ::signal( SIGSEGV, SIG_IGN );
225 ::signal( SIGBUS, SIG_IGN ); 225 ::signal( SIGBUS, SIG_IGN );
226 ::signal( SIGILL, SIG_IGN ); 226 ::signal( SIGILL, SIG_IGN );
227 ::signal( SIGTERM, SIG_IGN ); 227 ::signal( SIGTERM, SIG_IGN );
228 ::signal ( SIGINT, SIG_IGN ); 228 ::signal ( SIGINT, SIG_IGN );
229 if ( qApp ) qApp->quit(); 229 if ( qApp ) qApp->quit();
230} 230}
231 231
232int main( int argc, char ** argv ) 232int main( int argc, char ** argv )
233{ 233{
234 ::signal( SIGCHLD, SIG_IGN ); 234 ::signal( SIGCHLD, SIG_IGN );
235 ::signal( SIGSEGV, handle_sigterm ); 235 ::signal( SIGSEGV, handle_sigterm );
236 ::signal( SIGBUS, handle_sigterm ); 236 ::signal( SIGBUS, handle_sigterm );
237 ::signal( SIGILL, handle_sigterm ); 237 ::signal( SIGILL, handle_sigterm );
238 ::signal( SIGTERM, handle_sigterm ); 238 ::signal( SIGTERM, handle_sigterm );
239 ::signal ( SIGINT, handle_sigterm ); 239 ::signal ( SIGINT, handle_sigterm );
240 ::setsid(); 240 ::setsid();
241 ::setpgid( 0, 0 ); 241 ::setpgid( 0, 0 );
242 242
243 ::atexit( remove_pidfile ); 243 ::atexit( remove_pidfile );
244 244
245 int retVal = initApplication( argc, argv ); 245 int retVal = initApplication( argc, argv );
246 246
247 // Have we been asked to restart? 247 // Have we been asked to restart?
248 if ( ServerApplication::doRestart ) 248 if ( ServerApplication::doRestart )
249 { 249 {
250 for ( int fd = 3; fd < 100; fd++ ) close( fd ); 250 for ( int fd = 3; fd < 100; fd++ ) close( fd );
251 execl( (QPEApplication::qpeDir()+"bin/qpe").latin1(), "qpe", 0 ); 251 execl( (QPEApplication::qpeDir()+"bin/qpe").latin1(), "qpe", 0 );
252 } 252 }
253 253
254 return retVal; 254 return retVal;
255} 255}