From 8f7e8e2faf8cdef2cd859d28fa1f9749d77787fb Mon Sep 17 00:00:00 2001 From: Tomas Babej Date: Sat, 19 Oct 2013 18:17:51 +0200 Subject: [PATCH] Add option to lock the screen when no activity is set --- data/hamster-time-tracker.schemas.in | 14 ++++++++++++++ data/preferences.ui | 22 ++++++++++++++++++++++ src/hamster/lib/configuration.py | 1 + src/hamster/lib/desktop.py | 25 +++++++++++++++++++------ src/hamster/preferences.py | 10 ++++++++++ 5 files changed, 66 insertions(+), 6 deletions(-) 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 + + + True + 8 + 4 + + + Lock the screen when no activity is set + True + True + False + True + True + + + + + + 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()