From 2ea569c7ed70a40cccaaf32b3f8ea2e7127ac062 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Fri, 27 Jan 2012 15:44:45 +0100 Subject: Initial commit --- LockWindow.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 LockWindow.py (limited to 'LockWindow.py') diff --git a/LockWindow.py b/LockWindow.py new file mode 100644 index 0000000..98b8e86 --- /dev/null +++ b/LockWindow.py @@ -0,0 +1,69 @@ +import sys + +from gi.repository import Gtk, Gdk, GObject, GLib + + +class LockWindow(Gtk.Window): + __gsignals__ = { + 'tryUnlock': (GObject.SIGNAL_RUN_FIRST, None, (str,)) + } + + def __init__(self): + Gtk.Window.__init__(self) + + bg = Gtk.Image.new_from_file("bg.svg") + self.add(bg) + + self.set_decorated(False) + self.set_skip_taskbar_hint(True) + self.set_skip_pager_hint(True) + self.set_keep_above(True) + self.fullscreen() + + builder = Gtk.Builder() + + if not builder.add_from_file("unlock.ui"): + sys.exit(1) + + self.unlockWindow = builder.get_object('unlock_window') + self.promptEntry = builder.get_object('prompt_entry') + self.messageLabel = builder.get_object('message_label') + self.logoutButton = builder.get_object('logout_button') + self.unlockButton = builder.get_object('unlock_button') + + self.unlockWindow.set_position(Gtk.WindowPosition.CENTER_ALWAYS) + self.unlockWindow.set_transient_for(self) + self.unlockWindow.set_modal(True) + + self.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.unlockButton.connect('clicked', lambda w: self._tryUnlock()) + + self.reset() + + def _tryUnlock(self): + self.promptEntry.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() + self.messageLabel.set_label('') + + def setMessage(self, message): + self.messageLabel.set_label(message) + + def lock(self): + self.show_all() + self.unlockWindow.show_all() + + self.promptEntry.grab_focus() + + def unlock(self): + self.unlockWindow.hide() + self.hide() + + self.reset() -- cgit v1.2.3