summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/launcher/launcher.cpp11
-rw-r--r--core/launcher/mrulist.cpp46
-rw-r--r--core/launcher/mrulist.h1
3 files changed, 28 insertions, 30 deletions
diff --git a/core/launcher/launcher.cpp b/core/launcher/launcher.cpp
index 17a30e6..1449269 100644
--- a/core/launcher/launcher.cpp
+++ b/core/launcher/launcher.cpp
@@ -677,15 +677,20 @@ void Launcher::updateLink(const QString& link)
tabs->updateLink(link);
}
void Launcher::systemMessage( const QCString &msg, const QByteArray &data)
{
QDataStream stream( data, IO_ReadOnly );
- if ( msg == "linkChanged(QString)" ) {
- QString link;
- stream >> link;
+ if ( msg == "closing(QString)" ){
+ QString app;
+ stream >> app;
+ qWarning("app closed %s", app.latin1() );
+ MRUList::removeTask( app );
+ }else if ( msg == "linkChanged(QString)" ) {
+ QString link;
+ stream >> link;
if ( in_lnk_props ) {
got_lnk_change = TRUE;
lnk_change = link;
} else {
updateLink(link);
}
diff --git a/core/launcher/mrulist.cpp b/core/launcher/mrulist.cpp
index 6066dac..5590d38 100644
--- a/core/launcher/mrulist.cpp
+++ b/core/launcher/mrulist.cpp
@@ -60,48 +60,40 @@ MRUList::~MRUList()
QSize MRUList::sizeHint() const
{
return QSize( frameWidth(), 16 );
}
+// thanks to John from Trolltech
+void MRUList::removeTask(const QString &appName )
+{
+ qWarning("MRULList::removeTask( %s)", appName.latin1() );
+ if(appName.isEmpty() )
+ return;
+
+ if(!task ) // at least it should be called once before
+ return;
+ unsigned int i= 0;
+ for ( ; i < task->count(); i++ ) {
+ AppLnk *t = task->at(i);
+ if ( t->exec() == appName )
+ task->remove();
+ }
+ for (unsigned i = 0; i < MRUListWidgets->count(); i++ )
+ MRUListWidgets->at(i)->update();
+}
void MRUList::addTask( const AppLnk *appLnk )
{
+ qWarning("Add Task" );
if ( !appLnk )
return;
unsigned int i = 0;
if ( !task )
return;
- // ok we wan't to delete old icons from the taskbar
- // get the window list and see which windows aren't there any more
- QList<AppLnk> cleanUp;
- cleanUp.setAutoDelete( TRUE );
- const QList<QWSWindow> &list = qwsServer->clientWindows();
- QWSWindow* w;
- bool running = false; // to see what we should do
- for ( ; i < task->count(); i++ ) {
- AppLnk *t = task->at(i);
- running = false;
- for (QListIterator<QWSWindow> it(list); (w=it.current()); ++it) {
- QString app = w->client()->identity();
- if( app == t->exec( ) ){
- running = true;
- break;
- }
- }
- if(!running ) { // gues what we do now
- cleanUp.append( t);
- }
- }
- // no do a clean up of these old icons
- AppLnk *lnk;
- for( lnk = cleanUp.first(); lnk != 0; lnk = cleanUp.next() ){
- task->remove( lnk );
- }
- cleanUp.clear(); // should be deleted too
i = 0;
for ( ; i < task->count(); i++ ) {
AppLnk *t = task->at(i);
if ( t->exec() == appLnk->exec() ) {
if (i != 0) {
diff --git a/core/launcher/mrulist.h b/core/launcher/mrulist.h
index 141a09b..ff111ce 100644
--- a/core/launcher/mrulist.h
+++ b/core/launcher/mrulist.h
@@ -33,12 +33,13 @@ class MRUList : public QFrame
{
public:
MRUList( QWidget *parent );
~MRUList();
virtual QSize sizeHint() const;
static void addTask( const AppLnk *appLnk );
+ static void removeTask(const QString &appName );
bool quitOldApps();
protected:
void mousePressEvent(QMouseEvent *e);
void mouseReleaseEvent(QMouseEvent *e);
void paintEvent( QPaintEvent *event );