summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--LockWindow.py39
-rw-r--r--Locker.py7
-rw-r--r--pylock.py3
3 files changed, 37 insertions, 12 deletions
diff --git a/LockWindow.py b/LockWindow.py
index 89d7576..25d7546 100644
--- a/LockWindow.py
+++ b/LockWindow.py
@@ -9,6 +9,7 @@ _ = locale.gettext
class LockWindow(Gtk.Window):
__gsignals__ = {
+ 'logout': (GObject.SIGNAL_RUN_FIRST, None, ()),
'tryUnlock': (GObject.SIGNAL_RUN_FIRST, None, (str,))
}
@@ -44,40 +45,56 @@ class LockWindow(Gtk.Window):
self.unlockWindow.connect('delete-event', lambda w, e: True)
self.promptEntry.connect('activate', lambda w: self._tryUnlock())
+ self.logoutButton.connect('clicked', lambda w: self._logout())
self.unlockButton.connect('clicked', lambda w: self._tryUnlock())
- self.reset()
+ self.reset(True)
+
+ def _logout(self):
+ self.promptEntry.set_sensitive(False)
+ self.unlockButton.set_sensitive(False)
+ self.logoutButton.set_sensitive(False)
+ GLib.idle_add(lambda: self.emit('logout'))
def _tryUnlock(self):
self.promptEntry.set_sensitive(False)
self.unlockButton.set_sensitive(False)
+ self.logoutButton.set_sensitive(False)
GLib.idle_add(lambda: self.emit('tryUnlock', self.promptEntry.get_text()))
- def reset(self):
- self.promptEntry.set_text('')
- self.promptEntry.set_sensitive(True)
- self.promptEntry.grab_focus()
+ def _update(self):
+ self.promptEntry.set_sensitive(self._enablePromptEntry)
+ self.logoutButton.set_sensitive(self._enableLogoutButton)
+ self.unlockButton.set_sensitive(self._enableUnlockButton)
- self.unlockButton.set_sensitive(True)
+ def reset(self, resetButtons = False):
+ if resetButtons:
+ self._enablePromptEntry = True
+ self._enableLogoutButton = False
+ self._enableUnlockButton = True
+ self.promptEntry.set_text('')
self.messageLabel.set_label('')
+ self._update()
+
+ self.promptEntry.grab_focus()
- self.logoutButton.set_sensitive(False)
def updateLockMessage(self, username, logoutTime = None):
if logoutTime is None:
self.lockLabel.set_markup(_('This computer is currently locked by the user <i>{username}</i>.').format(username=GLib.markup_escape_text(username)))
- self.logoutButton.set_sensitive(False)
+ self._enableLogoutButton = False
elif logoutTime > 0:
self.lockLabel.set_markup(
_('This computer is currently locked by the user <i>{username}</i>.\nThe user can be logged out in {minutes:02}:{seconds:02} minutes.').format(
username=GLib.markup_escape_text(username), minutes=logoutTime//60, seconds=logoutTime%60))
- self.logoutButton.set_sensitive(False)
+ self._enableLogoutButton = False
else:
self.lockLabel.set_markup(
_('This computer is currently locked by the user <i>{username}</i>.\nThe user can be logged out now.').format(
username=GLib.markup_escape_text(username)))
- self.logoutButton.set_sensitive(True)
+ self._enableLogoutButton = True
+ self._update()
def setAuthMessage(self, message):
self.messageLabel.set_label(message)
@@ -92,4 +109,4 @@ class LockWindow(Gtk.Window):
self.unlockWindow.hide()
self.hide()
- self.reset()
+ self.reset(True)
diff --git a/Locker.py b/Locker.py
index 2af8f70..04edb13 100644
--- a/Locker.py
+++ b/Locker.py
@@ -50,3 +50,10 @@ class Locker(object):
self.locked = False
GLib.timeout_add_seconds(1, self._checkLock)
+
+ def _canLogout(self):
+ return (self.locked and self.doLogout is not None and self.currentLogoutTimeout <= 0)
+
+ def logout(self):
+ if self._canLogout():
+ self.doLogout()
diff --git a/pylock.py b/pylock.py
index 33c389f..cad52fc 100644
--- a/pylock.py
+++ b/pylock.py
@@ -46,7 +46,7 @@ def lock(timeLeft):
window.lock()
def logout():
- pass
+ exit()
def updateTimeout(timeLeft):
window.updateLockMessage(username, timeLeft)
@@ -64,6 +64,7 @@ def tryUnlock(w, password):
return True
+window.connect('logout', lambda w: locker.logout())
window.connect('tryUnlock', tryUnlock)
Gtk.main()