Added logout function
This commit is contained in:
parent
9981f9f6a2
commit
fdce6479b9
3 changed files with 38 additions and 13 deletions
|
@ -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)
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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()
|
||||||
|
|
Reference in a new issue