/********************************************************************** ** 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 #include #include #ifdef QT_QWS_CUSTOM #include #endif #include #include #include #include #include #include #include #include #if defined(QT_QWS_CASSIOPEIA) || defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) #include "../calibrate/calibrate.h" #endif #ifdef QT_QWS_LOGIN #include "../login/qdmdialogimpl.h" #endif #ifdef QT_QWS_CASSIOPEIA static void ignoreMessage( QtMsgType, const char * ) { } #include #include #include #include #include #include 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 #include #include #include #include #include #include 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 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 } int initApplication( int argc, char ** argv ) { #ifdef QT_QWS_CASSIOPEIA initCassiopeia(); #endif #ifdef QPE_OWNAPM initAPM(); #endif #ifdef QT_DEMO_SINGLE_FLOPPY initFloppy(); #endif 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 ); initBacklight(); AlarmServer::initialize(); #if defined(QT_QWS_LOGIN) for( int i=0; iexec(); delete cal; } #endif d->show(); int rv = a.exec(); delete d; return rv; } int main( int argc, char ** argv ) { #ifndef SINGLE_APP signal( SIGCHLD, SIG_IGN ); #endif int retVal = initApplication( argc, argv ); #ifndef SINGLE_APP // Kill them. Kill them all. setpgid( getpid(), getppid() ); killpg( getpid(), SIGTERM ); sleep( 1 ); killpg( getpid(), SIGKILL ); #endif return retVal; }