-rw-r--r-- | core/launcher/desktop.cpp | 76 |
1 files changed, 38 insertions, 38 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index 1ec477c..5aba8dd 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -295,450 +295,450 @@ bool DesktopApplication::qwsEventFilter( QWSEvent *e ) return QPEApplication::qwsEventFilter( e ); } #endif void DesktopApplication::psTimeout() { qpedesktop->checkMemory(); // in case no events are being generated *ps = PowerStatusManager::readStatus(); if ( (ps->batteryStatus() == PowerStatus::VeryLow ) ) { pa->alert( tr( "Battery is running very low." ), 6 ); } if ( ps->batteryStatus() == PowerStatus::Critical ) { pa->alert( tr( "Battery level is critical!\n" "Keep power off until power restored!" ), 1 ); } if ( ps->backupBatteryStatus() == PowerStatus::VeryLow ) { pa->alert( tr( "The Back-up battery is very low.\nPlease charge the back-up battery." ), 3 ); } } void DesktopApplication::sendCard() { delete cardSendTimer; cardSendTimer = 0; QString card = getenv("HOME"); card += "/Applications/addressbook/businesscard.vcf"; if ( QFile::exists( card ) ) { QCopEnvelope e("QPE/Obex", "send(QString,QString,QString)"); QString mimetype = "text/x-vCard"; e << tr("business card") << card << mimetype; } } #if defined(QPE_HAVE_MEMALERTER) QPE_MEMALERTER_IMPL #endif //=========================================================================== Desktop::Desktop() : QWidget( 0, 0, WStyle_Tool | WStyle_Customize ), qcopBridge( 0 ), transferServer( 0 ), packageSlave( 0 ) { qpedesktop = this; // bg = new Info( this ); tb = new TaskBar; launcher = new Launcher( 0, 0, WStyle_Customize | QWidget::WGroupLeader ); connect(launcher, SIGNAL(busy()), tb, SLOT(startWait())); connect(launcher, SIGNAL(notBusy(const QString&)), tb, SLOT(stopWait(const QString&))); int displayw = qApp->desktop()->width(); int displayh = qApp->desktop()->height(); QSize sz = tb->sizeHint(); setGeometry( 0, displayh-sz.height(), displayw, sz.height() ); tb->setGeometry( 0, displayh-sz.height(), displayw, sz.height() ); tb->show(); launcher->showMaximized(); launcher->show(); launcher->raise(); #if defined(QPE_HAVE_MEMALERTER) initMemalerter(); #endif // start services startTransferServer(); (void) new IrServer( this ); rereadVolumes(); packageSlave = new PackageSlave( this ); connect(qApp, SIGNAL(volumeChanged(bool)), this, SLOT(rereadVolumes())); qApp->installEventFilter( this ); } void Desktop::show() { login(TRUE); QWidget::show(); } Desktop::~Desktop() { delete launcher; delete tb; delete qcopBridge; delete transferServer; } bool Desktop::recoverMemory() { return tb->recoverMemory(); } void Desktop::checkMemory() { #if defined(QPE_HAVE_MEMALERTER) static bool ignoreNormal=FALSE; static bool existingMessage=FALSE; if(existingMessage) return; // don't show a second message while still on first existingMessage = TRUE; switch ( memstate ) { case Unknown: break; case Low: memstate = Unknown; if ( recoverMemory() ) ignoreNormal = TRUE; else QMessageBox::warning( 0 , "Memory Status", "The memory smacks of shortage. \n" "Please save data. " ); break; case Normal: memstate = Unknown; if ( ignoreNormal ) ignoreNormal = FALSE; else QMessageBox::information ( 0 , "Memory Status", "There is enough memory again." ); break; case VeryLow: memstate = Unknown; QMessageBox::critical( 0 , "Memory Status", "The memory is very low. \n" "Please end this application \n" "immediately." ); recoverMemory(); } existingMessage = FALSE; #endif } static bool isVisibleWindow(int wid) { const QList<QWSWindow> &list = qwsServer->clientWindows(); QWSWindow* w; for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) { if ( w->winId() == wid ) return !w->isFullyObscured(); } return FALSE; } static bool hasVisibleWindow(const QString& clientname) { const QList<QWSWindow> &list = qwsServer->clientWindows(); QWSWindow* w; for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) { if ( w->client()->identity() == clientname && !w->isFullyObscured() ) return TRUE; } return FALSE; } void Desktop::raiseLauncher() { Config cfg("qpe"); //F12 'Home' cfg.setGroup("AppsKey"); QString tempItem; tempItem = cfg.readEntry("Middle","Home"); if(tempItem == "Home" || tempItem.isEmpty()) { if ( isVisibleWindow(launcher->winId()) ) launcher->nextView(); else launcher->raise(); } else { QCopEnvelope e("QPE/System","execute(QString)"); e << tempItem; } } void Desktop::executeOrModify(const QString& appLnkFile) { AppLnk lnk(MimeType::appsFolderName() + "/" + appLnkFile); if ( lnk.isValid() ) { - QCString app = lnk.exec().utf8(); - Global::terminateBuiltin("calibrate"); - if ( QCopChannel::isRegistered("QPE/Application/" + app) ) { - MRUList::addTask(&lnk); - if ( hasVisibleWindow(app) ) - QCopChannel::send("QPE/Application/" + app, "nextView()"); - else - QCopChannel::send("QPE/Application/" + app, "raise()"); - } else { - lnk.execute(); - } + QCString app = lnk.exec().utf8(); + Global::terminateBuiltin("calibrate"); + if ( QCopChannel::isRegistered("QPE/Application/" + app) ) { + MRUList::addTask(&lnk); + if ( hasVisibleWindow(app) ) + QCopChannel::send("QPE/Application/" + app, "nextView()"); + else + QCopChannel::send("QPE/Application/" + app, "raise()"); + } else { + lnk.execute(); + } } } void Desktop::raiseDatebook() { - Config cfg("qpe"); //F9 'Activity' - cfg.setGroup("AppsKey"); + Config cfg( "qpe" ); //F9 'Activity' + cfg.setGroup( "AppsKey" ); QString tempItem; - tempItem = cfg.readEntry("LeftEnd","Calender"); - if(tempItem == "Calender" || tempItem.isEmpty()) executeOrModify("Applications/datebook.desktop"); - else { - QCopEnvelope e("QPE/System","execute(QString)"); - e << tempItem; + tempItem = cfg.readEntry( "LeftEnd" , "Calender" ); + if ( tempItem == "Calender" || tempItem.isEmpty() ) { + tempItem = "datebook"; } + QCopEnvelope e( "QPE/System", "execute(QString)" ); + e << tempItem; } void Desktop::raiseContacts() { - Config cfg("qpe"); //F10, 'Contacts' - cfg.setGroup("AppsKey"); + Config cfg( "qpe" ); //F10, 'Contacts' + cfg.setGroup( "AppsKey" ); QString tempItem; - tempItem = cfg.readEntry("Left2nd","Address Book"); - if(tempItem == "Address Book" || tempItem.isEmpty()) executeOrModify("Applications/addressbook.desktop"); - else { - QCopEnvelope e("QPE/System","execute(QString)"); - e << tempItem; + tempItem = cfg.readEntry( "Left2nd", "Address Book" ); + if ( tempItem == "Address Book" || tempItem.isEmpty() ) { + tempItem = "addressbook"; } + QCopEnvelope e("QPE/System","execute(QString)"); + e << tempItem; } void Desktop::raiseMenu() { - Config cfg("qpe"); //F11, 'Menu' - cfg.setGroup("AppsKey"); + Config cfg( "qpe" ); //F11, 'Menu + cfg.setGroup( "AppsKey" ); QString tempItem; - tempItem = cfg.readEntry("Right2nd","Popup Menu"); - if(tempItem == "Popup Menu" || tempItem.isEmpty()) { - Global::terminateBuiltin("calibrate"); - tb->startMenu()->launch(); + tempItem = cfg.readEntry( "Right2nd" , "Popup Menu" ); + if ( tempItem == "Popup Menu" || tempItem.isEmpty() ) { + Global::terminateBuiltin("calibrate"); + tb->startMenu()->launch(); } else { QCopEnvelope e("QPE/System","execute(QString)"); e << tempItem; } } void Desktop::raiseEmail() { - Config cfg("qpe"); //F13, 'Mail' - cfg.setGroup("AppsKey"); + Config cfg( "qpe" ); //F13, 'Mail' + cfg.setGroup( "AppsKey" ); QString tempItem; - tempItem = cfg.readEntry("RightEnd","Mail"); - if(tempItem == "Mail" || tempItem == "qtmail" || tempItem.isEmpty()) executeOrModify("Applications/qtmail.desktop"); - else { - QCopEnvelope e("QPE/System","execute(QString)"); - e << tempItem; + tempItem = cfg.readEntry( "RightEnd", "Mail" ); + if ( tempItem == "Mail" || tempItem == "qtmail" || tempItem.isEmpty() ) { + tempItem = "mail"; } + QCopEnvelope e("QPE/System","execute(QString)"); + e << tempItem; } // autoStarts apps on resume and start void Desktop::execAutoStart() { QString appName; int delay; QDateTime now = QDateTime::currentDateTime(); Config cfg( "autostart" ); cfg.setGroup( "AutoStart" ); appName = cfg.readEntry( "Apps", "" ); delay = ( cfg.readEntry( "Delay", "0" ) ).toInt(); // If the time between suspend and resume was longer then the // value saved as delay, start the app if ( suspendTime.secsTo( now ) >= ( delay * 60 ) && !appName.isEmpty() ) { QCopEnvelope e( "QPE/System", "execute(QString)" ); e << QString( appName ); } } #if defined(QPE_HAVE_TOGGLELIGHT) #include <qpe/config.h> #include <sys/ioctl.h> #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(); 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(); tb->setGeometry( 0, displayh-sz.height(), displayw, sz.height() ); } void DesktopApplication::shutdown() { if ( type() != GuiServer ) return; ShutdownImpl *sd = new ShutdownImpl( 0, 0, WDestructiveClose ); connect( sd, SIGNAL(shutdown(ShutdownImpl::Type)), this, SLOT(shutdown(ShutdownImpl::Type)) ); sd->showMaximized(); } void DesktopApplication::shutdown( ShutdownImpl::Type t ) { switch ( t ) { case ShutdownImpl::ShutdownSystem: execlp("shutdown", "shutdown", "-h", "now", (void*)0); break; case ShutdownImpl::RebootSystem: execlp("shutdown", "shutdown", "-r", "now", (void*)0); break; case ShutdownImpl::RestartDesktop: restart(); break; case ShutdownImpl::TerminateDesktop: prepareForTermination(FALSE); // This is a workaround for a Qt bug // clipboard applet has to stop its poll timer, or Qt/E // will hang on quit() right before it emits aboutToQuit() emit aboutToQuit ( ); quit(); break; } } void DesktopApplication::restart() { prepareForTermination(TRUE); #ifdef Q_WS_QWS for ( int fd = 3; fd < 100; fd++ ) close( fd ); #if defined(QT_DEMO_SINGLE_FLOPPY) execl( "/sbin/init", "qpe", 0 ); #elif defined(QT_QWS_CASSIOPEIA) execl( "/bin/sh", "sh", 0 ); #else execl( (qpeDir()+"/bin/qpe").latin1(), "qpe", 0 ); #endif exit(1); #endif } void Desktop::startTransferServer() { // start qcop bridge server qcopBridge = new QCopBridge( 4243 ); if ( !qcopBridge->ok() ) { delete qcopBridge; qcopBridge = 0; } // start transfer server transferServer = new TransferServer( 4242 ); if ( !transferServer->ok() ) { delete transferServer; transferServer = 0; } if ( !transferServer || !qcopBridge ) startTimer( 2000 ); } |