summaryrefslogtreecommitdiff
authorpaule <paule>2007-01-31 05:11:08 (UTC)
committer paule <paule>2007-01-31 05:11:08 (UTC)
commitf4e6ede30d494ad91fdbd0fd72498ef3a44bf7ee (patch) (unidiff)
treedc0431392342843f47979267dcb3244270b07acf
parent9a3875c32922a322d991e67b13e89242f71a862c (diff)
downloadopie-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
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/main.cpp27
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>
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( "%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
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 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
199static const char *pidfile_path = "/var/run/opie.pid"; 210static const char *pidfile_path = "/var/run/opie.pid";
200 211
201void create_pidfile() 212void 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
215void remove_pidfile() 226void remove_pidfile()
216{ 227{
217 ::unlink( pidfile_path ); 228 ::unlink( pidfile_path );
218} 229}
219 230
220void handle_sigterm( int sig ) 231void 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
232int main( int argc, char ** argv ) 243int 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}