summaryrefslogtreecommitdiff
path: root/kde-base/plasma-workspace/files/plasma-workspace-4.7.0-taskbar.patch
diff options
context:
space:
mode:
Diffstat (limited to 'kde-base/plasma-workspace/files/plasma-workspace-4.7.0-taskbar.patch')
-rw-r--r--kde-base/plasma-workspace/files/plasma-workspace-4.7.0-taskbar.patch100
1 files changed, 100 insertions, 0 deletions
diff --git a/kde-base/plasma-workspace/files/plasma-workspace-4.7.0-taskbar.patch b/kde-base/plasma-workspace/files/plasma-workspace-4.7.0-taskbar.patch
new file mode 100644
index 0000000..a42126f
--- /dev/null
+++ b/kde-base/plasma-workspace/files/plasma-workspace-4.7.0-taskbar.patch
@@ -0,0 +1,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;
+ }
+
+