summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/launcher/main.cpp252
1 files changed, 207 insertions, 45 deletions
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp
index 69a7fea..075985d 100644
--- a/core/launcher/main.cpp
+++ b/core/launcher/main.cpp
@@ -1,5 +1,5 @@
/**********************************************************************
-** Copyright (C) 2000 Trolltech AS. All rights reserved.
+** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
**
-** This file is part of Qtopia Environment.
+** This file is part of the Qtopia Environment.
**
@@ -20,22 +20,26 @@
-#include "desktop.h"
+#ifndef QTOPIA_INTERNAL_FILEOPERATIONS
+#define QTOPIA_INTERNAL_FILEOPERATIONS
+#endif
+#include "server.h"
+#include "serverapp.h"
#include "taskbar.h"
#include "stabmon.h"
+#include "launcher.h"
+#include "firstuse.h"
+#include "launcherglobal.h"
-#include <qpe/qpeapplication.h>
-#include <qpe/network.h>
-#include <qpe/config.h>
-#if defined( QT_QWS_SL5XXX ) || defined( QT_QWS_IPAQ ) || defined (QT_QWS_RAMSES)
-#include <qpe/custom.h>
-#endif
+#include <qtopia/qpeapplication.h>
+#include <qtopia/network.h>
+#include <qtopia/config.h>
+#include <qtopia/custom.h>
+#include <qtopia/global.h>
-#include <opie/odevice.h>
-
-#include <qmessagebox.h>
#include <qfile.h>
-#include <qimage.h>
+#include <qdir.h>
+#ifdef QWS
#include <qwindowsystem_qws.h>
-#include <qwsmouse_qws.h>
-#include <qpe/qcopenvelope_qws.h>
-#include <qpe/alarmserver.h>
+#include <qtopia/qcopenvelope_qws.h>
+#endif
+#include <qtopia/alarmserver.h>
@@ -44,5 +48,21 @@
#include <signal.h>
+#ifndef Q_OS_WIN32
#include <unistd.h>
+#else
+#include <process.h>
+#endif
+
+#include "calibrate.h"
+
+
+#ifdef QT_QWS_LOGIN
+#include "../login/qdmdialogimpl.h"
+#endif
+
+#ifdef Q_WS_QWS
+#include <qkeyboard_qws.h>
+#endif
-#include "../calibrate/calibrate.h"
+#include <qmessagebox.h>
+#include <opie/odevice.h>
@@ -50,12 +70,80 @@ using namespace Opie;
+
+static void cleanup()
+{
+ QDir dir( Opie::Global::tempDir(), "qcop-msg-*" );
+
+ QStringList stale = dir.entryList();
+ QStringList::Iterator it;
+ for ( it = stale.begin(); it != stale.end(); ++it ) {
+ dir.remove( *it );
+ }
+}
+
+static void refreshTimeZoneConfig()
+{
+ /* ### FIXME timezone handling */
+#if 0
+ // We need to help WorldTime in setting up its configuration for
+ // the current translation
+ // BEGIN no tr
+ const char *defaultTz[] = {
+ "America/New_York",
+ "America/Los_Angeles",
+ "Europe/Oslo",
+ "Asia/Tokyo",
+ "Asia/Hong_Kong",
+ "Australia/Brisbane",
+ 0
+ };
+ // END no tr
+
+ TimeZone curZone;
+ QString zoneID;
+ int zoneIndex;
+ Config cfg = Config( "WorldTime" );
+ cfg.setGroup( "TimeZones" );
+ if (!cfg.hasKey( "Zone0" )){
+ // We have no existing timezones use the defaults which are untranslated strings
+ QString currTz = TimeZone::current().id();
+ QStringList zoneDefaults;
+ zoneDefaults.append( currTz );
+ for ( int i = 0; defaultTz[i] && zoneDefaults.count() < 6; i++ ) {
+ if ( defaultTz[i] != currTz )
+ zoneDefaults.append( defaultTz[i] );
+ }
+ zoneIndex = 0;
+ for (QStringList::Iterator it = zoneDefaults.begin(); it != zoneDefaults.end() ; ++it){
+ cfg.writeEntry( "Zone" + QString::number( zoneIndex ) , *it);
+ zoneIndex++;
+ }
+ }
+ // We have an existing list of timezones refresh the
+ // translations of TimeZone name
+ zoneIndex = 0;
+ while (cfg.hasKey( "Zone"+ QString::number( zoneIndex ))){
+ zoneID = cfg.readEntry( "Zone" + QString::number( zoneIndex ));
+ curZone = TimeZone( zoneID );
+ if ( !curZone.isValid() ){
+ qDebug( "initEnvironment() Invalid TimeZone %s", zoneID.latin1() );
+ break;
+ }
+ cfg.writeEntry( "ZoneName" + QString::number( zoneIndex ), curZone.city() );
+ zoneIndex++;
+ }
+#endif
+}
+
void initEnvironment()
{
- int rot;
+#ifdef Q_OS_WIN32
+ // Config file requires HOME dir which uses QDir which needs the winver
+ qt_init_winver();
+#endif
Config config("locale");
-
config.setGroup( "Location" );
- QString tz = config.readEntry( "Timezone", getenv("TZ") );
+ QString tz = config.readEntry( "Timezone", getenv("TZ") ).stripWhiteSpace();
// if not timezone set, pick New York
- if (tz.isNull())
+ if (tz.isNull() || tz.isEmpty())
tz = "America/New_York";
@@ -66,5 +154,9 @@ void initEnvironment()
config.setGroup( "Language" );
- QString lang = config.readEntry( "Language", getenv("LANG") );
- if ( !lang.isNull() )
+ QString lang = config.readEntry( "Language", getenv("LANG") ).stripWhiteSpace();
+ if( lang.isNull() || lang.isEmpty())
+ lang = "en_US";
+
setenv( "LANG", lang, 1 );
+ config.writeEntry("Language", lang);
+ config.write();
@@ -74,4 +166,7 @@ void initEnvironment()
+
+
QString env(getenv("QWS_DISPLAY"));
if (env.contains("Transformed")) {
+ int rot;
// transformed driver default rotation is controlled by the hardware.
@@ -87,2 +182,40 @@ void initEnvironment()
+static void initKeyboard()
+{
+ Config config("qpe");
+
+ config.setGroup( "Keyboard" );
+
+ int ard = config.readNumEntry( "RepeatDelay" );
+ int arp = config.readNumEntry( "RepeatPeriod" );
+ if ( ard > 0 && arp > 0 )
+ qwsSetKeyboardAutoRepeat( ard, arp );
+
+ QString layout = config.readEntry( "Layout", "us101" );
+ Server::setKeyboardLayout( layout );
+}
+
+static bool firstUse()
+{
+ bool needFirstUse = FALSE;
+ if ( QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) {
+ if ( !QFile::exists( "/etc/pointercal" ) )
+ needFirstUse = TRUE;
+ }
+
+ {
+ Config config( "qpe" );
+ config.setGroup( "Startup" );
+ needFirstUse |= config.readBoolEntry( "FirstUse", TRUE );
+ }
+
+ if ( !needFirstUse )
+ return FALSE;
+
+ FirstUse *fu = new FirstUse();
+ fu->exec();
+ bool rs = fu->restartNeeded();
+ delete fu;
+ return rs;
+}
@@ -90,2 +223,5 @@ int initApplication( int argc, char ** argv )
{
+ cleanup();
+
+
initEnvironment();
@@ -93,5 +229,16 @@ int initApplication( int argc, char ** argv )
//Don't flicker at startup:
+#ifdef QWS
QWSServer::setDesktopBackground( QImage() );
+#endif
+ ServerApplication a( argc, argv, QApplication::GuiServer );
+
+ refreshTimeZoneConfig();
- DesktopApplication a( argc, argv, QApplication::GuiServer );
+ initKeyboard();
+
+ // Don't use first use under Windows
+ if ( firstUse() ) {
+ a.restart();
+ return 0;
+ }
@@ -99,3 +246,3 @@ int initApplication( int argc, char ** argv )
- { // init backlight
+ {
QCopEnvelope e("QPE/System", "setBacklight(int)" );
@@ -106,27 +253,16 @@ int initApplication( int argc, char ** argv )
- Desktop *d = new Desktop();
- QObject::connect( &a, SIGNAL(power()), d, SLOT(togglePower()) );
- QObject::connect( &a, SIGNAL(backlight()), d, SLOT(toggleLight()) );
- QObject::connect( &a, SIGNAL(symbol()), d, SLOT(toggleSymbolInput()) );
- QObject::connect( &a, SIGNAL(numLockStateToggle()), d, SLOT(toggleNumLockState()) );
- QObject::connect( &a, SIGNAL(capsLockStateToggle()), d, SLOT(toggleCapsLockState()) );
- QObject::connect( &a, SIGNAL(prepareForRestart()), d, SLOT(terminateServers()) );
- (void)new SysFileMonitor(d);
- Network::createServer(d);
+ Server *s = new Server();
- if ( QWSServer::mouseHandler() ->inherits("QCalibratedMouseHandler") ) {
- if ( !QFile::exists( "/etc/pointercal" ) ) {
- // Make sure calibration widget starts on top.
- Calibrate *cal = new Calibrate;
- cal->exec();
- delete cal;
- }
- }
+ (void)new SysFileMonitor(s);
+#ifdef QWS
+ Network::createServer(s);
+#endif
- d->show();
+ s->show();
+ /* THE ARM rtc has problem holdings the time on reset */
if ( QDate::currentDate ( ). year ( ) < 2000 ) {
- if ( QMessageBox::information ( 0, DesktopApplication::tr( "Information" ), DesktopApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ). arg( TimeString::dateString ( QDate::currentDate ( ))), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) {
+ if ( QMessageBox::information ( 0, ServerApplication::tr( "Information" ), ServerApplication::tr( "<p>The system date doesn't seem to be valid.\n(%1)</p><p>Do you want to correct the clock ?</p>" ). arg( TimeString::dateString ( QDate::currentDate ( ))), QMessageBox::Yes, QMessageBox::No ) == QMessageBox::Yes ) {
QCopEnvelope e ( "QPE/Application/systemtime", "setDocument(QString)" );
@@ -138,3 +274,4 @@ int initApplication( int argc, char ** argv )
- delete d;
+ qDebug("exiting...");
+ delete s;
@@ -168,4 +305,6 @@ void handle_sigterm ( int /* sig */ )
+#ifndef Q_OS_WIN32
int main( int argc, char ** argv )
{
+
::signal ( SIGCHLD, SIG_IGN );
@@ -183,2 +322,10 @@ int main( int argc, char ** argv )
+ // Have we been asked to restart?
+ if ( ServerApplication::doRestart ) {
+ for ( int fd = 3; fd < 100; fd++ )
+ close( fd );
+
+ execl( (QPEApplication::qpeDir()+"bin/qpe").latin1(), "qpe", 0 );
+ }
+
// Kill them. Kill them all.
@@ -190,2 +337,17 @@ int main( int argc, char ** argv )
}
+#else
+
+int main( int argc, char ** argv )
+{
+ int retVal = initApplication( argc, argv );
+
+ if ( DesktopApplication::doRestart ) {
+ qDebug("Trying to restart");
+ execl( (QPEApplication::qpeDir()+"bin\\qpe").latin1(), "qpe", 0 );
+ }
+
+ return retVal;
+}
+
+#endif