|
@@ -157,7 +157,9 @@ class ExtendedControls:
|
|
|
while self.xdisplay.pending_events():
|
|
|
self._handle_xevent(self._xdisplay.next_event())
|
|
|
self._check_active_key_registry()
|
|
|
- x_wait_for_event(self.xdisplay, timeout_seconds=1)
|
|
|
+
|
|
|
+
|
|
|
+ x_wait_for_event(self.xdisplay, timeout_seconds=0.05)
|
|
|
|
|
|
def _handle_xevent(self, xevent):
|
|
|
if isinstance(xevent, Xlib.protocol.event.KeyPress) \
|
|
@@ -258,3 +260,18 @@ class ExtendedControls:
|
|
|
for keycode, press_event in self._active_key_registry.items():
|
|
|
if not (1 << (keycode & ((1 << 3) - 1))) & keymap[keycode >> 3]:
|
|
|
print("WARN missed release event of key {}".format(keycode))
|
|
|
+ missed_releases.append(Xlib.protocol.event.KeyRelease(
|
|
|
+ window=press_event.window,
|
|
|
+ detail=press_event.detail,
|
|
|
+ state=press_event.state,
|
|
|
+ root_x=press_event.root_x,
|
|
|
+ root_y=press_event.root_y,
|
|
|
+ event_x=press_event.event_x,
|
|
|
+ event_y=press_event.event_y,
|
|
|
+ child=press_event.child,
|
|
|
+ root=press_event.root,
|
|
|
+ time=X.CurrentTime,
|
|
|
+ same_screen=press_event.same_screen,
|
|
|
+ ))
|
|
|
+ for release_event in missed_releases:
|
|
|
+ self._handle_xkeyevent(release_event)
|