diff --git a/lib/pynput/_util/xorg.py b/lib/pynput/_util/xorg.py index 007f668..d5a7a06 100644 --- a/lib/pynput/_util/xorg.py +++ b/lib/pynput/_util/xorg.py @@ -467,7 +467,10 @@ def _handler(self, events): while data and len(data): event, data = self._EVENT_PARSER.parse_binary_value( data, self._display_record.display, None, None) - self._handle_message(self._display_stop, event) + + injected = event.send_event + self._handle(self._display_stop, event, injected) + self._handle_message(self._display_stop, event, injected) def _initialize(self, display): """Initialises this listener. @@ -479,7 +482,7 @@ def _initialize(self, display): """ pass - def _handle_message(self, display, event): + def _handle_message(self, display, event, injected): """The device specific callback handler. This method calls the appropriate callback registered when this @@ -488,5 +491,7 @@ def _handle_message(self, display, event): :param display: The display being used. :param event: The event. + + :param bool injected: Whether the event was injected. """ pass diff --git a/lib/pynput/keyboard/_xorg.py b/lib/pynput/keyboard/_xorg.py index 97b5743..7011a5a 100644 --- a/lib/pynput/keyboard/_xorg.py +++ b/lib/pynput/keyboard/_xorg.py @@ -566,7 +566,7 @@ def _initialize(self, display): self._keyboard_mapping = display.get_keyboard_mapping( min_keycode, keycode_count) - def _handle_message(self, display, event): + def _handle_message(self, display, event, injected): # Convert the event to a KeyCode; this may fail, and in that case we # pass None try: @@ -575,10 +575,10 @@ def _handle_message(self, display, event): key = None if event.type == Xlib.X.KeyPress: - self.on_press(key) + self.on_press(key, injected) elif event.type == Xlib.X.KeyRelease: - self.on_release(key) + self.on_release(key, injected) def _suppress_start(self, display): display.screen().root.grab_keyboard( @@ -596,7 +596,7 @@ def _on_fake_event(self, key, is_press): :param bool is_press: Whether this is a press event. """ (self.on_press if is_press else self.on_release)( - self._SPECIAL_KEYS.get(key.vk, key)) + self._SPECIAL_KEYS.get(key.vk, key), True) def _keycode_to_keysym(self, display, keycode, index): """Converts a keycode and shift state index to a keysym. diff --git a/lib/pynput/mouse/_xorg.py b/lib/pynput/mouse/_xorg.py index 5a5f92c..93b0a98 100644 --- a/lib/pynput/mouse/_xorg.py +++ b/lib/pynput/mouse/_xorg.py @@ -134,7 +134,7 @@ class Listener(ListenerMixin, _base.Listener): def __init__(self, *args, **kwargs): super(Listener, self).__init__(*args, **kwargs) - def _handle_message(self, dummy_display, event): + def _handle_message(self, dummy_display, event, injected): px = event.root_x py = event.root_y @@ -143,17 +143,20 @@ def _handle_message(self, dummy_display, event): # button codes scroll = self._SCROLL_BUTTONS.get(event.detail, None) if scroll: - self.on_scroll(px, py, *scroll) + self.on_scroll( + px, py, scroll[0], scroll[1], injected) else: - self.on_click(px, py, self._button(event.detail), True) + self.on_click( + px, py, self._button(event.detail), True, injected) elif event.type == Xlib.X.ButtonRelease: # Send an event only if this was not a scroll event if event.detail not in self._SCROLL_BUTTONS: - self.on_click(px, py, self._button(event.detail), False) + self.on_click( + px, py, self._button(event.detail), False, injected) else: - self.on_move(px, py) + self.on_move(px, py, injected) def _suppress_start(self, display):