summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2023-06-08 12:39:52 +0200
committerFlorian Bruhin <me@the-compiler.org>2023-06-08 12:39:52 +0200
commitdfeebb3d248d10c0daf79b223a82ea3ab4993674 (patch)
tree1d67845463bff5a7affdb7d706db1d902c7700f5
parent37e1fff42f6a206f4faf0eaa704275369a844634 (diff)
downloadqutebrowser-dfeebb3d248d10c0daf79b223a82ea3ab4993674.tar.gz
qutebrowser-dfeebb3d248d10c0daf79b223a82ea3ab4993674.zip
nativeeventfilter: Improve error handling
-rw-r--r--qutebrowser/misc/nativeeventfilter.py35
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