summaryrefslogtreecommitdiff
path: root/kde-base/plasma-workspace/files/plasma-workspace-4.7.0-taskbar.patch
blob: a42126f48860f38f96f933fe3a231a1e6d4f61a7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
commit 00b03781b8106cc9d079d133373af88b23522fc1
Author: Aaron Seigo <aseigo@kde.org>
Date:   Thu Aug 11 16:53:36 2011 +0200

    if we are supposd to skip a task .. still check for startup items.
    
    this should prevent the ghost-in-the-taskbar bugs

diff --git a/libs/taskmanager/groupmanager.cpp b/libs/taskmanager/groupmanager.cpp
index 4d8e4d9..854db2e 100644
--- a/libs/taskmanager/groupmanager.cpp
+++ b/libs/taskmanager/groupmanager.cpp
@@ -233,14 +233,15 @@ bool GroupManagerPrivate::addTask(TaskPtr task)
              << task->className()
              << task->classClass(); */
 
+    bool skip = false;
     if (!task->showInTaskbar()) {
         //kDebug() << "Do not show in taskbar";
-        return false;
+        skip = true;
     }
 
     if (showOnlyCurrentScreen && !task->isOnScreen(currentScreen)) {
         //kDebug() << "Not on this screen and showOnlyCurrentScreen";
-        return false;
+        skip = true;
     }
 
     // Should the Task be displayed ? We always display if attention is demaded
@@ -250,25 +251,25 @@ bool GroupManagerPrivate::addTask(TaskPtr task)
         if (showOnlyCurrentDesktop && !task->isOnCurrentDesktop()) {
             /* kDebug() << "Not on this desktop and showOnlyCurrentDesktop"
                      << KWindowSystem::currentDesktop() << task->desktop(); */
-            return false;
+            skip = true;
         }
 
         if (showOnlyCurrentActivity && !task->isOnCurrentActivity()) {
             /* kDebug() << "Not on this desktop and showOnlyCurrentActivity"
                      << KWindowSystem::currentActivity() << task->desktop(); */
-            return false;
+            skip = true;
         }
 
         if (showOnlyMinimized && !task->isMinimized()) {
             //kDebug() << "Not minimized and only showing minimized";
-            return false;
+            skip = true;
         }
 
         NET::WindowType type = task->info().windowType(NET::NormalMask | NET::DialogMask |
                                                     NET::OverrideMask | NET::UtilityMask);
         if (type == NET::Utility) {
             //kDebug() << "skipping utility window" << task->name();
-            return false;
+            skip = true;
         }
 
             //TODO: should we check for transiency? if so the following code can detect it.
@@ -288,14 +289,14 @@ bool GroupManagerPrivate::addTask(TaskPtr task)
 
     //Ok the Task should be displayed
     TaskItem *item = qobject_cast<TaskItem*>(currentRootGroup()->getMemberByWId(task->window()));
-    if (!item) {
-        // first search for an existing startuptask for this task
+    if (!item || skip) {
+        TaskItem *startupItem = 0;
         QHash<StartupPtr, TaskItem *>::iterator it = startupList.begin();
         QHash<StartupPtr, TaskItem *>::iterator itEnd = startupList.end();
         while (it != itEnd) {
             if (it.key()->matchesWindow(task->window())) {
                 //kDebug() << "startup task found";
-                item = it.value();
+                item = startupItem = it.value();
                 startupList.erase(it);
                 QObject::disconnect(item, 0, q, 0);
                 item->setTaskPointer(task);
@@ -304,6 +305,12 @@ bool GroupManagerPrivate::addTask(TaskPtr task)
             ++it;
         }
 
+        // if we are to skip because we don't display, we simply delete the startup related to it
+        if (skip) {
+            delete startupItem;
+            return false;
+        }
+
         if (!item) {
             item = new TaskItem(q, task);
         }
@@ -324,7 +331,6 @@ bool GroupManagerPrivate::addTask(TaskPtr task)
     }
 
     geometryTasks.insert(task.data());
-
     return true;
 }