-rw-r--r-- | core/launcher/desktop.cpp | 18 | ||||
-rw-r--r-- | core/launcher/desktop.h | 2 | ||||
-rw-r--r-- | core/launcher/startmenu.cpp | 304 | ||||
-rw-r--r-- | core/launcher/startmenu.h | 31 | ||||
-rw-r--r-- | core/launcher/systray.cpp | 2 | ||||
-rw-r--r-- | core/launcher/taskbar.cpp | 19 |
6 files changed, 318 insertions, 58 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index 68949e6..1a33b36 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -359,48 +359,51 @@ DesktopApplication::DesktopApplication( int& argc, char **argv, Type appType ) DesktopApplication::~DesktopApplication() { delete ps; delete pa; } void DesktopApplication::desktopMessage( const QCString &msg, const QByteArray &data ) { #ifdef Q_WS_QWS QDataStream stream( data, IO_ReadOnly ); if ( msg == "keyRegister(int key, QString channel, QString message)" ) { int k; QString c, m; stream >> k; stream >> c; stream >> m; qWarning( "KeyRegisterReceived: %i, %s, %s", k, ( const char* ) c, ( const char * ) m ); keyRegisterList.append( QCopKeyRegister( k, c, m ) ); } else if ( msg == "suspend()" ) { emit power(); } + else if ( msg == "home()" ) { + qpedesktop-> home ( ); + } #endif } void DesktopApplication::systemMessage( const QCString & msg, const QByteArray & data ) { #ifdef Q_WS_QWS QDataStream stream ( data, IO_ReadOnly ); if ( msg == "setScreenSaverInterval(int)" ) { int time; stream >> time; m_screensaver-> setInterval( time ); } else if ( msg == "setScreenSaverIntervals(int,int,int)" ) { int t1, t2, t3; stream >> t1 >> t2 >> t3; m_screensaver-> setIntervals( t1, t2, t3 ); } else if ( msg == "setBacklight(int)" ) { int bright; stream >> bright; m_screensaver-> setBacklight( bright ); } @@ -696,59 +699,64 @@ static bool isVisibleWindow( int wid ) 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(); + home ( ); } else { QCopEnvelope e( "QPE/System", "execute(QString)" ); e << tempItem; } } +void Desktop::home ( ) +{ + if ( isVisibleWindow( launcher->winId() ) ) + launcher->nextView(); + else + launcher->raise(); +} + 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(); } } } void Desktop::raiseDatebook() { Config cfg( "qpe" ); //F9 'Activity' cfg.setGroup( "AppsKey" ); QString tempItem; @@ -816,48 +824,50 @@ void Desktop::execAutoStart() // 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 void Desktop::togglePower() { static bool excllock = false; + qDebug ( "togglePower (locked == %d)", excllock ? 1 : 0 ); + if ( excllock ) return ; excllock = true; bool wasloggedin = loggedin; loggedin = 0; suspendTime = QDateTime::currentDateTime(); ODevice::inst ( ) -> suspend ( ); QWSServer::screenSaverActivate ( false ); DesktopApplication::switchLCD ( true ); // force LCD on without slow qcop call { QCopEnvelope( "QPE/Card", "mtabChanged()" ); // might have changed while asleep } if ( wasloggedin ) login( TRUE ); execAutoStart(); //qcopBridge->closeOpenConnections(); diff --git a/core/launcher/desktop.h b/core/launcher/desktop.h index f7c3e3f..09ffe1c 100644 --- a/core/launcher/desktop.h +++ b/core/launcher/desktop.h @@ -97,48 +97,50 @@ public: static bool screenLocked(); void show(); void checkMemory(); void keyClick(); void screenClick(); static void soundAlarm(); public slots: void raiseDatebook(); void raiseContacts(); void raiseMenu(); void raiseLauncher(); void raiseEmail(); void execAutoStart(); void togglePower(); void toggleLight(); void toggleNumLockState(); void toggleCapsLockState(); void toggleSymbolInput(); void terminateServers(); void rereadVolumes(); + void home ( ); + protected: void executeOrModify( const QString& appLnkFile ); void styleChange( QStyle & ); void timerEvent( QTimerEvent *e ); QWidget *bg; Launcher *launcher; TaskBar *tb; private: void startTransferServer(); bool recoverMemory(); QCopBridge *qcopBridge; TransferServer *transferServer; PackageSlave *packageSlave; QDateTime suspendTime; bool keyclick, touchclick, alarmsound; }; #endif // __DESKTOP_H__ diff --git a/core/launcher/startmenu.cpp b/core/launcher/startmenu.cpp index b008a30..647d0f2 100644 --- a/core/launcher/startmenu.cpp +++ b/core/launcher/startmenu.cpp @@ -1,171 +1,385 @@ /********************************************************************** -** 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. ** ** 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. ** **********************************************************************/ +#define INCLUDE_MENUITEM_DEF + #include "startmenu.h" #include "sidething.h" //#include "mrulist.h" #include "info.h" #include <qpe/qpeapplication.h> #include <qpe/config.h> #include <qpe/applnk.h> #include <qpe/global.h> #include <qpe/resource.h> +#include <qpe/qlibrary.h> -#include <qdict.h> +#include <qintdict.h> +#include <qdir.h> #include <stdlib.h> // #define USE_CONFIG_FILE StartMenu::StartMenu(QWidget *parent) : QLabel( parent ) { loadOptions(); - setPixmap( Resource::loadPixmap( startButtonPixmap ) ); + int sz = AppLnk::smallIconSize()+3; + QPixmap pm; + pm.convertFromImage(Resource::loadImage(startButtonPixmap).smoothScale(sz,sz)); + setPixmap(pm); setFocusPolicy( NoFocus ); //setFlat( startButtonIsFlat ); - apps = new AppLnkSet( QPEApplication::qpeDir() + "apps" ); - - createMenu(); + apps = 0; + launchMenu = 0; + applets. setAutoDelete ( true ); + sepId = 0; + + reloadApps ( ); + reloadApplets ( ); } void StartMenu::mousePressEvent( QMouseEvent * ) { launch(); if (desktopInfo) desktopInfo->menuClicked(); } StartMenu::~StartMenu() { delete apps; } void StartMenu::loadOptions() { #ifdef USE_CONFIG_FILE // Read configuration file Config config("StartMenu"); config.setGroup( "StartMenu" ); QString tmpBoolString1 = config.readEntry( "UseWidePopupMenu", "FALSE" ); useWidePopupMenu = ( tmpBoolString1 == "TRUE" ) ? TRUE : FALSE; QString tmpBoolString2 = config.readEntry( "StartButtonIsFlat", "TRUE" ); startButtonIsFlat = ( tmpBoolString2 == "TRUE" ) ? TRUE : FALSE; -// QString tmpBoolString3 = config.readEntry( "UseMRUList", "TRUE" ); + QString tmpBoolString3 = config.readEntry( "UseMRUList", "TRUE" ); popupMenuSidePixmap = config.readEntry( "PopupMenuSidePixmap", "launcher/sidebar" ); - startButtonPixmap = config.readEntry( "StartButtonPixmap", "go" ); + startButtonPixmap = config.readEntry( "StartButtonPixmap", "launcher/start_button" ); #else // Basically just #include the .qpe_menu.conf file settings useWidePopupMenu = FALSE; popupMenuSidePixmap = "launcher/sidebar"; startButtonIsFlat = TRUE; - startButtonPixmap = "launcher/start_button"; + startButtonPixmap = "launcher/start_button"; // No tr #endif } void StartMenu::createMenu() { + delete launchMenu; if ( useWidePopupMenu ) - launchMenu = new PopupWithLaunchSideThing( this, &popupMenuSidePixmap ); + launchMenu = new PopupWithLaunchSideThing( this, &popupMenuSidePixmap ); else launchMenu = new StartPopupMenu( this ); - loadMenu( apps, launchMenu ); + loadMenu ( apps, launchMenu ); + loadApplets ( ); + + connect( launchMenu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); +} +void StartMenu::reloadApps() +{ + Config cfg("StartMenu"); + cfg.setGroup("Menu"); + bool ltabs = cfg.readBoolEntry("LauncherTabs",TRUE); + bool lot = cfg.readBoolEntry("LauncherOther",TRUE); + bool lt = ltabs || lot; + if ( launchMenu && apps && !lt ) + return; // nothing to do + + if ( lt ) { + delete apps; + apps = new AppLnkSet( QPEApplication::qpeDir() + "apps" ); + } + if ( launchMenu ) { + launchMenu-> hide ( ); + + for ( QIntDictIterator<QPopupMenu> it ( tabdict ); it. current ( ); ++it ) { + launchMenu-> removeItem ( it. currentKey ( )); + delete it.current ( ); + } + tabdict. clear ( ); + loadMenu(apps,launchMenu); + } else { + createMenu(); + } +} + +void StartMenu::reloadApplets() +{ + if ( launchMenu ) { + clearApplets ( ); + loadApplets ( ); + } + else + createMenu ( ); } void StartMenu::itemSelected( int id ) { const AppLnk *app = apps->find( id ); if ( app ) - app->execute(); + app->execute(); + else { + MenuApplet *applet = applets. find ( id ); + + if ( applet ) + applet-> iface-> activated ( ); + } } bool StartMenu::loadMenu( AppLnkSet *folder, QPopupMenu *menu ) { bool result = FALSE; - QStringList typs = folder->types(); - QDict<QPopupMenu> typpop; - for (QStringList::Iterator tit=typs.begin(); tit!=typs.end(); ++tit) { - if ( !(*tit).isEmpty() ) { - QPopupMenu *new_menu = new StartPopupMenu( menu ); - typpop.insert(*tit, new_menu); - connect( new_menu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); - menu->insertItem( folder->typePixmap(*tit), folder->typeName(*tit), new_menu ); - } - } - - QListIterator<AppLnk> it( folder->children() ); - for ( ; it.current(); ++it ) { - AppLnk *app = it.current(); - if ( app->type() == "Separator" ) { - menu->insertSeparator(); - } else { - QString t = app->type(); - QPopupMenu* pmenu = typpop.find(t); - if ( !pmenu ) - pmenu = menu; - pmenu->insertItem( app->pixmap(), app->name(), app->id() ); - result=TRUE; - } + Config cfg("StartMenu"); + cfg.setGroup("Menu"); + + bool ltabs = cfg.readBoolEntry("LauncherTabs",TRUE); + bool lot = cfg.readBoolEntry("LauncherOther",TRUE); + + tabdict. clear ( ); + + if ( sepId ) + menu-> removeItem ( sepId ); + sepId = ( menu-> count ( )) ? menu-> insertSeparator ( 0 ) : 0; + + if ( ltabs || lot ) { + QDict<QPopupMenu> typpop; + QStringList typs = folder->types(); + for (QStringList::Iterator tit=typs.fromLast(); ; --tit) { + if ( !(*tit).isEmpty() ) { + QPopupMenu *new_menu; + if ( ltabs ) { + new_menu = new StartPopupMenu( menu ); + connect( new_menu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); + int id = menu->insertItem( folder->typePixmap(*tit), folder->typeName(*tit), new_menu, -1, 0 ); + tabdict. insert ( id, new_menu ); + } else { + new_menu = (QPopupMenu*)1; + } + typpop.insert(*tit, new_menu); + } + if ( tit == typs. begin ( )) + break; + } + QListIterator<AppLnk> it( folder->children() ); + bool f=TRUE; + for ( ; it.current(); ++it ) { + AppLnk *app = it.current(); + if ( app->type() == "Separator" ) { // No tr + if ( lot ) { + menu->insertSeparator(); + } + } else { + f = FALSE; + QString t = app->type(); + QPopupMenu* pmenu = typpop.find(t); + if ( ltabs ) { + if ( !pmenu && lot ) + pmenu = menu; + } else { + if ( !pmenu ) + pmenu = menu; + else + pmenu = 0; + } + if ( pmenu ) { + QString t = app->name(); + t.replace(QRegExp("&"),"&&"); // escape shortcut character + pmenu->insertItem( app->pixmap(), t, app->id() ); + } + result=TRUE; + } + } } - if ( result ) - connect( menu, SIGNAL(activated(int)), SLOT(itemSelected(int)) ); - + if ( sepId && ( menu-> idAt ( 0 ) == sepId )) { // no tabs entries + menu-> removeItem ( sepId ); + sepId = 0; + } + if ( !menu-> count ( )) // if we don't do this QPopupMenu will insert a dummy Separator, which won't go away later + sepId = menu-> insertSeparator ( ); + return result; } void StartMenu::launch() { int y = mapToGlobal( QPoint() ).y() - launchMenu->sizeHint().height(); - if ( launchMenu->isVisible() ) + if ( launchMenu->isVisible() ) launchMenu->hide(); else launchMenu->popup( QPoint( 1, y ) ); } const AppLnk* StartMenu::execToLink(const QString& appname) { const AppLnk* a = apps->findExec( appname ); return a; } void StartPopupMenu::keyPressEvent( QKeyEvent *e ) { if ( e->key() == Key_F33 || e->key() == Key_Space ) { - // "OK" button, little hacky - QKeyEvent ke(QEvent::KeyPress, Key_Enter, 13, 0); - QPopupMenu::keyPressEvent( &ke ); + // "OK" button, little hacky + QKeyEvent ke(QEvent::KeyPress, Key_Enter, 13, 0); + QPopupMenu::keyPressEvent( &ke ); } else { - QPopupMenu::keyPressEvent( e ); + QPopupMenu::keyPressEvent( e ); } } + +static int compareAppletPositions(const void *a, const void *b) +{ + const MenuApplet* aa = *(const MenuApplet**)a; + const MenuApplet* ab = *(const MenuApplet**)b; + int d = ab->iface->position() - aa->iface->position(); + if ( d ) return d; + return QString::compare(ab->library->library(),aa->library->library()); +} + +void StartMenu::clearApplets() +{ + launchMenu-> hide(); + + for ( QIntDictIterator<MenuApplet> it ( applets ); it. current ( ); ++it ) { + MenuApplet *applet = it. current ( ); + if ( launchMenu ) { + launchMenu-> removeItem ( applet-> id ); + delete applet-> popup; + } + + applet-> iface-> release(); + applet-> library-> unload(); + delete applet-> library; + } + applets.clear(); +} + + + +void StartMenu::loadApplets() +{ + Config cfg( "StartMenu" ); + cfg.setGroup( "Applets" ); + + // SafeMode causes too much problems, so we disable it for now -- + // maybe we should reenable it for OPIE 1.0 - sandman 26.09.02 + + bool safe = false; //cfg.readBoolEntry("SafeMode",FALSE); + if ( safe && !safety_tid ) + return; + cfg.writeEntry("SafeMode",TRUE); + cfg.write(); + QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); + + QString path = QPEApplication::qpeDir() + "/plugins/applets"; + QDir dir( path, "lib*.so" ); + QStringList list = dir.entryList(); + QStringList::Iterator it; + int napplets=0; + MenuApplet* *xapplets = new MenuApplet*[list.count()]; + for ( it = list.begin(); it != list.end(); ++it ) { + if ( exclude.find( *it ) != exclude.end() ) + continue; + MenuAppletInterface *iface = 0; + QLibrary *lib = new QLibrary( path + "/" + *it ); + if (( lib->queryInterface( IID_MenuApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { + MenuApplet *applet = new MenuApplet; + xapplets[napplets++] = applet; + applet->library = lib; + applet->iface = iface; + } else { + exclude += *it; + delete lib; + } + } + cfg.writeEntry( "ExcludeApplets", exclude, ',' ); + qsort(xapplets,napplets,sizeof(applets[0]),compareAppletPositions); + + if ( sepId ) + launchMenu-> removeItem ( sepId ); + sepId = ( launchMenu-> count ( )) ? launchMenu-> insertSeparator ( ) : 0; + + while (napplets--) { + MenuApplet *applet = xapplets[napplets]; + QString lang = getenv( "LANG" ); + QTranslator * trans = new QTranslator(qApp); + QString type = (*it).left( (*it).find(".") ); + QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; + if ( trans->load( tfn )) + qApp->installTranslator( trans ); + else + delete trans; + + applet-> popup = applet-> iface-> popup ( this ); + + if ( applet-> popup ) + applet-> id = launchMenu-> insertItem ( applet-> iface-> icon ( ), applet-> iface-> text ( ), applet-> popup ); + else + applet-> id = launchMenu-> insertItem ( applet-> iface-> icon ( ), applet-> iface-> text ( ) ); + applets.insert ( applet-> id, new MenuApplet(*applet)); + } + delete xapplets; + + if ( sepId && ( launchMenu-> idAt ( launchMenu-> count ( ) - 1 ) == sepId )) { // no applets + launchMenu-> removeItem ( sepId ); + sepId = 0; + } + if ( !launchMenu-> count ( )) // if we don't do this QPopupMenu will insert a dummy Separator, which won't go away later + sepId = launchMenu-> insertSeparator ( ); + + if ( !safety_tid ) + safety_tid = startTimer(2000); // TT has 5000, but this is a PITA for a developer ;) (sandman) +} + +void StartMenu::timerEvent(QTimerEvent* e) +{ + if ( e->timerId() == safety_tid ) { + Config cfg( "StartMenu" ); + cfg.setGroup( "Applets" ); + cfg.writeEntry( "SafeMode", FALSE ); + killTimer(safety_tid); + safety_tid = 0; + } +} + diff --git a/core/launcher/startmenu.h b/core/launcher/startmenu.h index a02f39e..0a91bb8 100644 --- a/core/launcher/startmenu.h +++ b/core/launcher/startmenu.h @@ -1,76 +1,103 @@ /********************************************************************** -** 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. ** ** 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. ** **********************************************************************/ #ifndef __START_MENU_H__ #define __START_MENU_H__ #include <qstring.h> #include <qlist.h> +#include <qintdict.h> #include <qlabel.h> #include <qpopupmenu.h> +#include <qpe/menuappletinterface.h> class AppLnkSet; class AppLnk; class StartPopupMenu : public QPopupMenu { public: StartPopupMenu( QWidget *parent ) : QPopupMenu( parent ) {} protected: void keyPressEvent( QKeyEvent *e ); }; +class QLibrary; + +struct MenuApplet +{ +#ifndef QT_NO_COMPONENT + QLibrary *library; +#endif + MenuAppletInterface *iface; + int id; + QPopupMenu *popup; +}; + + class StartMenu : public QLabel { Q_OBJECT public: StartMenu( QWidget * ); ~StartMenu(); const AppLnk* execToLink(const QString& appname); public: StartPopupMenu *launchMenu; public slots: void launch( ); void loadOptions( ); void createMenu( ); + void reloadApps( ); + void reloadApplets( ); protected slots: void itemSelected( int id ); protected: virtual void mousePressEvent( QMouseEvent * ); + virtual void timerEvent ( QTimerEvent * ); private: bool loadMenu( AppLnkSet *folder, QPopupMenu *menu ); + void loadApplets( ); + void clearApplets( ); private: bool useWidePopupMenu; QString popupMenuSidePixmap; bool startButtonIsFlat; QString startButtonPixmap; AppLnkSet *apps; + + QIntDict<MenuApplet> applets; + QIntDict<QPopupMenu> tabdict; + +// QValueList<MenuApplet> appletList; + int safety_tid; + int sepId; }; #endif // __START_MENU_H__ diff --git a/core/launcher/systray.cpp b/core/launcher/systray.cpp index 697971d..406c662 100644 --- a/core/launcher/systray.cpp +++ b/core/launcher/systray.cpp @@ -81,49 +81,49 @@ void SysTray::addApplets() Config cfg( "Taskbar" ); cfg.setGroup( "Applets" ); // SafeMode causes too much problems, so we disable it for now -- // maybe we should reenable it for OPIE 1.0 - sandman 26.09.02 bool safe = false; //cfg.readBoolEntry("SafeMode",FALSE); if ( safe && !safety_tid ) return; cfg.writeEntry("SafeMode",TRUE); cfg.write(); QStringList exclude = cfg.readListEntry( "ExcludeApplets", ',' ); QString path = QPEApplication::qpeDir() + "/plugins/applets"; QDir dir( path, "lib*.so" ); QStringList list = dir.entryList(); QStringList::Iterator it; int napplets=0; TaskbarApplet* *applets = new TaskbarApplet*[list.count()]; for ( it = list.begin(); it != list.end(); ++it ) { if ( exclude.find( *it ) != exclude.end() ) continue; TaskbarAppletInterface *iface = 0; QLibrary *lib = new QLibrary( path + "/" + *it ); - if ( lib->queryInterface( IID_TaskbarApplet, (QUnknownInterface**)&iface ) == QS_OK ) { + if (( lib->queryInterface( IID_TaskbarApplet, (QUnknownInterface**)&iface ) == QS_OK ) && iface ) { TaskbarApplet *applet = new TaskbarApplet; applets[napplets++] = applet; applet->library = lib; applet->iface = iface; } else { exclude += *it; delete lib; } } cfg.writeEntry( "ExcludeApplets", exclude, ',' ); qsort(applets,napplets,sizeof(applets[0]),compareAppletPositions); while (napplets--) { TaskbarApplet *applet = applets[napplets]; applet->applet = applet->iface->applet( this ); appletList.append(*applet); QString lang = getenv( "LANG" ); QTranslator * trans = new QTranslator(qApp); QString type = (*it).left( (*it).find(".") ); QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; if ( trans->load( tfn )) qApp->installTranslator( trans ); else delete trans; } diff --git a/core/launcher/taskbar.cpp b/core/launcher/taskbar.cpp index 46bcdb3..7d1aaf1 100644 --- a/core/launcher/taskbar.cpp +++ b/core/launcher/taskbar.cpp @@ -170,70 +170,74 @@ TaskBar::TaskBar() : QHBox(0, 0, WStyle_Customize | WStyle_Tool | WStyle_StaysOn // ## make customizable in some way? #ifdef QT_QWS_CUSTOM lockState = new LockKeyState( this ); #else lockState = 0; #endif #if defined(Q_WS_QWS) #if !defined(QT_NO_COP) QCopChannel *channel = new QCopChannel( "QPE/TaskBar", this ); connect( channel, SIGNAL(received(const QCString&, const QByteArray&)), this, SLOT(receive(const QCString&, const QByteArray&)) ); #endif #endif waitTimer = new QTimer( this ); connect( waitTimer, SIGNAL( timeout() ), this, SLOT( stopWait() ) ); clearer = new QTimer( this ); QObject::connect(clearer, SIGNAL(timeout()), SLOT(clearStatusBar())); QObject::connect(clearer, SIGNAL(timeout()), sysTray, SLOT(show())); } void TaskBar::setStatusMessage( const QString &text ) { - label->setText( text ); - stack->raiseWidget( label ); - if ( sysTray && ( label->fontMetrics().width( text ) > label->width() ) ) - sysTray->hide(); - clearer->start( 3000 ); + if ( !text.isEmpty() ) { + label->setText( text ); + stack->raiseWidget( label ); + if ( sysTray && ( label->fontMetrics().width( text ) > label->width() ) ) + sysTray->hide(); + clearer->start( 3000, TRUE ); + } else { + clearStatusBar(); + } } void TaskBar::clearStatusBar() { label->clear(); stack->raiseWidget(runningAppBar); // stack->raiseWidget( mru ); } void TaskBar::startWait() { waitIcon->setWaiting( true ); // a catchall stop after 10 seconds... waitTimer->start( 10 * 1000, true ); } -void TaskBar::stopWait(const QString& app) +void TaskBar::stopWait(const QString& /*app*/) { waitTimer->stop(); //mru->addTask(sm->execToLink(app)); waitIcon->setWaiting( false ); } void TaskBar::stopWait() { waitTimer->stop(); waitIcon->setWaiting( false ); } void TaskBar::resizeEvent( QResizeEvent *e ) { QHBox::resizeEvent( e ); calcMaxWindowRect(); } void TaskBar::styleChange( QStyle &s ) { QHBox::styleChange( s ); calcMaxWindowRect(); } @@ -252,51 +256,54 @@ void TaskBar::calcMaxWindowRect() #if QT_VERSION < 300 QWSServer::setMaxWindowRect( qt_screen->mapToDevice(wr, QSize(qt_screen->width(),qt_screen->height())) ); #else QWSServer::setMaxWindowRect( wr ); #endif #endif } void TaskBar::receive( const QCString &msg, const QByteArray &data ) { QDataStream stream( data, IO_ReadOnly ); if ( msg == "message(QString)" ) { QString text; stream >> text; setStatusMessage( text ); } else if ( msg == "hideInputMethod()" ) { inputMethods->hideInputMethod(); } else if ( msg == "showInputMethod()" ) { inputMethods->showInputMethod(); } else if ( msg == "reloadInputMethods()" ) { inputMethods->loadInputMethods(); + } else if ( msg == "reloadApps()" ) { + sm->reloadApps(); } else if ( msg == "reloadApplets()" ) { sysTray->clearApplets(); sysTray->addApplets(); + sm->reloadApplets(); } else if ( msg == "soundAlarm()" ) { Desktop::soundAlarm(); } else if ( msg == "setLed(int,bool)" ) { int led, status; stream >> led >> status; QValueList <OLed> ll = ODevice::inst ( )-> ledList ( ); if ( ll. count ( )) { OLed l = ll. contains ( Led_Mail ) ? Led_Mail : ll [0]; bool canblink = ODevice::inst ( )-> ledStateList ( l ). contains ( Led_BlinkSlow ); ODevice::inst ( )-> setLedState ( l, status ? ( canblink ? Led_BlinkSlow : Led_On ) : Led_Off ); } } } QWidget *TaskBar::calibrate(bool) { #ifdef Q_WS_QWS Calibrate *c = new Calibrate; c->show(); return c; #else |