diff --git a/plasma/applets/tasks/tasks.cpp b/plasma/applets/tasks/tasks.cpp index 36e51cbd..871bc542 100644 --- a/plasma/applets/tasks/tasks.cpp +++ b/plasma/applets/tasks/tasks.cpp @@ -17,7 +17,6 @@ */ #include "tasks.h" -#include "kworkspace/ktaskmanager.h" #include #include @@ -225,6 +224,10 @@ void TasksApplet::init() KTaskManager::self(), SIGNAL(taskAdded(KTaskManager::Task)), this, SLOT(slotUpdateLayout()) ); + connect( + KTaskManager::self(), SIGNAL(taskChanged(KTaskManager::Task)), + this, SLOT(slotTaskChanged(KTaskManager::Task)) + ); connect( KTaskManager::self(), SIGNAL(taskRemoved(KTaskManager::Task)), this, SLOT(slotUpdateLayout()) @@ -252,15 +255,19 @@ void TasksApplet::constraintsEvent(Plasma::Constraints constraints) break; } } - updateOrientation(); + QMutexLocker locker(&m_mutex); + foreach (TasksSvg* taskssvg, m_taskssvgs) { + taskssvg->setOrientation(m_layout->orientation()); + } } } -void TasksApplet::updateOrientation() +void TasksApplet::slotTaskChanged(const KTaskManager::Task &task) { - QMutexLocker locker(&m_mutex); - foreach (TasksSvg* taskssvg, m_taskssvgs) { - taskssvg->setOrientation(m_layout->orientation()); + // special case for tasks moved from one virtual desktop to another + const KWindowInfo kwindowinfo = KWindowSystem::windowInfo(task.window, NET::WMDesktop); + if (!kwindowinfo.isOnDesktop(KWindowSystem::currentDesktop())) { + slotUpdateLayout(); } } @@ -278,7 +285,8 @@ void TasksApplet::slotUpdateLayout() } adjustSize(); foreach (const KTaskManager::Task &task, KTaskManager::self()->tasks()) { - if (task.desktop != KWindowSystem::currentDesktop()) { + const KWindowInfo kwindowinfo = KWindowSystem::windowInfo(task.window, NET::WMDesktop); + if (!kwindowinfo.isOnDesktop(KWindowSystem::currentDesktop())) { continue; } TasksSvg* taskssvg = new TasksSvg(task, this); diff --git a/plasma/applets/tasks/tasks.h b/plasma/applets/tasks/tasks.h index f51b534a..4a1c0f48 100644 --- a/plasma/applets/tasks/tasks.h +++ b/plasma/applets/tasks/tasks.h @@ -19,6 +19,8 @@ #ifndef TASKS_H #define TASKS_H +#include "kworkspace/ktaskmanager.h" + #include #include #include @@ -35,6 +37,7 @@ public: void init() final; private Q_SLOTS: + void slotTaskChanged(const KTaskManager::Task &task); void slotUpdateLayout(); protected: @@ -42,8 +45,6 @@ protected: void constraintsEvent(Plasma::Constraints constraints) final; private: - void updateOrientation(); - QMutex m_mutex; QGraphicsLinearLayout* m_layout; QGraphicsWidget* m_spacer;