author | paule <paule> | 2007-01-31 05:11:08 (UTC) |
---|---|---|
committer | paule <paule> | 2007-01-31 05:11:08 (UTC) |
commit | f4e6ede30d494ad91fdbd0fd72498ef3a44bf7ee (patch) (unidiff) | |
tree | dc0431392342843f47979267dcb3244270b07acf | |
parent | 9a3875c32922a322d991e67b13e89242f71a862c (diff) | |
download | opie-f4e6ede30d494ad91fdbd0fd72498ef3a44bf7ee.zip opie-f4e6ede30d494ad91fdbd0fd72498ef3a44bf7ee.tar.gz opie-f4e6ede30d494ad91fdbd0fd72498ef3a44bf7ee.tar.bz2 |
Reinstate startup system year validity check and update year to 2007; show date/time settings application on starting if option is enabled
-rw-r--r-- | core/launcher/main.cpp | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index 8ed8710..4063517 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp | |||
@@ -1,255 +1,266 @@ | |||
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> |
32 | using namespace Opie::Core; | 32 | using 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 | ||
53 | void create_pidfile(); | 53 | void create_pidfile(); |
54 | void remove_pidfile(); | 54 | void remove_pidfile(); |
55 | 55 | ||
56 | static void cleanup() | 56 | static 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 | ||
67 | void initEnvironment() | 67 | void 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( "%1:Rot%2:0").arg(ODevice::inst()->qteDriver()).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 | ||
104 | static void initKeyboard() | 104 | static 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 | ||
119 | static bool firstUse() | 119 | static 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 | ||
144 | int initApplication( int argc, char ** argv ) | 144 | int 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 | bool firstUseShown = firstUse(); |
156 | if ( firstUseShown ) | ||
156 | { | 157 | { |
157 | a.restart(); | 158 | a.restart(); |
158 | return 0; | 159 | return 0; |
159 | } | 160 | } |
160 | 161 | ||
161 | { | 162 | { |
162 | QCopEnvelope e("QPE/System", "setBacklight(int)" ); | 163 | QCopEnvelope e("QPE/System", "setBacklight(int)" ); |
163 | e << -3; // Forced on | 164 | e << -3; // Forced on |
164 | } | 165 | } |
165 | 166 | ||
166 | AlarmServer::initialize(); | 167 | AlarmServer::initialize(); |
167 | Server *s = new Server(); | 168 | Server *s = new Server(); |
168 | new SysFileMonitor(s); | 169 | new SysFileMonitor(s); |
169 | #ifdef QWS | 170 | #ifdef QWS |
170 | Network::createServer(s); | 171 | Network::createServer(s); |
171 | #endif | 172 | #endif |
172 | s->show(); | 173 | s->show(); |
173 | 174 | ||
174 | #if 0 | 175 | if ( !firstUseShown ) { |
175 | if ( QDate::currentDate().year() < 2005 ) | 176 | Config config( "qpe" ); |
176 | { | 177 | config.setGroup( "Startup" ); |
177 | if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ), | 178 | bool showTimeSettings = config.readBoolEntry( "ShowTimeSettings", FALSE ); |
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 | |
179 | .arg( TimeString::dateString( QDate::currentDate())), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) | 180 | if ( !showTimeSettings && QDate::currentDate().year() < 2007 ) |
181 | { | ||
182 | if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ), | ||
183 | ServerApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ) | ||
184 | .arg( TimeString::dateString( QDate::currentDate())), | ||
185 | QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) | ||
186 | { | ||
187 | showTimeSettings = TRUE; | ||
188 | } | ||
189 | } | ||
190 | |||
191 | if ( showTimeSettings ) | ||
180 | { | 192 | { |
181 | QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" ); | 193 | QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" ); |
182 | e << QString ( ); | 194 | e << QString ( ); |
183 | } | 195 | } |
184 | } | 196 | } |
185 | #endif | ||
186 | 197 | ||
187 | create_pidfile(); | 198 | create_pidfile(); |
188 | odebug << "--> mainloop in" << oendl; | 199 | odebug << "--> mainloop in" << oendl; |
189 | int rv = a.exec(); | 200 | int rv = a.exec(); |
190 | odebug << "<-- mainloop out" << oendl; | 201 | odebug << "<-- mainloop out" << oendl; |
191 | remove_pidfile(); | 202 | remove_pidfile(); |
192 | odebug << "removing server object..." << oendl; | 203 | odebug << "removing server object..." << oendl; |
193 | delete s; | 204 | delete s; |
194 | 205 | ||
195 | odebug << "returning from qpe/initapplication..." << oendl; | 206 | odebug << "returning from qpe/initapplication..." << oendl; |
196 | return rv; | 207 | return rv; |
197 | } | 208 | } |
198 | 209 | ||
199 | static const char *pidfile_path = "/var/run/opie.pid"; | 210 | static const char *pidfile_path = "/var/run/opie.pid"; |
200 | 211 | ||
201 | void create_pidfile() | 212 | void create_pidfile() |
202 | { | 213 | { |
203 | FILE *f; | 214 | FILE *f; |
204 | 215 | ||
205 | if (( f = ::fopen( pidfile_path, "w" ))) { | 216 | if (( f = ::fopen( pidfile_path, "w" ))) { |
206 | ::fprintf( f, "%d", getpid ( )); | 217 | ::fprintf( f, "%d", getpid ( )); |
207 | ::fclose( f ); | 218 | ::fclose( f ); |
208 | } | 219 | } |
209 | else | 220 | else |
210 | { | 221 | { |
211 | odebug << "couldn't create pidfile: " << strerror( errno ) << oendl; | 222 | odebug << "couldn't create pidfile: " << strerror( errno ) << oendl; |
212 | } | 223 | } |
213 | } | 224 | } |
214 | 225 | ||
215 | void remove_pidfile() | 226 | void remove_pidfile() |
216 | { | 227 | { |
217 | ::unlink( pidfile_path ); | 228 | ::unlink( pidfile_path ); |
218 | } | 229 | } |
219 | 230 | ||
220 | void handle_sigterm( int sig ) | 231 | void handle_sigterm( int sig ) |
221 | { | 232 | { |
222 | qDebug( "D'oh! QPE Server process got SIGNAL %d. Trying to exit gracefully...", sig ); | 233 | qDebug( "D'oh! QPE Server process got SIGNAL %d. Trying to exit gracefully...", sig ); |
223 | ::signal( SIGCHLD, SIG_IGN ); | 234 | ::signal( SIGCHLD, SIG_IGN ); |
224 | ::signal( SIGSEGV, SIG_IGN ); | 235 | ::signal( SIGSEGV, SIG_IGN ); |
225 | ::signal( SIGBUS, SIG_IGN ); | 236 | ::signal( SIGBUS, SIG_IGN ); |
226 | ::signal( SIGILL, SIG_IGN ); | 237 | ::signal( SIGILL, SIG_IGN ); |
227 | ::signal( SIGTERM, SIG_IGN ); | 238 | ::signal( SIGTERM, SIG_IGN ); |
228 | ::signal ( SIGINT, SIG_IGN ); | 239 | ::signal ( SIGINT, SIG_IGN ); |
229 | if ( qApp ) qApp->quit(); | 240 | if ( qApp ) qApp->quit(); |
230 | } | 241 | } |
231 | 242 | ||
232 | int main( int argc, char ** argv ) | 243 | int main( int argc, char ** argv ) |
233 | { | 244 | { |
234 | ::signal( SIGCHLD, SIG_IGN ); | 245 | ::signal( SIGCHLD, SIG_IGN ); |
235 | ::signal( SIGSEGV, handle_sigterm ); | 246 | ::signal( SIGSEGV, handle_sigterm ); |
236 | ::signal( SIGBUS, handle_sigterm ); | 247 | ::signal( SIGBUS, handle_sigterm ); |
237 | ::signal( SIGILL, handle_sigterm ); | 248 | ::signal( SIGILL, handle_sigterm ); |
238 | ::signal( SIGTERM, handle_sigterm ); | 249 | ::signal( SIGTERM, handle_sigterm ); |
239 | ::signal ( SIGINT, handle_sigterm ); | 250 | ::signal ( SIGINT, handle_sigterm ); |
240 | ::setsid(); | 251 | ::setsid(); |
241 | ::setpgid( 0, 0 ); | 252 | ::setpgid( 0, 0 ); |
242 | 253 | ||
243 | ::atexit( remove_pidfile ); | 254 | ::atexit( remove_pidfile ); |
244 | 255 | ||
245 | int retVal = initApplication( argc, argv ); | 256 | int retVal = initApplication( argc, argv ); |
246 | 257 | ||
247 | // Have we been asked to restart? | 258 | // Have we been asked to restart? |
248 | if ( ServerApplication::doRestart ) | 259 | if ( ServerApplication::doRestart ) |
249 | { | 260 | { |
250 | for ( int fd = 3; fd < 100; fd++ ) close( fd ); | 261 | for ( int fd = 3; fd < 100; fd++ ) close( fd ); |
251 | execl( (QPEApplication::qpeDir()+"bin/qpe").latin1(), "qpe", 0 ); | 262 | execl( (QPEApplication::qpeDir()+"bin/qpe").latin1(), "qpe", 0 ); |
252 | } | 263 | } |
253 | 264 | ||
254 | return retVal; | 265 | return retVal; |
255 | } | 266 | } |