diff --git a/data/hamster-time-tracker.schemas.in b/data/hamster-time-tracker.schemas.in
index a7dc2f78c..8fdf563e9 100644
--- a/data/hamster-time-tracker.schemas.in
+++ b/data/hamster-time-tracker.schemas.in
@@ -54,6 +54,20 @@
+
+ /schemas/apps/hamster-time-tracker/lock_on_idle
+ /apps/hamster-time-tracker/lock_on_idle
+ hamster-time-tracker
+ bool
+ false
+
+ Lock the screen when no activity is set
+
+ Also check every notify_interval minutes if no activity
+ has been started, if true, lock the screen.
+
+
+
/schemas/apps/hamster-time-tracker/day_start_minutes
/apps/hamster-time-tracker/day_start_minutes
diff --git a/data/preferences.ui b/data/preferences.ui
index ce6685b6c..5a740906d 100644
--- a/data/preferences.ui
+++ b/data/preferences.ui
@@ -147,6 +147,28 @@
1
+
+
+
+ 2
+
+
+
diff --git a/src/hamster/lib/configuration.py b/src/hamster/lib/configuration.py
index e3630878b..83747f58b 100644
--- a/src/hamster/lib/configuration.py
+++ b/src/hamster/lib/configuration.py
@@ -201,6 +201,7 @@ class GConfStore(gobject.GObject, Singleton):
'enable_timeout' : False, # Should hamster stop tracking on idle
'stop_on_shutdown' : False, # Should hamster stop tracking on shutdown
'notify_on_idle' : False, # Remind also if no activity is set
+ 'lock_on_idle' : False, # Lock the screen if no activity is set
'notify_interval' : 27, # Remind of current activity every X minutes
'day_start_minutes' : 5 * 60 + 30, # At what time does the day start (5:30AM)
'overview_window_box' : [], # X, Y, W, H
diff --git a/src/hamster/lib/desktop.py b/src/hamster/lib/desktop.py
index f60905a42..c4650f6fc 100644
--- a/src/hamster/lib/desktop.py
+++ b/src/hamster/lib/desktop.py
@@ -39,6 +39,7 @@ def __init__(self, storage):
self.conf_enable_timeout = conf.get("enable_timeout")
self.conf_notify_on_idle = conf.get("notify_on_idle")
+ self.conf_lock_on_idle = conf.get("lock_on_idle")
self.conf_notify_interval = conf.get("notify_interval")
conf.connect('conf-changed', self.on_conf_changed)
@@ -81,12 +82,24 @@ def check_user(self, todays_facts):
if duration and duration % interval == 0:
message = _(u"Working on %s") % last_activity['name']
self.notify_user(message)
-
- elif self.conf_notify_on_idle:
- #if we have no last activity, let's just calculate duration from 00:00
- if (now.minute + now.hour * 60) % interval == 0:
- self.notify_user(_(u"No activity"))
-
+ else:
+ # Determine whether we should notify the user now
+ time_to_notify = (now.minute + now.hour * 60) % interval == 0
+
+ if time_to_notify:
+ if self.conf_lock_on_idle:
+ self.lock_screen()
+ elif self.conf_notify_on_idle:
+ self.notify_user(_(u"No activity"))
+
+ def lock_screen(self):
+ if not hasattr(self, "_screensaver_conn"):
+ proxy_for_screensaver = self.bus.get_object('org.freedesktop.ScreenSaver', '/ScreenSaver')
+ interface_screensaver = dbus.Interface(proxy_for_screensaver, 'org.freedesktop.ScreenSaver')
+ self._screensaver_conn = interface_screensaver
+
+ conn = self._screensaver_conn
+ conn.Lock()
def notify_user(self, summary="", details=""):
if not hasattr(self, "_notification_conn"):
diff --git a/src/hamster/preferences.py b/src/hamster/preferences.py
index 49409fcc3..ca41edf3a 100755
--- a/src/hamster/preferences.py
+++ b/src/hamster/preferences.py
@@ -204,6 +204,12 @@ def load_config(self, *args):
self.get_widget("notify_on_idle").set_active(conf.get("notify_on_idle"))
self.get_widget("notify_on_idle").set_sensitive(conf.get("notify_interval") <=120)
+ self.get_widget("lock_on_idle").set_active(conf.get("lock_on_idle"))
+ self.get_widget("lock_on_idle").set_sensitive(conf.get("notify_interval") <=120)
+
+ self.get_widget("workspace_tracking_name").set_active("name" in conf.get("workspace_tracking"))
+ self.get_widget("workspace_tracking_memory").set_active("memory" in conf.get("workspace_tracking"))
+
day_start = conf.get("day_start_minutes")
day_start = dt.time(day_start / 60, day_start % 60)
self.day_start.set_time(day_start)
@@ -575,6 +581,9 @@ def on_idle_track_toggled(self, checkbox):
def on_notify_on_idle_toggled(self, checkbox):
conf.set("notify_on_idle", checkbox.get_active())
+ def on_lock_on_idle_toggled(self, checkbox):
+ conf.set("lock_on_idle", checkbox.get_active())
+
def on_notify_interval_format_value(self, slider, value):
if value <=120:
# notify interval slider value label
@@ -591,6 +600,7 @@ def on_notify_interval_value_changed(self, scale):
value = int(scale.get_value())
conf.set("notify_interval", value)
self.get_widget("notify_on_idle").set_sensitive(value <= 120)
+ self.get_widget("lock_on_idle").set_sensitive(value <= 120)
def on_day_start_changed(self, widget):
day_start = self.day_start.get_time()