From kde-commits Thu Jan 17 17:27:04 2008 From: Olivier Goffart Date: Thu, 17 Jan 2008 17:27:04 +0000 To: kde-commits Subject: KDE/kdebase/workspace/plasma/applets/tasks Message-Id: <1200590824.235758.16544.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=120059083405119 SVN commit 762683 by ogoffart: Option to show only task of the current desktop in the taskbar. I can't use KDE without this :-) It's enabled by default because i think this is an importent feature for everyone using virtual desktops. But feel free to disable it by default if you don't like that. M +57 -15 tasks.cpp M +6 -0 tasks.h M +7 -0 tasksConfig.ui --- trunk/KDE/kdebase/workspace/plasma/applets/tasks/tasks.cpp #762682:762683 @@ -76,10 +76,26 @@ KConfigGroup cg = config(); _showTooltip = cg.readEntry("showTooltip", true); + _showOnlyCurrentDesktop = cg.readEntry("showOnlyCurrentDesktop", true); // add representations of existing running tasks registerWindowTasks(); registerStartingTasks(); + + // listen for addition and removal of window tasks + connect(TaskManager::TaskManager::self(), SIGNAL(taskAdded(TaskPtr)), + this, SLOT(addWindowTask(TaskPtr))); + connect(TaskManager::TaskManager::self(), SIGNAL(taskRemoved(TaskPtr)), + this, SLOT(removeWindowTask(TaskPtr))); + + // listen for addition and removal of starting tasks + connect(TaskManager::TaskManager::self(), SIGNAL(startupAdded(StartupPtr)), + this, SLOT(addStartingTask(StartupPtr)) ); + connect(TaskManager::TaskManager::self(), SIGNAL(startupRemoved(StartupPtr)), + this, SLOT(removeStartingTask(StartupPtr))); + + connect(TaskManager::TaskManager::self(), SIGNAL(desktopChanged(int)), + this, SLOT(currentDesktopChanged(int))); // add the animator once we're initialized to avoid animating like mad on start up _rootTaskGroup->layout()->setAnimator(animator); @@ -87,11 +103,6 @@ void Tasks::registerStartingTasks() { - // listen for addition and removal of starting tasks - connect(TaskManager::TaskManager::self(), SIGNAL(startupAdded(StartupPtr)), - this, SLOT(addStartingTask(StartupPtr)) ); - connect(TaskManager::TaskManager::self(), SIGNAL(startupRemoved(StartupPtr)), - this, SLOT(removeStartingTask(StartupPtr))); } void Tasks::addStartingTask(StartupPtr task) @@ -122,12 +133,7 @@ iter.next(); addWindowTask(iter.value()); } - - // listen for addition and removal of window tasks - connect(TaskManager::TaskManager::self(), SIGNAL(taskAdded(TaskPtr)), - this, SLOT(addWindowTask(TaskPtr))); - connect(TaskManager::TaskManager::self(), SIGNAL(taskRemoved(TaskPtr)), - this, SLOT(removeWindowTask(TaskPtr))); + } void Tasks::addItemToRootGroup(AbstractTaskItem *item) @@ -152,7 +158,9 @@ if (!task->showInTaskbar()) { return; } - + + if (_showOnlyCurrentDesktop && task->desktop() != TaskManager::TaskManager::self()->currentDesktop()) + return; WindowTaskItem *item = 0; foreach (StartupPtr startup, _startupTaskItems.keys()) { if (startup->matchesWindow(task->window())) { @@ -179,6 +187,12 @@ } } +void Tasks::removeAllTasks() +{ + while (!_windowTaskItems.isEmpty()) + removeItemFromRootGroup(_windowTaskItems.take(_windowTaskItems.constBegin().key())); +} + void Tasks::constraintsUpdated(Plasma::Constraints constraints) { if (constraints & Plasma::LocationConstraint) { @@ -196,6 +210,15 @@ _rootTaskGroup->cycle(e->delta()); } +void Tasks::currentDesktopChanged( int ) +{ + if (!_showOnlyCurrentDesktop) + return; + removeAllTasks(); + registerWindowTasks(); + +} + void Tasks::showConfigurationInterface() { if (m_dialog == 0) { @@ -211,11 +234,14 @@ connect( m_dialog, SIGNAL(okClicked()), this, SLOT(configAccepted()) ); } ui.showTooltip->setChecked(_showTooltip); + ui.showOnlyCurrentDesktop->setChecked(_showOnlyCurrentDesktop); m_dialog->show(); } void Tasks::configAccepted() { + bool changed = false; + if (_showTooltip != (ui.showTooltip->checkState() == Qt::Checked)) { _showTooltip = !_showTooltip; foreach (AbstractTaskItem *taskItem, _windowTaskItems) { @@ -224,12 +250,28 @@ windowTaskItem->setShowTooltip(_showTooltip); } } - update(); - KConfigGroup cg = config(); cg.writeEntry("showTooltip", _showTooltip); - emit configNeedsSaving(); + changed = true; + } + + if (_showOnlyCurrentDesktop != (ui.showOnlyCurrentDesktop->checkState() == Qt::Checked)) { + _showOnlyCurrentDesktop = !_showOnlyCurrentDesktop; + + removeAllTasks(); + registerWindowTasks(); + + KConfigGroup cg = config(); + cg.writeEntry("showOnlyCurrentDesktop", _showOnlyCurrentDesktop); + + changed = true; + } + + if(changed) { + update(); + emit configNeedsSaving(); + } } --- trunk/KDE/kdebase/workspace/plasma/applets/tasks/tasks.h #762682:762683 @@ -85,6 +85,8 @@ void addStartingTask(StartupPtr); void removeStartingTask(StartupPtr); + + void currentDesktopChanged(int); private: // creates task representations for existing windows @@ -101,6 +103,9 @@ void addItemToRootGroup(AbstractTaskItem* item); void removeItemFromRootGroup(AbstractTaskItem* item); + + // remove all tasks from the taskbar + void removeAllTasks(); TaskGroupItem* _rootTaskGroup; @@ -108,6 +113,7 @@ QHash _startupTaskItems; bool _showTooltip; + bool _showOnlyCurrentDesktop; KDialog *m_dialog; Ui::tasksConfig ui; }; --- trunk/KDE/kdebase/workspace/plasma/applets/tasks/tasksConfig.ui #762682:762683 @@ -23,6 +23,13 @@ + + + + Show only task of the current desktop + + +