-rw-r--r-- | core/launcher/desktop.cpp | 2 | ||||
-rw-r--r-- | core/launcher/main.cpp | 132 |
2 files changed, 7 insertions, 127 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index bf19280..dee5535 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -576,96 +576,98 @@ void Desktop::execAutoStart() #include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <errno.h> #include <linux/ioctl.h> #include <time.h> #endif static bool blanked=FALSE; static void blankScreen() { if ( !qt_screen ) return; /* Should use a big black window instead. QGfx* g = qt_screen->screenGfx(); g->fillRect(0,0,qt_screen->width(),qt_screen->height()); delete g; */ blanked = TRUE; } static void darkScreen() { extern void qpe_setBacklight(int); qpe_setBacklight(0); // force off } void Desktop::togglePower() { extern void qpe_setBacklight ( int ); // We need to toggle the LCD fast - no time to send a QCop static bool excllock = false; if ( excllock ) return; excllock = true; bool wasloggedin = loggedin; loggedin=0; suspendTime = QDateTime::currentDateTime(); // qpe_setBacklight ( 0 ); // force LCD off (sandman: why ????) if ( wasloggedin ) blankScreen(); + qDebug ( "OPIE suspending\n" ); + ODevice::inst ( )-> suspend ( ); QWSServer::screenSaverActivate ( false ); qpe_setBacklight ( -3 ); // force LCD on { QCopEnvelope("QPE/Card", "mtabChanged()" ); // might have changed while asleep } if ( wasloggedin ) login(TRUE); execAutoStart(); //qcopBridge->closeOpenConnections(); excllock = false; } void Desktop::toggleLight() { QCopEnvelope e("QPE/System", "setBacklight(int)"); e << -2; // toggle } void Desktop::toggleSymbolInput() { tb->toggleSymbolInput(); } void Desktop::toggleNumLockState() { tb->toggleNumLockState(); } void Desktop::toggleCapsLockState() { tb->toggleCapsLockState(); } void Desktop::styleChange( QStyle &s ) { QWidget::styleChange( s ); int displayw = qApp->desktop()->width(); int displayh = qApp->desktop()->height(); QSize sz = tb->sizeHint(); diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index 5cf624b..ca0bbe4 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp @@ -1,205 +1,95 @@ /********************************************************************** ** Copyright (C) 2000 Trolltech AS. All rights reserved. ** ** This file is part of Qtopia Environment. ** ** This file may be distributed and/or modified under the terms of the ** GNU General Public License version 2 as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL included in the ** packaging of this file. ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ** See http://www.trolltech.com/gpl/ for GPL licensing information. ** ** Contact info@trolltech.com if any conditions of this licensing are ** not clear to you. ** **********************************************************************/ #include "desktop.h" #include "taskbar.h" #include "stabmon.h" #include <qpe/qpeapplication.h> #include <qpe/network.h> #include <qpe/config.h> #if defined( QT_QWS_CUSTOM ) || defined( QT_QWS_IPAQ ) #include <qpe/custom.h> #endif #include <opie/odevice.h> #include <qfile.h> #include <qwindowsystem_qws.h> #include <qpe/qcopenvelope_qws.h> #include <qpe/alarmserver.h> #include <stdlib.h> #include <stdio.h> #include <signal.h> #include <unistd.h> -#if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) +#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) #include "../calibrate/calibrate.h" #endif -#ifdef QT_QWS_CASSIOPEIA -static void ignoreMessage( QtMsgType, const char * ) -{ -} -#include <sys/mount.h> -#include <sys/types.h> -#include <sys/stat.h> -#include <sys/time.h> -#include <fcntl.h> -#include <qdatetime.h> - -void initCassiopeia() -{ - // MIPSEL-specific init - make sure /proc exists for shm -/* - if ( mount("/dev/ram0", "/", "ext2", MS_REMOUNT | MS_MGC_VAL, 0 ) ) { - perror("Remounting - / read/write"); - } -*/ - if ( mount("none", "/tmp", "ramfs", 0, 0 ) ) { - perror("mounting ramfs /tmp"); - } else { - fprintf( stderr, "mounted /tmp\n" ); - } - if ( mount("none", "/home", "ramfs", 0, 0 ) ) { - perror("mounting ramfs /home"); - } else { - fprintf( stderr, "mounted /home\n" ); - } - if ( mount("none","/proc","proc",0,0) ) { - perror("Mounting - /proc"); - } else { - fprintf( stderr, "mounted /proc\n" ); - } - if ( mount("none","/mnt","shm",0,0) ) { - perror("Mounting - shm"); - } - setenv( "QTDIR", "/", 1 ); - setenv( "OPIEDIR", "/", 1 ); - setenv( "HOME", "/home", 1 ); - mkdir( "/home/Documents", 0755 ); - - // set a reasonable starting date - QDateTime dt( QDate( 2001, 3, 15 ) ); - QDateTime now = QDateTime::currentDateTime(); - int change = now.secsTo( dt ); - - time_t t = ::time(0); - t += change; - stime(&t); - - qInstallMsgHandler(ignoreMessage); -} -#endif - -#ifdef QPE_OWNAPM -#include <sys/ioctl.h> -#include <sys/types.h> -#include <fcntl.h> -#include <unistd.h> -#include <errno.h> -#include <linux/ioctl.h> -#include <qpe/global.h> - -static void disableAPM() -{ - - int fd, cur_val, ret; - char *device = "/dev/apm_bios"; - - fd = open (device, O_WRONLY); - - if (fd == -1) { - perror(device); - return; - } - - cur_val = ioctl(fd, APM_IOCGEVTSRC, 0); - if (cur_val == -1) { - perror("ioctl"); - exit(errno); - } - - ret = ioctl(fd, APM_IOCSEVTSRC, cur_val & ~APM_EVT_POWER_BUTTON); - if (ret == -1) { - perror("ioctl"); - return; - } - close(fd); -} - -static void initAPM() -{ - // So that we have to do it ourself, but better. - disableAPM(); -} -#endif - -#ifdef QT_DEMO_SINGLE_FLOPPY -#include <sys/mount.h> - -void initFloppy() -{ - mount("none","/proc","proc",0,0); - setenv( "QTDIR", "/", 0 ); - setenv( "HOME", "/root", 0 ); - setenv( "QWS_SIZE", "240x320", 0 ); -} -#endif - void initEnvironment() { Config config("locale"); config.setGroup( "Location" ); QString tz = config.readEntry( "Timezone", getenv("TZ") ); // if not timezone set, pick New York if (tz.isNull()) tz = "America/New_York"; setenv( "TZ", tz, 1 ); config.writeEntry( "Timezone", tz); config.setGroup( "Language" ); QString lang = config.readEntry( "Language", getenv("LANG") ); if ( !lang.isNull() ) setenv( "LANG", lang, 1 ); } static void initBacklight() { QCopEnvelope e("QPE/System", "setBacklight(int)" ); e << -3; // Forced on } class ModelKeyFilter : public QObject, public QWSServer::KeyboardFilter { public: ModelKeyFilter ( ) : QObject ( 0, "MODEL_KEY_FILTER" ) { bool doinst = false; m_model = ODevice::inst ( )-> model ( ); m_power_timer = 0; switch ( m_model ) { case OMODEL_iPAQ_H31xx: case OMODEL_iPAQ_H36xx: case OMODEL_iPAQ_H37xx: case OMODEL_iPAQ_H38xx: doinst = true; break; default : break; } if ( doinst ) QWSServer::setKeyboardFilter ( this ); } @@ -228,160 +118,148 @@ public: } default: break; } // map Power Button short/long press to F34/F35 switch ( m_model ) { case OMODEL_iPAQ_H31xx: case OMODEL_iPAQ_H36xx: case OMODEL_iPAQ_H37xx: case OMODEL_iPAQ_H38xx: { if ( keycode == Key_SysReq ) { if ( isPress ) { if ( m_power_timer ) killTimer ( m_power_timer ); m_power_timer = startTimer ( 500 ); } else if ( m_power_timer ) { killTimer ( m_power_timer ); m_power_timer = 0; QWSServer::sendKeyEvent ( -1, Key_F34, 0, true, false ); QWSServer::sendKeyEvent ( -1, Key_F34, 0, false, false ); } kill = true; } break; } default: break; } return kill; } virtual void timerEvent ( QTimerEvent * ) { killTimer ( m_power_timer ); m_power_timer = 0; QWSServer::sendKeyEvent ( -1, Key_F35, 0, true, false ); QWSServer::sendKeyEvent ( -1, Key_F35, 0, false, false ); } private: OModel m_model; int m_power_timer; }; int initApplication( int argc, char ** argv ) { -#ifdef QT_QWS_CASSIOPEIA - initCassiopeia(); -#endif - -#ifdef QPE_OWNAPM - initAPM(); -#endif - -#ifdef QT_DEMO_SINGLE_FLOPPY - initFloppy(); -#endif + ODevice::inst ( )-> setPowerButtonHandler ( ODevice::OPIE ); initEnvironment(); #if !defined(QT_QWS_CASSIOPEIA) && !defined(QT_QWS_IPAQ) && !defined(QT_QWS_EBX) setenv( "QWS_SIZE", "240x320", 0 ); #endif //Don't flicker at startup: QWSServer::setDesktopBackground( QImage() ); DesktopApplication a( argc, argv, QApplication::GuiServer ); (void) new ModelKeyFilter ( ); initBacklight(); AlarmServer::initialize(); Desktop *d = new Desktop(); QObject::connect( &a, SIGNAL(datebook()), d, SLOT(raiseDatebook()) ); QObject::connect( &a, SIGNAL(contacts()), d, SLOT(raiseContacts()) ); QObject::connect( &a, SIGNAL(launch()), d, SLOT(raiseLauncher()) ); QObject::connect( &a, SIGNAL(email()), d, SLOT(raiseEmail()) ); 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); #if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) if ( !QFile::exists( "/etc/pointercal" ) ) { // Make sure calibration widget starts on top. Calibrate *cal = new Calibrate; cal->exec(); delete cal; } #endif d->show(); int rv = a.exec(); delete d; + ODevice::inst ( )-> setPowerButtonHandler ( ODevice::KERNEL ); + return rv; } static const char *pidfile_path = "/var/run/opie.pid"; void create_pidfile ( ) { FILE *f; if (( f = ::fopen ( pidfile_path, "w" ))) { ::fprintf ( f, "%d", getpid ( )); ::fclose ( f ); } } void remove_pidfile ( ) { ::unlink ( pidfile_path ); } void handle_sigterm ( int /* sig */ ) { if ( qApp ) qApp-> quit ( ); } int main( int argc, char ** argv ) { -#ifndef SINGLE_APP ::signal( SIGCHLD, SIG_IGN ); ::signal ( SIGTERM, handle_sigterm ); ::signal ( SIGINT, handle_sigterm ); ::setsid ( ); ::setpgid ( 0, 0 ); ::atexit ( remove_pidfile ); create_pidfile ( ); -#endif int retVal = initApplication ( argc, argv ); -#ifndef SINGLE_APP // Kill them. Kill them all. ::kill ( 0, SIGTERM ); - ::sleep( 1 ); + ::sleep ( 1 ); ::kill ( 0, SIGKILL ); -#endif return retVal; } |