diff options
Diffstat (limited to 'src/model/homemodel.py')
-rw-r--r-- | src/model/homemodel.py | 75 |
1 files changed, 26 insertions, 49 deletions
diff --git a/src/model/homemodel.py b/src/model/homemodel.py index 5538f84..a75adcf 100644 --- a/src/model/homemodel.py +++ b/src/model/homemodel.py @@ -42,18 +42,21 @@ class HomeModel(gobject.GObject): 'activity-added': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), - 'activity-started': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - ([gobject.TYPE_PYOBJECT])), 'activity-removed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), 'active-activity-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ([gobject.TYPE_PYOBJECT])), - 'pending-activity-changed': (gobject.SIGNAL_RUN_FIRST, - gobject.TYPE_NONE, - ([gobject.TYPE_PYOBJECT])) + 'launch-started': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'launch-completed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])), + 'launch-failed': (gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ([gobject.TYPE_PYOBJECT])) } def __init__(self): @@ -61,7 +64,6 @@ class HomeModel(gobject.GObject): self._activities = [] self._active_activity = None - self._pending_activity = None screen = wnck.screen_get_default() screen.connect('window-opened', self._window_opened_cb) @@ -78,7 +80,7 @@ class HomeModel(gobject.GObject): def get_previous_activity(self): activities = self._get_activities_with_window() - i = activities.index(self._pending_activity) + i = activities.index(self._active_activity) if len(activities) == 0: return None elif i - 1 >= 0: @@ -88,7 +90,7 @@ class HomeModel(gobject.GObject): def get_next_activity(self): activities = self._get_activities_with_window() - i = activities.index(self._pending_activity) + i = activities.index(self._active_activity) if len(activities) == 0: return None elif i + 1 < len(activities): @@ -96,34 +98,8 @@ class HomeModel(gobject.GObject): else: return activities[0] - def get_pending_activity(self): - """Returns the activity that would be seen in the Activity zoom level - - In the Home (or Neighborhood or Groups) zoom level, this - indicates the activity that would become active if the user - switched to the Activity zoom level. (In the Activity zoom - level, this just returns the currently-active activity.) - Unlike get_active_activity(), this never returns None as long - as there is any activity running. - """ - return self._pending_activity - - def _set_pending_activity(self, home_activity): - if self._pending_activity == home_activity: - return - - self._pending_activity = home_activity - self.emit('pending-activity-changed', self._pending_activity) - def get_active_activity(self): - """Returns the activity that the user is currently working in - - In the Activity zoom level, this returns the currently-active - activity. In the other zoom levels, it returns the activity - that was most-recently active in the Activity zoom level, or - None if the most-recently-active activity is no longer - running. - """ + """Returns the activity that the user is currently working in""" return self._active_activity def _set_active_activity(self, home_activity): @@ -181,10 +157,10 @@ class HomeModel(gobject.GObject): home_activity.set_window(window) home_activity.props.launching = False - self.emit('activity-started', home_activity) + self.emit('launch-completed', home_activity) - if self._pending_activity is None: - self._set_pending_activity(home_activity) + if self._active_activity is None: + self._set_active_activity(home_activity) def _window_closed_cb(self, screen, window): if window.get_window_type() == wnck.WINDOW_NORMAL: @@ -219,7 +195,6 @@ class HomeModel(gobject.GObject): act = self._get_activity_by_xid(window.get_xid()) if act is not None: - self._set_pending_activity(act) self._set_active_activity(act) def _add_activity(self, home_activity): @@ -228,20 +203,16 @@ class HomeModel(gobject.GObject): def _remove_activity(self, home_activity): if home_activity == self._active_activity: - self._set_active_activity(None) - - if home_activity == self._pending_activity: - # Figure out the new _pending_activity windows = wnck.screen_get_default().get_windows_stacked() windows.reverse() for window in windows: new_activity = self._get_activity_by_xid(window.get_xid()) if new_activity is not None: - self._set_pending_activity(new_activity) + self._set_active_activity(new_activity) break else: logging.error('No activities are running') - self._set_pending_activity(None) + self._set_active_activity(None) self.emit('activity-removed', home_activity) self._activities.remove(home_activity) @@ -253,7 +224,7 @@ class HomeModel(gobject.GObject): else: logging.error('Model for window %d does not exist.' % xid) - def notify_activity_launch(self, activity_id, service_name): + def notify_launch(self, activity_id, service_name): registry = activity.get_registry() activity_info = registry.get_activity(service_name) if not activity_info: @@ -264,11 +235,15 @@ class HomeModel(gobject.GObject): home_activity.props.launching = True self._add_activity(home_activity) + self._set_active_activity(home_activity) + + self.emit('launch-started', home_activity) + # FIXME: better learn about finishing processes by receiving a signal. # Now just check whether an activity has a window after ~90sec gobject.timeout_add(90000, self._check_activity_launched, activity_id) - def notify_activity_launch_failed(self, activity_id): + def notify_launch_failed(self, activity_id): home_activity = self._get_activity_by_id(activity_id) if home_activity: logging.debug("Activity %s (%s) launch failed" % \ @@ -279,10 +254,12 @@ class HomeModel(gobject.GObject): logging.error('Model for activity id %s does not exist.' % activity_id) + self.emit('launch-failed', home_activity) + def _check_activity_launched(self, activity_id): home_activity = self._get_activity_by_id(activity_id) if home_activity and home_activity.props.launching: logging.debug('Activity %s still launching, assuming it failed...' % activity_id) - self.notify_activity_launch_failed(activity_id) + self.notify_launch_failed(activity_id) return False |