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
[email protected]
http://lists.laptop.org/listinfo/sugar