diff options
author | Florian Bruhin <me@the-compiler.org> | 2023-06-08 11:44:01 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2023-06-08 11:44:01 +0200 |
commit | 27887e815760cd5447135df09ac43bcf915c957d (patch) | |
tree | 11a8818da9321ec3b0f1c5afafbde81b6c7474bc | |
parent | 30bfd90e59357aa6e4aee20f2e21d787eb4ee4b8 (diff) | |
download | qutebrowser-27887e815760cd5447135df09ac43bcf915c957d.tar.gz qutebrowser-27887e815760cd5447135df09ac43bcf915c957d.zip |
nativeeventfilter: Simplify
-rw-r--r-- | qutebrowser/misc/nativeeventfilter.py | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/qutebrowser/misc/nativeeventfilter.py b/qutebrowser/misc/nativeeventfilter.py index feb0f7301..46d8a5625 100644 --- a/qutebrowser/misc/nativeeventfilter.py +++ b/qutebrowser/misc/nativeeventfilter.py @@ -33,18 +33,12 @@ from qutebrowser.misc import objects _instance = None -class xcb_generic_event_t(ctypes.Structure): - """https://xcb.freedesktop.org/manual/structxcb__generic__event__t.html""" - _fields_ = [ - ("response_type", ctypes.c_uint8), - ("pad0", ctypes.c_uint8), - ("sequence", ctypes.c_uint16), - ("pad", ctypes.c_uint32 * 7), - ("full_sequence", ctypes.c_uint32), - ] - class xcb_ge_generic_event_t(ctypes.Structure): - """https://xcb.freedesktop.org/manual/structxcb__ge__generic__event__t.html""" + """See https://xcb.freedesktop.org/manual/structxcb__ge__generic__event__t.html. + + Also used for xcb_generic_event_t as the structures overlap: + https://xcb.freedesktop.org/manual/structxcb__generic__event__t.html + """ _fields_ = [ ("response_type", ctypes.c_uint8), ("extension", ctypes.c_uint8), @@ -67,7 +61,7 @@ _PROBLEMATIC_XINPUT_EVENTS = [ ] class xcb_query_extension_reply_t(ctypes.Structure): - """https://xcb.freedesktop.org/manual/structxcb__query__extension__reply__t.html""" + """https://xcb.freedesktop.org/manual/structxcb__query__extension__reply__t.html.""" _fields_ = [ ('response_type', ctypes.c_uint8), ('pad0', ctypes.c_uint8), @@ -106,17 +100,22 @@ class NativeEventFilter(QAbstractNativeEventFilter): xcb.xcb_disconnect(conn) def nativeEventFilter(self, evtype: bytes, message: int) -> Tuple[bool, int]: + # We're only installed when the platform plugin is xcb assert evtype == b'xcb_generic_event_t', evtype - event = ctypes.cast(int(message), ctypes.POINTER(xcb_generic_event_t)).contents - - if event.response_type == _XCB_GE_GENERIC: - event = ctypes.cast(int(message), ctypes.POINTER(xcb_ge_generic_event_t)).contents - if ( - event.extension == self.xinput_opcode and - event.event_type in _PROBLEMATIC_XINPUT_EVENTS - ): - print("Ignoring problematic XInput event", event.event_type) - return (True, 0) + + # We cast to xcb_ge_generic_event_t, which overlaps with xcb_generic_event_t. + # .extension and .event_type will only make sense if this is an + # XCB_GE_GENERIC event, but this is the first thing we check in the 'if' + # below anyways. + event = ctypes.cast(int(message), ctypes.POINTER(xcb_ge_generic_event_t)).contents + + if ( + event.response_type == _XCB_GE_GENERIC and + event.extension == self.xinput_opcode and + event.event_type in _PROBLEMATIC_XINPUT_EVENTS + ): + print("Ignoring problematic XInput event", event.event_type) + return (True, 0) return (False, 0) |