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