summaryrefslogtreecommitdiff
path: root/core/launcher/systray.cpp
authorsandman <sandman>2002-09-12 01:16:41 (UTC)
committer sandman <sandman>2002-09-12 01:16:41 (UTC)
commit151987f8e0b7a179cf45032cc2ec5b4360023890 (patch) (side-by-side diff)
treeea750ecfe96f7a30759d9bee7151602f02dec8cf /core/launcher/systray.cpp
parentb89a7559465274c3efb0a8258cecf22a185b123f (diff)
downloadopie-151987f8e0b7a179cf45032cc2ec5b4360023890.zip
opie-151987f8e0b7a179cf45032cc2ec5b4360023890.tar.gz
opie-151987f8e0b7a179cf45032cc2ec5b4360023890.tar.bz2
- really remove mrulist
- new version of systray, which supports the Exclude list to hide applets
Diffstat (limited to 'core/launcher/systray.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/systray.cpp103
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,7 +1,7 @@
/**********************************************************************
-** 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
@@ -37,12 +37,29 @@
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;
for ( mit = appletList.begin(); mit != appletList.end(); ++mit ) {
@@ -50,58 +67,82 @@ void SysTray::loadApplets()
(*mit).library->unload();
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";
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 ) {
- 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 );
}
-