diff options
author | Benjamin Berg <benjamin@sipsolutions.net> | 2008-07-28 22:29:36 (GMT) |
---|---|---|
committer | Benjamin Berg <benjamin@sipsolutions.net> | 2008-07-28 22:29:36 (GMT) |
commit | 5336a0f98d16e776865cdebe9677193758d010c4 (patch) | |
tree | af96f9c029f2d3c2da12e9a57e690cf41a224376 | |
parent | 10f71c13c38dfa27d19f268d8cf7ba323d1f3524 (diff) | |
parent | 9b7fab86eb9e06ffed23b64642aa6099aced9ef2 (diff) |
Merge branch 'tabbing'
-rw-r--r-- | src/model/homemodel.py | 38 | ||||
-rw-r--r-- | src/view/frame/activitiestray.py | 29 | ||||
-rw-r--r-- | src/view/tabbinghandler.py | 15 |
3 files changed, 57 insertions, 25 deletions
diff --git a/src/model/homemodel.py b/src/model/homemodel.py index 06dffa9..8267584 100644 --- a/src/model/homemodel.py +++ b/src/model/homemodel.py @@ -48,6 +48,9 @@ class HomeModel(gobject.GObject): 'active-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])), 'launch-started': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), @@ -64,7 +67,7 @@ class HomeModel(gobject.GObject): self._activities = [] self._active_activity = None - self._tabbing = False + self._tabbing_activity = None screen = wnck.screen_get_default() screen.connect('window-opened', self._window_opened_cb) @@ -79,9 +82,12 @@ class HomeModel(gobject.GObject): ret.append(i) return ret - def get_previous_activity(self): + def get_previous_activity(self, current=None): + if not current: + current = self._active_activity + activities = self._get_activities_with_window() - i = activities.index(self._active_activity) + i = activities.index(current) if len(activities) == 0: return None elif i - 1 >= 0: @@ -89,9 +95,12 @@ class HomeModel(gobject.GObject): else: return activities[len(activities) - 1] - def get_next_activity(self): + def get_next_activity(self, current=None): + if not current: + current = self._active_activity + activities = self._get_activities_with_window() - i = activities.index(self._active_activity) + i = activities.index(current) if len(activities) == 0: return None elif i + 1 < len(activities): @@ -103,12 +112,14 @@ class HomeModel(gobject.GObject): """Returns the activity that the user is currently working in""" return self._active_activity - def tabbing_set_activity(self, activity): - if activity: - self._tabbing = True - self._set_active_activity(activity) - else: - self._tabbing = False + def get_tabbing_activity(self): + """Returns the activity that is currently highlighted during tabbing""" + return self._tabbing_activity + + def set_tabbing_activity(self, activity): + """Sets the activity that is currently highlighted during tabbing""" + self._tabbing_activity = activity + self.emit("tabbing-activity-changed", self._tabbing_activity) def _set_active_activity(self, home_activity): if self._active_activity == home_activity: @@ -193,11 +204,6 @@ class HomeModel(gobject.GObject): logging.error("set_active() failed: %s" % err) def _active_window_changed_cb(self, screen, previous_window=None): - if self._tabbing: - # Ignore any window changes when tabbing, as these are comming - # in delayed. - return - window = screen.get_active_window() if window is None: return diff --git a/src/view/frame/activitiestray.py b/src/view/frame/activitiestray.py index 1d0d761..72a03fd 100644 --- a/src/view/frame/activitiestray.py +++ b/src/view/frame/activitiestray.py @@ -295,6 +295,8 @@ class ActivitiesTray(HTray): self._home_model.connect('activity-removed', self.__activity_removed_cb) self._home_model.connect('active-activity-changed', self.__activity_changed_cb) + self._home_model.connect('tabbing-activity-changed', + self.__tabbing_activity_changed_cb) self._invites = shellmodel.get_instance().get_invites() for invite in self._invites: @@ -321,15 +323,34 @@ class ActivitiesTray(HTray): self.remove_item(button) del self._buttons[home_activity.get_activity_id()] - def __activity_changed_cb(self, home_model, home_activity): - logging.debug('__activity_changed_cb: %r' % home_activity) - + def _activate_activity(self, home_activity): button = self._buttons[home_activity.get_activity_id()] self._freeze_button_clicks = True button.props.active = True self._freeze_button_clicks = False - + self.scroll_to_item(button) + # Redraw immediately. + # The widget may not be realized yet, and then there is no window. + if self.window: + self.window.process_updates(True) + + def __activity_changed_cb(self, home_model, home_activity): + logging.debug('__activity_changed_cb: %r' % home_activity) + + # Only select the new activity, if there is no tabbing activity. + if home_model.get_tabbing_activity() is None: + self._activate_activity(home_activity) + + def __tabbing_activity_changed_cb(self, home_model, home_activity): + logging.debug('__tabbing_activity_changed_cb: %r' % home_activity) + # If the tabbing_activity is set to None just do nothing. + # The active activity will be updated a bit later (and it will + # be set to the activity that is currently selected). + if home_activity is None: + return + + self._activate_activity(home_activity) def __activity_clicked_cb(self, button, home_activity): if not self._freeze_button_clicks and button.props.active: diff --git a/src/view/tabbinghandler.py b/src/view/tabbinghandler.py index dd57e6e..03ce275 100644 --- a/src/view/tabbinghandler.py +++ b/src/view/tabbinghandler.py @@ -79,7 +79,7 @@ class TabbingHandler(object): def _activate_current(self): shell_model = shellmodel.get_instance() home_model = shell_model.get_home() - activity = home_model.get_active_activity() + activity = home_model.get_tabbing_activity() if activity and activity.get_window(): activity.get_window().activate(1) @@ -99,9 +99,10 @@ class TabbingHandler(object): if not zoom_activity and first_switch: activity = home_model.get_active_activity() else: - activity = home_model.get_next_activity() + activity = home_model.get_tabbing_activity() + activity = home_model.get_next_activity(current=activity) - home_model.tabbing_set_activity(activity) + home_model.set_tabbing_activity(activity) self._start_timeout() else: view.Shell.get_instance().activate_next_activity() @@ -122,9 +123,10 @@ class TabbingHandler(object): if not zoom_activity and first_switch: activity = home_model.get_active_activity() else: - activity = home_model.get_previous_activity() + activity = home_model.get_tabbing_activity() + activity = home_model.get_previous_activity(current=activity) - home_model.tabbing_set_activity(activity) + home_model.set_tabbing_activity(activity) self._start_timeout() else: view.Shell.get_instance().activate_next_activity() @@ -139,6 +141,9 @@ class TabbingHandler(object): self._cancel_timeout() self._activate_current() + home_model = shellmodel.get_instance().get_home() + home_model.set_tabbing_activity(None) + def is_tabbing(self): return self._tabbing |