Added logout function

This commit is contained in:
Matthias Schiffer 2012-02-02 14:55:11 +01:00
parent 9981f9f6a2
commit fdce6479b9
3 changed files with 38 additions and 13 deletions

View file

@ -9,6 +9,7 @@ _ = locale.gettext
class LockWindow(Gtk.Window): class LockWindow(Gtk.Window):
__gsignals__ = { __gsignals__ = {
'logout': (GObject.SIGNAL_RUN_FIRST, None, ()),
'tryUnlock': (GObject.SIGNAL_RUN_FIRST, None, (str,)) '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.unlockWindow.connect('delete-event', lambda w, e: True)
self.promptEntry.connect('activate', lambda w: self._tryUnlock()) 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.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): def _tryUnlock(self):
self.promptEntry.set_sensitive(False) self.promptEntry.set_sensitive(False)
self.unlockButton.set_sensitive(False) self.unlockButton.set_sensitive(False)
self.logoutButton.set_sensitive(False)
GLib.idle_add(lambda: self.emit('tryUnlock', self.promptEntry.get_text())) GLib.idle_add(lambda: self.emit('tryUnlock', self.promptEntry.get_text()))
def reset(self): def _update(self):
self.promptEntry.set_sensitive(self._enablePromptEntry)
self.logoutButton.set_sensitive(self._enableLogoutButton)
self.unlockButton.set_sensitive(self._enableUnlockButton)
def reset(self, resetButtons = False):
if resetButtons:
self._enablePromptEntry = True
self._enableLogoutButton = False
self._enableUnlockButton = True
self.promptEntry.set_text('') self.promptEntry.set_text('')
self.promptEntry.set_sensitive(True) self.messageLabel.set_label('')
self._update()
self.promptEntry.grab_focus() self.promptEntry.grab_focus()
self.unlockButton.set_sensitive(True)
self.messageLabel.set_label('')
self.logoutButton.set_sensitive(False)
def updateLockMessage(self, username, logoutTime = None): def updateLockMessage(self, username, logoutTime = None):
if logoutTime is 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.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: elif logoutTime > 0:
self.lockLabel.set_markup( 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( _('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)) username=GLib.markup_escape_text(username), minutes=logoutTime//60, seconds=logoutTime%60))
self.logoutButton.set_sensitive(False) self._enableLogoutButton = False
else: else:
self.lockLabel.set_markup( self.lockLabel.set_markup(
_('This computer is currently locked by the user <i>{username}</i>.\nThe user can be logged out now.').format( _('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))) username=GLib.markup_escape_text(username)))
self.logoutButton.set_sensitive(True) self._enableLogoutButton = True
self._update()
def setAuthMessage(self, message): def setAuthMessage(self, message):
self.messageLabel.set_label(message) self.messageLabel.set_label(message)
@ -92,4 +109,4 @@ class LockWindow(Gtk.Window):
self.unlockWindow.hide() self.unlockWindow.hide()
self.hide() self.hide()
self.reset() self.reset(True)

View file

@ -50,3 +50,10 @@ class Locker(object):
self.locked = False self.locked = False
GLib.timeout_add_seconds(1, self._checkLock) 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()

View file

@ -46,7 +46,7 @@ def lock(timeLeft):
window.lock() window.lock()
def logout(): def logout():
pass exit()
def updateTimeout(timeLeft): def updateTimeout(timeLeft):
window.updateLockMessage(username, timeLeft) window.updateLockMessage(username, timeLeft)
@ -64,6 +64,7 @@ def tryUnlock(w, password):
return True return True
window.connect('logout', lambda w: locker.logout())
window.connect('tryUnlock', tryUnlock) window.connect('tryUnlock', tryUnlock)
Gtk.main() Gtk.main()