diff options
author | Florian Bruhin <me@the-compiler.org> | 2023-06-08 12:39:52 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2023-06-08 12:39:52 +0200 |
commit | dfeebb3d248d10c0daf79b223a82ea3ab4993674 (patch) | |
tree | 1d67845463bff5a7affdb7d706db1d902c7700f5 | |
parent | 37e1fff42f6a206f4faf0eaa704275369a844634 (diff) | |
download | qutebrowser-dfeebb3d248d10c0daf79b223a82ea3ab4993674.tar.gz qutebrowser-dfeebb3d248d10c0daf79b223a82ea3ab4993674.zip |
nativeeventfilter: Improve error handling
-rw-r--r-- | qutebrowser/misc/nativeeventfilter.py | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/qutebrowser/misc/nativeeventfilter.py b/qutebrowser/misc/nativeeventfilter.py index 39de0534d..b35e902d2 100644 --- a/qutebrowser/misc/nativeeventfilter.py +++ b/qutebrowser/misc/nativeeventfilter.py @@ -25,6 +25,7 @@ This entire file is a giant WORKAROUND for https://bugreports.qt.io/browse/QTBUG from typing import Tuple import enum import ctypes +import ctypes.util from qutebrowser.qt.core import QAbstractNativeEventFilter, qVersion @@ -108,7 +109,9 @@ class NativeEventFilter(QAbstractNativeEventFilter): def __init__(self) -> None: super().__init__() - xcb = ctypes.cdll.LoadLibrary("libxcb.so.1") + self._active = False # Set to true when getting hierarchy event + + xcb = ctypes.CDLL(ctypes.util.find_library("xcb")) xcb.xcb_connect.restype = ctypes.POINTER(ctypes.c_void_p) xcb.xcb_query_extension_reply.restype = ctypes.POINTER( xcb_query_extension_reply_t @@ -116,22 +119,22 @@ class NativeEventFilter(QAbstractNativeEventFilter): conn = xcb.xcb_connect(None, None) assert conn - assert not xcb.xcb_connection_has_error(conn) - - # Get major opcode ID of Xinput extension - name = b"XInputExtension" - cookie = xcb.xcb_query_extension(conn, len(name), name) - reply = xcb.xcb_query_extension_reply(conn, cookie, None) - assert reply - if not reply.contents.present: - self.xinput_opcode = None - else: - self.xinput_opcode = reply.contents.major_opcode - - xcb.xcb_disconnect(conn) - - self._active = False # Set to true when getting hierarchy event + try: + assert not xcb.xcb_connection_has_error(conn) + + # Get major opcode ID of Xinput extension + name = b"XInputExtension" + cookie = xcb.xcb_query_extension(conn, len(name), name) + reply = xcb.xcb_query_extension_reply(conn, cookie, None) + assert reply + + if not reply.contents.present: + self.xinput_opcode = None + else: + self.xinput_opcode = reply.contents.major_opcode + finally: + xcb.xcb_disconnect(conn) def nativeEventFilter(self, evtype: bytes, message: int) -> Tuple[bool, int]: # We're only installed when the platform plugin is xcb |