aboutsummaryrefslogtreecommitdiff
path: root/lumina-desktop/panel-plugins
diff options
context:
space:
mode:
Diffstat (limited to 'lumina-desktop/panel-plugins')
-rw-r--r--lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.cpp26
-rw-r--r--lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.h3
2 files changed, 19 insertions, 10 deletions
diff --git a/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.cpp b/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.cpp
index 8f131c9e..3f223a63 100644
--- a/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.cpp
+++ b/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.cpp
@@ -8,7 +8,6 @@
#include "../../LSession.h"
LTaskManagerPlugin::LTaskManagerPlugin(QWidget *parent, QString id, bool horizontal) : LPPlugin(parent, id, horizontal){
- updating=false;
timer = new QTimer(this);
timer->setSingleShot(true);
timer->setInterval(10); // 1/100 second
@@ -27,18 +26,22 @@ LTaskManagerPlugin::~LTaskManagerPlugin(){
// PRIVATE SLOTS
//==============
void LTaskManagerPlugin::UpdateButtons(){
- if(updating){ timer->start(); return; } //check again in a moment
- //Make sure this only runs one at a time
- updating=true;
+ updating = QDateTime::currentDateTime(); //global time stamp
+ QDateTime ctime = updating; //current thread time stamp
+
//Get the current window list
QList<WId> winlist = LSession::handle()->XCB->WindowList();
//qDebug() << "Update Buttons:" << winlist;
+ if(updating > ctime){ return; } //another thread kicked off already - stop this one
//Now go through all the current buttons first
for(int i=0; i<BUTTONS.length(); i++){
//Get the windows managed in this button
QList<LWinInfo> WI = BUTTONS[i]->windows();
bool updated=false;
+ if(updating > ctime){ return; } //another thread kicked off already - stop this one
+ //Loop over all the windows for this button
for(int w=0; w<WI.length(); w++){
+ if(updating > ctime){ return; } //another thread kicked off already - stop this one
if( winlist.contains( WI[w].windowID() ) ){
//Still current window - update it later
winlist.removeAll(WI[w].windowID()); //remove this window from the list since it is done
@@ -46,42 +49,48 @@ void LTaskManagerPlugin::UpdateButtons(){
//Window was closed - remove it
if(WI.length()==1){
//Remove the entire button
+ qDebug() << "Window Closed: Remove Button" ;
this->layout()->takeAt(i); //remove from the layout
delete BUTTONS.takeAt(i);
i--;
updated = true; //prevent updating a removed button
break; //break out of the button->window loop
}else{
- //qDebug() << "Remove Window:" << WI[w].windowID() << "Button:" << w;
+ qDebug() << "Window Closed: Remove from button:" << WI[w].windowID() << "Button:" << w;
BUTTONS[i]->rmWindow(WI[w]); // one of the multiple windows for the button
WI.removeAt(w); //remove this window from the list
w--;
}
updated=true; //button already changed
}
+ if(updating > ctime){ return; } //another thread kicked off already - stop this one
}
if(!updated){
- //qDebug() << "Update Button:" << i;
+ qDebug() << "Update Button:" << i;
+ if(updating > ctime){ return; } //another thread kicked off already - stop this one
QTimer::singleShot(1,BUTTONS[i], SLOT(UpdateButton()) ); //keep moving on
}
}
//Now go through the remaining windows
for(int i=0; i<winlist.length(); i++){
//New windows, create buttons for each (add grouping later)
+ if(updating > ctime){ return; } //another thread kicked off already - stop this one
//Check for a button that this can just be added to
QString ctxt = LX11::WindowClass(winlist[i]);
bool found = false;
for(int b=0; b<BUTTONS.length(); b++){
+ if(updating > ctime){ return; } //another thread kicked off already - stop this one
if(BUTTONS[b]->classname()== ctxt){
found = true;
- //qDebug() << "Add Window to Button:" << b;
+ qDebug() << "Add Window to Button:" << b;
BUTTONS[b]->addWindow(winlist[i]);
break;
}
}
if(!found){
+ if(updating > ctime){ return; } //another thread kicked off already - stop this one
//No group, create a new button
- //qDebug() << "New Button";
+ qDebug() << "New Button";
LTaskButton *but = new LTaskButton(this);
but->addWindow( LWinInfo(winlist[i]) );
if(this->layout()->direction()==QBoxLayout::LeftToRight){
@@ -93,7 +102,6 @@ void LTaskManagerPlugin::UpdateButtons(){
BUTTONS << but;
}
}
- updating=false; //flag that we are done updating the buttons
}
void LTaskManagerPlugin::checkWindows(){
diff --git a/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.h b/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.h
index ca470da6..b8867074 100644
--- a/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.h
+++ b/lumina-desktop/panel-plugins/taskmanager/LTaskManagerPlugin.h
@@ -14,6 +14,7 @@
#include <QDebug>
#include <QTimer>
#include <QEvent>
+#include <QDateTime>
// libLumina includes
#include <LuminaX11.h>
@@ -32,7 +33,7 @@ public:
private:
QList<LTaskButton*> BUTTONS; //to keep track of the current buttons
QTimer *timer;
- bool updating; //quick flag for if it is currently working
+ QDateTime updating; //quick flag for if it is currently working
private slots:
void UpdateButtons();
bgstack15