-rw-r--r-- | core/launcher/launcher.pro | 2 | ||||
-rw-r--r-- | core/launcher/main.cpp | 2 | ||||
-rw-r--r-- | core/launcher/systray.cpp | 103 | ||||
-rw-r--r-- | core/launcher/systray.h | 13 | ||||
-rw-r--r-- | core/launcher/taskbar.cpp | 4 |
5 files changed, 83 insertions, 41 deletions
diff --git a/core/launcher/launcher.pro b/core/launcher/launcher.pro index 0e557aa..dbe3820 100644 --- a/core/launcher/launcher.pro +++ b/core/launcher/launcher.pro @@ -10,5 +10,4 @@ HEADERS = background.h \ taskbar.h \ sidething.h \ - mrulist.h \ runningappbar.h \ stabmon.h \ @@ -52,5 +51,4 @@ SOURCES = background.cpp \ taskbar.cpp \ sidething.cpp \ - mrulist.cpp \ runningappbar.cpp \ stabmon.cpp \ diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index ca0bbe4..490af39 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp @@ -243,5 +243,5 @@ void handle_sigterm ( int /* sig */ ) int main( int argc, char ** argv ) { - ::signal( SIGCHLD, SIG_IGN ); + ::signal ( SIGCHLD, SIG_IGN ); ::signal ( SIGTERM, handle_sigterm ); diff --git a/core/launcher/systray.cpp b/core/launcher/systray.cpp index ad1553f..4767150 100644 --- a/core/launcher/systray.cpp +++ b/core/launcher/systray.cpp @@ -1,6 +1,6 @@ /********************************************************************** -** 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 @@ -38,10 +38,27 @@ SysTray::SysTray( QWidget *parent ) : QFrame( parent ), layout(0) { + safety_tid = 0; //setFrameStyle( QFrame::Panel | QFrame::Sunken ); loadApplets(); } +static int compareAppletPositions(const void *a, const void *b) +{ + const TaskbarApplet* aa = *(const TaskbarApplet**)a; + const TaskbarApplet* ab = *(const TaskbarApplet**)b; + int d = ab->iface->position() - aa->iface->position(); + if ( d ) return d; + return QString::compare(ab->library->library(),aa->library->library()); +} + void SysTray::loadApplets() { + clearApplets(); + addApplets(); +} + +void SysTray::clearApplets() +{ + hide(); #ifndef SINGLE_APP QValueList<TaskbarApplet>::Iterator mit; @@ -51,8 +68,23 @@ void SysTray::loadApplets() delete (*mit).library; } +#endif appletList.clear(); if ( layout ) delete layout; - layout = new QHBoxLayout( this ); + layout = new QHBoxLayout( this, 0, 1 ); + layout->setAutoAdd(TRUE); +} + +void SysTray::addApplets() +{ +#ifndef SINGLE_APP + Config cfg( "Taskbar" ); + cfg.setGroup( "Applets" ); + bool safe = 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"; @@ -60,48 +92,57 @@ void SysTray::loadApplets() 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 ) { - TaskbarApplet applet; - applet.library = lib; - applet.iface = iface; - applet.applet = applet.iface->applet( this ); - positionApplet( applet ); - QString lang = getenv( "LANG" ); - QTranslator * trans = new QTranslator(qApp); - QString type = (*it).left( (*it).find(".") ); - QString tfn = QPEApplication::qpeDir()+"/i18n/"+lang+"/"+type+".qm"; - qDebug("tr fpr sysapplet: %s", tfn.latin1() ); - if ( trans->load( tfn )) - qApp->installTranslator( trans ); - else - delete trans; + 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; + } + delete applets; #else - layout = new QHBoxLayout( this ); TaskbarApplet applet; applet.iface = new ClockAppletImpl(); applet.applet = applet.iface->applet( this ); - positionApplet( applet ); + appletList.append( a ); #endif + show(); + + if ( !safety_tid ) + safety_tid = startTimer(2000); // TT has 5000, but this is a PITA for a developer ;) (sandman) } -void SysTray::positionApplet( const TaskbarApplet &a ) +void SysTray::timerEvent(QTimerEvent* e) { - int p = 0; - QValueList<TaskbarApplet>::Iterator it; - for ( it = appletList.begin(); it != appletList.end(); ++it ) { - if ( (*it).iface->position() > a.iface->position() ) - break; - p += 2; + if ( e->timerId() == safety_tid ) { + Config cfg( "Taskbar" ); + cfg.setGroup( "Applets" ); + cfg.writeEntry( "SafeMode", FALSE ); + killTimer(safety_tid); + safety_tid = 0; } - - appletList.insert( it, a ); - layout->insertWidget( p, a.applet ); - layout->insertSpacing( p, 1 ); } - diff --git a/core/launcher/systray.h b/core/launcher/systray.h index 0aed348..5a6849a 100644 --- a/core/launcher/systray.h +++ b/core/launcher/systray.h @@ -1,6 +1,6 @@ /********************************************************************** -** 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 @@ -44,10 +44,13 @@ public: SysTray( QWidget *parent ); - void loadApplets(); + void clearApplets(); + void addApplets(); -private: - void positionApplet( const TaskbarApplet &a ); +protected: + void timerEvent(QTimerEvent* e); private: + void loadApplets(); + int safety_tid; QHBoxLayout *layout; QValueList<TaskbarApplet> appletList; diff --git a/core/launcher/taskbar.cpp b/core/launcher/taskbar.cpp index 988d072..1feae4a 100644 --- a/core/launcher/taskbar.cpp +++ b/core/launcher/taskbar.cpp @@ -21,5 +21,4 @@ #include "startmenu.h" #include "inputmethods.h" -#include "mrulist.h" #include "runningappbar.h" #include "systray.h" @@ -274,5 +273,6 @@ void TaskBar::receive( const QCString &msg, const QByteArray &data ) inputMethods->loadInputMethods(); } else if ( msg == "reloadApplets()" ) { - sysTray->loadApplets(); + sysTray->clearApplets(); + sysTray->addApplets(); } else if ( msg == "soundAlarm()" ) { Desktop::soundAlarm(); |