[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdebase/workspace/libs/taskmanager
From:       Matthieu Gallien <matthieu_gallien () yahoo ! fr>
Date:       2010-04-30 21:48:18
Message-ID: 20100430214818.C384CAC8AA () svn ! kde ! org
[Download RAW message or body]

SVN commit 1121233 by mgallien:

change the class TaskManager to listen to the updated signal from KWindowSystem that \
contains both NET::Property and NET::Property2 represented by an unsigned int pointer \
and update Task class

When modifying the Task class, add a struct with two fields each for one set of NET \
properties as suggested by aseigo. This change fixes the detection of changes \
represented by the enum NET::Property2.


 M  +17 -10    task.cpp  
 M  +18 -1     task.h  
 M  +2 -2      task_p.h  
 M  +9 -9      taskmanager.cpp  
 M  +1 -1      taskmanager.h  


--- trunk/KDE/kdebase/workspace/libs/taskmanager/task.cpp #1121232:1121233
@@ -59,10 +59,11 @@
 
 void Task::timerEvent(QTimerEvent *)
 {
-    if (d->cachedChanges) {
+    if (d->cachedChanges.netWindowInfoProperties || \
d->cachedChanges.netWindowInfoProperties2) {  d->lastUpdate = QTime();
         refresh(d->cachedChanges);
-        d->cachedChanges = 0;
+        d->cachedChanges.netWindowInfoProperties = 0;
+        d->cachedChanges.netWindowInfoProperties2 = 0;
     }
 
     killTimer(d->cachedChangesTimerId);
@@ -93,10 +94,11 @@
     emit changed(IconChanged);
 }
 
-::TaskManager::TaskChanges Task::refresh(unsigned int dirty)
+::TaskManager::TaskChanges Task::refresh(WindowProperties dirty)
 {
     if (!d->lastUpdate.isNull() && d->lastUpdate.elapsed() < 200) {
-        d->cachedChanges |= dirty;
+        d->cachedChanges.netWindowInfoProperties |= dirty.netWindowInfoProperties;
+        d->cachedChanges.netWindowInfoProperties2 |= dirty.netWindowInfoProperties2;
 
         if (!d->cachedChangesTimerId) {
             d->cachedChangesTimerId = startTimer(200 - d->lastUpdate.elapsed());
@@ -117,27 +119,27 @@
 
     d->info = info;
 
-    if (dirty & NET::WMState || dirty & NET::XAWMState) {
+    if (dirty.netWindowInfoProperties & NET::WMState || \
dirty.netWindowInfoProperties & NET::XAWMState) {  changes |= StateChanged;
     }
 
-    if (dirty & NET::WMDesktop) {
+    if (dirty.netWindowInfoProperties & NET::WMDesktop) {
         changes |= DesktopChanged;
     }
 
-    if (dirty & NET::WMGeometry) {
+    if (dirty.netWindowInfoProperties & NET::WMGeometry) {
         changes |= GeometryChanged;
     }
 
-    if (dirty & NET::WMWindowType) {
+    if (dirty.netWindowInfoProperties & NET::WMWindowType) {
         changes |= WindowTypeChanged;
     }
 
-    if (dirty & NET::WM2AllowedActions) {
+    if (dirty.netWindowInfoProperties2 & NET::WM2AllowedActions) {
         changes |= ActionsChanged;
     }
 
-    if (dirty & NET::WMIcon) {
+    if (dirty.netWindowInfoProperties & NET::WMIcon) {
         refreshIcon();
     }
 
@@ -632,6 +634,11 @@
     return id;
 }
 
+Task::WindowProperties::WindowProperties(unsigned int netWinInfoProperties, unsigned \
int netWinInfoProperties2) +  : netWindowInfoProperties(netWinInfoProperties), \
netWindowInfoProperties2(netWinInfoProperties2) +{
+}
+
 } // TaskManager namespace
 
 #include "task.moc"
--- trunk/KDE/kdebase/workspace/libs/taskmanager/task.h #1121232:1121233
@@ -70,6 +70,23 @@
     Q_PROPERTY( int desktop READ desktop )
 
 public:
+
+    /**
+     * Represents all the informations reported by KWindowSystem about the NET \
properties of the task +     */
+    struct WindowProperties {
+        /**
+         * This is corresponding to NET::Property enum reported properties.
+         */
+        unsigned int netWindowInfoProperties;
+        /**
+         * This is corresponding to NET::Property2 enum reported properties.
+         */
+        unsigned int netWindowInfoProperties2;
+
+        WindowProperties(unsigned int netWinInfoProperties, unsigned int \
netWinInfoProperties2); +    };
+
     Task(WId win, QObject *parent, const char *name = 0);
     virtual ~Task();
 
@@ -235,7 +252,7 @@
     // internal
 
     //* @internal
-    ::TaskManager::TaskChanges refresh(unsigned int dirty);
+    ::TaskManager::TaskChanges refresh(WindowProperties dirty);
     //* @internal
 #ifdef Q_WS_X11
     void addTransient( WId w, const NETWinInfo& info );
--- trunk/KDE/kdebase/workspace/libs/taskmanager/task_p.h #1121232:1121233
@@ -47,7 +47,7 @@
        info(KWindowSystem::windowInfo(w, windowInfoFlags, windowInfoFlags2)),
        lastWidth(0),
        lastHeight(0),
-       cachedChanges(0),
+       cachedChanges(0, 0),
        cachedChangesTimerId(0),
        active(false),
        lastResize(false)
@@ -67,7 +67,7 @@
     QRect iconGeometry;
 
     QTime lastUpdate;
-    unsigned int cachedChanges;
+    Task::WindowProperties cachedChanges;
     int cachedChangesTimerId;
     QPixmap pixmap;
     QPixmap lastIcon;
--- trunk/KDE/kdebase/workspace/libs/taskmanager/taskmanager.cpp #1121232:1121233
@@ -116,8 +116,8 @@
             this,       SLOT(activeWindowChanged(WId)));
     connect(KWindowSystem::self(), SIGNAL(currentDesktopChanged(int)),
             this,       SLOT(currentDesktopChanged(int)));
-    connect(KWindowSystem::self(), SIGNAL(windowChanged(WId,unsigned int)),
-            this,       SLOT(windowChanged(WId,unsigned int)));
+    connect(KWindowSystem::self(), SIGNAL(windowChanged(WId,unsigned int*)),
+            this,       SLOT(windowChanged(WId,unsigned int*)));
     if (QCoreApplication::instance()) {
         connect(QCoreApplication::instance(), SIGNAL(aboutToQuit()), this, \
SLOT(onAppExitCleanup()));  }
@@ -323,10 +323,10 @@
     }
 }
 
-void TaskManager::windowChanged(WId w, unsigned int dirty)
+void TaskManager::windowChanged(WId w, unsigned int *dirty)
 {
 #ifdef Q_WS_X11
-    if (dirty & NET::WMState) {
+    if (dirty[NETWinInfo::PROTOCOLS] & NET::WMState) {
         NETWinInfo info (QX11Info::display(), w, QX11Info::appRootWindow(),
                          NET::WMState | NET::XAWMState);
 
@@ -346,10 +346,10 @@
 #endif
 
     // check if any state we are interested in is marked dirty
-    if (!(dirty & (NET::WMVisibleName | NET::WMName |
+    if (!(dirty[NETWinInfo::PROTOCOLS] & (NET::WMVisibleName | NET::WMName |
                    NET::WMState | NET::WMIcon |
                    NET::XAWMState | NET::WMDesktop) ||
-          (trackGeometry() && dirty & NET::WMGeometry))) {
+          (trackGeometry() && dirty[NETWinInfo::PROTOCOLS] & NET::WMGeometry))) {
         return;
     }
 
@@ -361,14 +361,14 @@
 
     //kDebug() << "TaskManager::windowChanged " << w << " " << dirty;
 
-    if (dirty & NET::WMState) {
+    if (dirty[NETWinInfo::PROTOCOLS] & NET::WMState) {
         t->updateDemandsAttentionState(w);
     }
 
     //kDebug() << "got changes, but will we refresh?" << dirty;
-    if (dirty) {
+    if (dirty[NETWinInfo::PROTOCOLS] || dirty[NETWinInfo::PROTOCOLS2]) {
         // only refresh this stuff if we have other changes besides icons
-        t->refresh(dirty);
+        t->refresh(Task::WindowProperties(dirty[NETWinInfo::PROTOCOLS], \
dirty[NETWinInfo::PROTOCOLS2]));  }
 }
 
--- trunk/KDE/kdebase/workspace/libs/taskmanager/taskmanager.h #1121232:1121233
@@ -186,7 +186,7 @@
     //* @internal
     void windowRemoved(WId);
     //* @internal
-    void windowChanged(WId, unsigned int);
+    void windowChanged(WId, unsigned int*);
 
     //* @internal
     void activeWindowChanged(WId);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic