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

List:       kde-commits
Subject:    KDE/kdebase/workspace/plasma/applets/tasks
From:       Olivier Goffart <ogoffart () kde ! org>
Date:       2008-01-17 17:27:04
Message-ID: 1200590824.235758.16544.nullmailer () svn ! kde ! org
[Download RAW message or body]

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<StartupPtr,AbstractTaskItem*> _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 @@
      </property>
     </widget>
    </item>
+  <item row="1" column="0" >
+    <widget class="QCheckBox" name="showOnlyCurrentDesktop" >
+     <property name="text" >
+      <string>Show only task of the current desktop</string>
+     </property>
+    </widget>
+   </item>
   </layout>
  </widget>
  <resources/>


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

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