Hi, this is a patch that enables workspace (aka virtual desktop) support for hamster via wnck (1). It patches https://bugzilla.gnome.org/show_bug.cgi?id=529401 The patch only changes applet.py, the preferences would probably have to be patched as well .. I assume not everyone prefers this behaviour. Let me know what you think =) Cheers, Ludwig 1) http://library.gnome.org/devel/libwnck/stable/index.html
diff --git a/hamster/applet.py b/hamster/applet.py
index 7f694a1..80b38b7 100755
--- a/hamster/applet.py
+++ b/hamster/applet.py
@@ -44,6 +44,8 @@ import idle
import pango
+import wnck
+
try:
import pynotify
PYNOTIFY = True
@@ -290,12 +292,17 @@ class HamsterApplet(object):
self.notify_on_idle = conf.get("notify_on_idle")
runtime.dispatcher.add_handler('conf_changed', self.on_conf_changed)
-
# init nagging timeout
if PYNOTIFY:
self.notify = Notifier(self.button)
self.on_conf_changed(None, ("notify_interval", conf.get("notify_interval")))
+ # init desktop switching
+ self.screen = wnck.screen_get_default()
+ self.screen.connect("active-workspace-changed", self.on_workspace_changed)
+ self.active_workspace = None
+ self.workspace_activities = dict()
+
"""UI functions"""
def refresh_hamster(self):
@@ -580,6 +587,41 @@ class HamsterApplet(object):
runtime.storage.touch_fact(self.last_activity,
end_time = self.dbusIdleListener.getIdleFrom())
+ def on_workspace_changed(self, screen, old_workspace):
+ # take note of current activity, set new activity depending on workspace
+ new_workspace = self.screen.get_active_workspace()
+ now = dt.datetime.now()
+
+ if old_workspace is None:
+ # this happens once at startup
+ self.active_workspace = new_workspace
+ return True
+
+ logging.debug("changing from workspace %s to %s" % \
+ (self.active_workspace.get_name(), new_workspace.get_name()))
+
+ # always take note of current activity on active workspace
+ current_activity = self.last_activity
+ self.workspace_activities[self.active_workspace] = current_activity
+ logging.debug("setting activity on workspace %s to %s" % (self.active_workspace.get_name(), current_activity['name']))
+
+ # set activity to last activity on new workspace
+ if new_workspace in self.workspace_activities.keys():
+ new_activity = self.workspace_activities[new_workspace]
+ logging.debug("last activity on workspace was %s", (new_activity['name']),)
+ self.current_activity = new_activity
+ if new_activity is not current_activity:
+ logging.debug("setting current activity to %s" % (new_activity['name']),)
+ runtime.storage.update_fact(
+ new_activity['id'], new_activity['name'],
+ new_activity['description'], now, None)
+
+ # change active workspace
+ self.active_workspace = new_workspace
+
+ return True
+
+
"""global shortcuts"""
def on_keybinding_activated(self, event, data):
self.__show_toggle(None, not self.button.get_active())
Attachment:
signature.asc
Description: Digital signature