aboutsummaryrefslogtreecommitdiff
path: root/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp
diff options
context:
space:
mode:
authorKen Moore <ken@pcbsd.org>2014-10-22 09:46:32 -0400
committerKen Moore <ken@pcbsd.org>2014-10-22 09:46:32 -0400
commit6466d50172e68149eb465a3ba1be73df745bf0f6 (patch)
treec9742c0840e8ea9c895e3c7bd0bfdd13f46b460a /lumina-desktop/panel-plugins/systemtray/LSysTray.cpp
parentAdd randomization to the wallpaper image that is used on first start of a des... (diff)
downloadlumina-6466d50172e68149eb465a3ba1be73df745bf0f6.tar.gz
lumina-6466d50172e68149eb465a3ba1be73df745bf0f6.tar.bz2
lumina-6466d50172e68149eb465a3ba1be73df745bf0f6.zip
Fix the system tray checking to once run one at a time (to prevent possible conflict with different loops modifying tray icons at the same time). This might fix the random desktop crashes since they seem to be tray related.
Diffstat (limited to 'lumina-desktop/panel-plugins/systemtray/LSysTray.cpp')
-rw-r--r--lumina-desktop/panel-plugins/systemtray/LSysTray.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp b/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp
index 36f5f81d..1d1ebe67 100644
--- a/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp
+++ b/lumina-desktop/panel-plugins/systemtray/LSysTray.cpp
@@ -34,7 +34,7 @@ LSysTray::LSysTray(QWidget *parent, QString id, bool horizontal) : LPPlugin(pare
upTimer = new QTimer(this);
upTimer->setInterval(300000); //maximum time between refreshes is 5 minutes
connect(upTimer, SIGNAL(timeout()), this, SLOT(checkAll()) );
- isRunning = false; stopping = false;
+ isRunning = false; stopping = false; checking = false;
QTimer::singleShot(100, this, SLOT(start()) );
connect(LSession::handle(), SIGNAL(TrayListChanged()), this, SLOT(checkAll()) );
@@ -166,12 +166,15 @@ void LSysTray::closeAll(){
}
*/
void LSysTray::checkAll(){
- if(!isRunning || stopping){ return; } //Don't check if not running at the moment
+ if(!isRunning || stopping || checking){ return; } //Don't check if not running at the moment
+ checking = true;
+ //qDebug() << "System Tray: Check tray apps";
QList<WId> wins = LSession::handle()->currentTrayApps(this->winId());
for(int i=0; i<trayIcons.length(); i++){
int index = wins.indexOf(trayIcons[i]->appID());
if(index < 0){
//Tray Icon no longer exists: remove it
+ //qDebug() << " - SysTray: Remove Icon";
TrayIcon *cont = trayIcons.takeAt(i);
LI->removeWidget(cont);
delete cont;
@@ -184,12 +187,14 @@ void LSysTray::checkAll(){
}
}else{
//Tray Icon already exists: just update it
+ //qDebug() << " - SysTray: Update Icon";
trayIcons[i]->update();
wins.removeAt(index); //Already found - remove from the list
}
}
//Now go through any remaining windows and add them
for(int i=0; i<wins.length(); i++){
+ //qDebug() << " - SysTray: Add Icon";
TrayIcon *cont = new TrayIcon(this);
LSession::processEvents();
trayIcons << cont;
@@ -205,15 +210,18 @@ void LSysTray::checkAll(){
LSession::processEvents();
//qDebug() << " - Attach tray app";
cont->attachApp(wins[i]);
- if(cont->appID()==0){ qDebug() << "Invalid Container:"; delete cont; continue; } //could not attach window
+ if(cont->appID()==0){ qDebug() << "Invalid Tray Container:"; delete cont; continue; } //could not attach window
LI->update(); //make sure there is no blank space in the layout
}
+ //qDebug() << " - System Tray: check done";
+ checking = false;
}
void LSysTray::UpdateTrayWindow(WId win){
- if(!isRunning || stopping){ return; }
+ if(!isRunning || stopping || checking){ return; }
for(int i=0; i<trayIcons.length(); i++){
- if(trayIcons[i]->appID()==win){
+ if(trayIcons[i]->appID()==win){
+ //qDebug() << "System Tray: Update Window " << win;
trayIcons[i]->update();
break;
}
bgstack15