70 lines
2 KiB
Python
70 lines
2 KiB
Python
|
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()
|