diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2013-01-28 14:31:07 +0100 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2013-01-28 14:31:07 +0100 |
commit | e342d5c7241cd04352948fb6937e05a98000b70c (patch) | |
tree | 4a8cdf8e6d4c8863026b310d8b6dda9188ba475c /LockWindow.py | |
parent | 76532c49651a372a25010bc7f7f8b60eeebefdfd (diff) | |
download | pylock-e342d5c7241cd04352948fb6937e05a98000b70c.tar pylock-e342d5c7241cd04352948fb6937e05a98000b70c.zip |
Handle failed device grabs and retry lock
Diffstat (limited to 'LockWindow.py')
-rw-r--r-- | LockWindow.py | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/LockWindow.py b/LockWindow.py index 97a8611..a3afcc9 100644 --- a/LockWindow.py +++ b/LockWindow.py @@ -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() - 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 not self.devicesGrabbed: + for device in self.deviceManager.list_devices(Gdk.DeviceType.MASTER): + 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) |