Handle failed device grabs and retry lock
This commit is contained in:
parent
76532c4965
commit
e342d5c724
3 changed files with 21 additions and 4 deletions
|
@ -42,6 +42,7 @@ class LockWindow(Gtk.Window):
|
|||
|
||||
self.display = Gdk.Display.get_default()
|
||||
self.screen = self.display.get_default_screen()
|
||||
self.devicesGrabbed = False
|
||||
|
||||
self.overlay = Gtk.Overlay()
|
||||
self.add(self.overlay)
|
||||
|
@ -135,22 +136,33 @@ class LockWindow(Gtk.Window):
|
|||
def _grabDevices(self, w, e):
|
||||
self.promptEntry.grab_focus()
|
||||
|
||||
if not self.devicesGrabbed:
|
||||
for device in self.deviceManager.list_devices(Gdk.DeviceType.MASTER):
|
||||
device.grab(self.get_window(), Gdk.GrabOwnership.APPLICATION, True, Gdk.EventMask.ALL_EVENTS_MASK, None, Gdk.CURRENT_TIME)
|
||||
if device.grab(self.get_window(), Gdk.GrabOwnership.APPLICATION, True, Gdk.EventMask.ALL_EVENTS_MASK, None, Gdk.CURRENT_TIME) != Gdk.GrabStatus.SUCCESS:
|
||||
self._ungrabDevices()
|
||||
self.get_window().lower()
|
||||
return False
|
||||
|
||||
self.present()
|
||||
|
||||
self.devicesGrabbed = True
|
||||
|
||||
return False
|
||||
|
||||
def _ungrabDevices(self):
|
||||
for device in self.deviceManager.list_devices(Gdk.DeviceType.MASTER):
|
||||
device.ungrab(Gdk.CURRENT_TIME)
|
||||
self.devicesGrabbed = False
|
||||
|
||||
def lock(self):
|
||||
self.show_all()
|
||||
self.display.sync()
|
||||
self._grabDevices(self, None)
|
||||
return self.devicesGrabbed
|
||||
|
||||
def unlock(self):
|
||||
self._ungrabDevices()
|
||||
|
||||
self.hide()
|
||||
|
||||
self.reset(False, True)
|
||||
|
|
|
@ -66,7 +66,10 @@ class Locker(object):
|
|||
def lock(self):
|
||||
if not self.locked:
|
||||
self.locked = True
|
||||
self.doLock(self.logoutTimeout)
|
||||
if not self.doLock(self.logoutTimeout):
|
||||
self.locked = False
|
||||
GLib.timeout_add_seconds(1, self._checkLock)
|
||||
return False
|
||||
|
||||
if self.doLogout is not None:
|
||||
self.currentLogoutTimeout = self.logoutTimeout
|
||||
|
@ -74,6 +77,8 @@ class Locker(object):
|
|||
if self.currentLogoutTimeout > 0:
|
||||
GLib.timeout_add_seconds(1, self._checkLogout)
|
||||
|
||||
return True
|
||||
|
||||
def unlock(self):
|
||||
if self.locked:
|
||||
self.doUnlock()
|
||||
|
|
|
@ -91,7 +91,7 @@ if not Message.acquireSelection(window):
|
|||
|
||||
def lock(timeLeft):
|
||||
window.updateLockMessage(args.username, timeLeft)
|
||||
window.lock()
|
||||
return window.lock()
|
||||
|
||||
def logout():
|
||||
try:
|
||||
|
|
Reference in a new issue