summaryrefslogtreecommitdiffstats
path: root/LockWindow.py
diff options
context:
space:
mode:
Diffstat (limited to 'LockWindow.py')
-rw-r--r--LockWindow.py69
1 files changed, 69 insertions, 0 deletions
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()