summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/launcher.pro2
-rw-r--r--core/launcher/main.cpp2
-rw-r--r--core/launcher/systray.cpp103
-rw-r--r--core/launcher/systray.h13
-rw-r--r--core/launcher/taskbar.cpp4
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
@@ -6,13 +6,12 @@ HEADERS = background.h \
qprocess.h \
mediummountgui.h \
info.h \
appicons.h \
taskbar.h \
sidething.h \
- mrulist.h \
runningappbar.h \
stabmon.h \
inputmethods.h \
systray.h \
wait.h \
shutdownimpl.h \
@@ -48,13 +47,12 @@ SOURCES = background.cpp \
mediummountgui.cpp \
qprocess.cpp qprocess_unix.cpp \
info.cpp \
appicons.cpp \
taskbar.cpp \
sidething.cpp \
- mrulist.cpp \
runningappbar.cpp \
stabmon.cpp \
inputmethods.cpp \
systray.cpp \
wait.cpp \
shutdownimpl.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
@@ -239,13 +239,13 @@ void handle_sigterm ( int /* sig */ )
if ( qApp )
qApp-> quit ( );
}
int main( int argc, char ** argv )
{
- ::signal( SIGCHLD, SIG_IGN );
+ ::signal ( SIGCHLD, SIG_IGN );
::signal ( SIGTERM, handle_sigterm );
::signal ( SIGINT, handle_sigterm );
::setsid ( );
::setpgid ( 0, 0 );
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,10 +1,10 @@
/**********************************************************************
-** 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.
**
@@ -34,74 +34,115 @@
#ifdef SINGLE_APP
#include "clockappletimpl.h"
#endif
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 ) {
(*mit).iface->release();
(*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 );
}
-
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,10 +1,10 @@
/**********************************************************************
-** 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.
**
@@ -40,18 +40,21 @@ struct TaskbarApplet
class SysTray : public QFrame {
Q_OBJECT
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;
};
#endif // __SYSTRAY_H__
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
@@ -17,13 +17,12 @@
** not clear to you.
**
*********************************************************************/
#include "startmenu.h"
#include "inputmethods.h"
-#include "mrulist.h"
#include "runningappbar.h"
#include "systray.h"
#include "calibrate.h"
#include "wait.h"
#include "appicons.h"
@@ -270,13 +269,14 @@ void TaskBar::receive( const QCString &msg, const QByteArray &data )
inputMethods->hideInputMethod();
} else if ( msg == "showInputMethod()" ) {
inputMethods->showInputMethod();
} else if ( msg == "reloadInputMethods()" ) {
inputMethods->loadInputMethods();
} else if ( msg == "reloadApplets()" ) {
- sysTray->loadApplets();
+ sysTray->clearApplets();
+ sysTray->addApplets();
} else if ( msg == "soundAlarm()" ) {
Desktop::soundAlarm();
}
else if ( msg == "setLed(int,bool)" ) {
int led, status;
stream >> led >> status;