This commits adds some functions and properties to keep track of the
activities when the user is tabbing.
---
 src/model/homemodel.py |   61 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 61 insertions(+), 0 deletions(-)
diff --git a/src/model/homemodel.py b/src/model/homemodel.py
index 5538f84..032f019 100644
--- a/src/model/homemodel.py
+++ b/src/model/homemodel.py
@@ -53,6 +53,9 @@ class HomeModel(gobject.GObject):
                                    ([gobject.TYPE_PYOBJECT])),
         'pending-activity-changed': (gobject.SIGNAL_RUN_FIRST,
                                      gobject.TYPE_NONE,
+                                     ([gobject.TYPE_PYOBJECT])),
+        'tabbing-activity-changed': (gobject.SIGNAL_RUN_FIRST,
+                                     gobject.TYPE_NONE,
                                      ([gobject.TYPE_PYOBJECT]))
     }
     
@@ -62,6 +65,7 @@ class HomeModel(gobject.GObject):
         self._activities = []
         self._active_activity = None
         self._pending_activity = None
+        self._tabbing_activity = None
 
         screen = wnck.screen_get_default()
         screen.connect('window-opened', self._window_opened_cb)
@@ -126,6 +130,42 @@ class HomeModel(gobject.GObject):
         """
         return self._active_activity
 
+    def tabbing_previous_activity(self):
+        activities = self._get_activities_with_window()
+        if len(activities) == 0:
+            return
+
+        activity = self._tabbing_activity
+        if activity is None:
+            activity = self._pending_activity
+
+        i = activities.index(activity)
+        if i - 1 >= 0:
+            self._set_tabbing_activity(activities[i - 1])
+        else:
+            self._set_tabbing_activity(activities[len(activities) - 1])
+
+    def tabbing_next_activity(self):
+        activities = self._get_activities_with_window()
+        if len(activities) == 0:
+            return
+
+        activity = self._tabbing_activity
+        if activity is None:
+            activity = self._pending_activity
+
+        i = activities.index(activity)
+        if i + 1 < len(activities):
+            self._set_tabbing_activity(activities[i + 1])
+        else:
+            self._set_tabbing_activity(activities[0])
+
+    def tabbing_cancel(self):
+        self._set_tabbing_activity(None)
+    
+    def get_tabbing_activity(self):
+        return self._tabbing_activity
+
     def _set_active_activity(self, home_activity):
         if self._active_activity == home_activity:
             return
@@ -146,6 +186,13 @@ class HomeModel(gobject.GObject):
         self._active_activity = home_activity
         self.emit('active-activity-changed', self._active_activity)
 
+    def _set_tabbing_activity(self, tabbing_activity):
+        if self._tabbing_activity == tabbing_activity:
+            return
+
+        self._tabbing_activity = tabbing_activity
+        self.emit('tabbing-activity-changed', self._tabbing_activity)
+
     def __iter__(self): 
         return iter(self._activities)
         
@@ -243,6 +290,20 @@ class HomeModel(gobject.GObject):
                 logging.error('No activities are running')
                 self._set_pending_activity(None)
 
+        if home_activity == self._tabbing_activity:
+            # Find a new tabbing activity
+            activities = self._get_activities_with_window()
+            if len(activities) <= 1:
+                # There is no other activity to tab to ...
+                self._set_tabbing_activity(None)
+            
+            i = activities.index(self._tabbing_activity)
+            if i + 1 < len(activities):
+                self._set_tabbing_activity(activities[i + 1])
+            else:
+                # Do not wrap, but instead select the last activity again
+                self._set_tabbing_activity(activities[i - 1])            
+
         self.emit('activity-removed', home_activity)
         self._activities.remove(home_activity)
 
_______________________________________________
Sugar mailing list
Sugar@lists.laptop.org
http://lists.laptop.org/listinfo/sugar

Reply via email to