Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Berg <benjamin@sipsolutions.net>2008-07-28 22:29:36 (GMT)
committer Benjamin Berg <benjamin@sipsolutions.net>2008-07-28 22:29:36 (GMT)
commit5336a0f98d16e776865cdebe9677193758d010c4 (patch)
treeaf96f9c029f2d3c2da12e9a57e690cf41a224376
parent10f71c13c38dfa27d19f268d8cf7ba323d1f3524 (diff)
parent9b7fab86eb9e06ffed23b64642aa6099aced9ef2 (diff)
Merge branch 'tabbing'
-rw-r--r--src/model/homemodel.py38
-rw-r--r--src/view/frame/activitiestray.py29
-rw-r--r--src/view/tabbinghandler.py15
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