-rw-r--r-- | core/launcher/systray.cpp | 103 |
1 files changed, 72 insertions, 31 deletions
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,5 +1,5 @@ /********************************************************************** -** 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. ** @@ -39,2 +39,3 @@ SysTray::SysTray( QWidget *parent ) : QFrame( parent ), layout(0) { + safety_tid = 0; //setFrameStyle( QFrame::Panel | QFrame::Sunken ); @@ -43,4 +44,20 @@ SysTray::SysTray( QWidget *parent ) : QFrame( parent ), layout(0) +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 @@ -52,2 +69,3 @@ void SysTray::loadApplets() } +#endif appletList.clear(); @@ -55,3 +73,17 @@ void SysTray::loadApplets() 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", ',' ); @@ -61,3 +93,7 @@ void SysTray::loadApplets() 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; @@ -65,17 +101,8 @@ void SysTray::loadApplets() 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; @@ -83,4 +110,19 @@ void SysTray::loadApplets() } + 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; @@ -88,20 +130,19 @@ void SysTray::loadApplets() 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 ); } - |