From ba694fe0010f17249f36f64da185926bcb23f204 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Thu, 29 Jun 2023 17:12:26 +0200 Subject: qt6 mypy: Fix qt5 mypy regressions --- qutebrowser/browser/browsertab.py | 7 ++++++- qutebrowser/keyinput/eventfilter.py | 15 +++++++++------ qutebrowser/keyinput/modeman.py | 7 ++++++- qutebrowser/misc/nativeeventfilter.py | 14 ++++++++++---- 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/qutebrowser/browser/browsertab.py b/qutebrowser/browser/browsertab.py index 27b696e37..eae58f7ed 100644 --- a/qutebrowser/browser/browsertab.py +++ b/qutebrowser/browser/browsertab.py @@ -27,6 +27,7 @@ import dataclasses from typing import (cast, TYPE_CHECKING, Any, Callable, Iterable, List, Optional, Sequence, Set, Type, Union, Tuple) +from qutebrowser.qt import machinery from qutebrowser.qt.core import (pyqtSignal, pyqtSlot, QUrl, QObject, QSizeF, Qt, QEvent, QPoint, QRect) from qutebrowser.qt.gui import QKeyEvent, QIcon, QPixmap @@ -1322,7 +1323,11 @@ class AbstractTab(QWidget): if pic.isNull(): return None - return cast(QPixmap, pic) # FIXME:v4 cast needed for QtWebKit + if machinery.IS_QT6: + # FIXME:v4 cast needed for QtWebKit + pic = cast(QPixmap, pic) + + return pic def __repr__(self) -> str: try: diff --git a/qutebrowser/keyinput/eventfilter.py b/qutebrowser/keyinput/eventfilter.py index a808c4dd8..b0b3ae188 100644 --- a/qutebrowser/keyinput/eventfilter.py +++ b/qutebrowser/keyinput/eventfilter.py @@ -21,6 +21,7 @@ from typing import cast +from qutebrowser.qt import machinery from qutebrowser.qt.core import pyqtSlot, QObject, QEvent from qutebrowser.qt.gui import QKeyEvent, QWindow @@ -87,29 +88,31 @@ class EventFilter(QObject): Return: True if the event should be filtered, False if it's passed through. """ + ev_type = event.type() + if machinery.IS_QT6: + ev_type = cast(QEvent.Type, ev_type) + if self._log_qt_events: try: source = repr(obj) except AttributeError: # might not be fully initialized yet source = type(obj).__name__ - evtype = debug.qenum_key(QEvent, cast(QEvent.Type, event.type())) - log.misc.debug(f"{source} got event: {evtype}") + ev_type_str = debug.qenum_key(QEvent, ev_type) + log.misc.debug(f"{source} got event: {ev_type_str}") if not isinstance(obj, QWindow): # We already handled this same event at some point earlier, so # we're not interested in it anymore. return False - typ = cast(QEvent.Type, event.type()) - - if typ not in self._handlers: + if ev_type not in self._handlers: return False if not self._activated: return False - handler = self._handlers[typ] + handler = self._handlers[ev_type] try: return handler(cast(QKeyEvent, event)) except: diff --git a/qutebrowser/keyinput/modeman.py b/qutebrowser/keyinput/modeman.py index 927c93512..dd849ebb6 100644 --- a/qutebrowser/keyinput/modeman.py +++ b/qutebrowser/keyinput/modeman.py @@ -23,6 +23,7 @@ import functools import dataclasses from typing import Mapping, Callable, MutableMapping, Union, Set, cast +from qutebrowser.qt import machinery from qutebrowser.qt.core import pyqtSlot, pyqtSignal, Qt, QObject, QEvent from qutebrowser.qt.gui import QKeyEvent, QKeySequence @@ -467,7 +468,11 @@ class ModeManager(QObject): QEvent.Type.ShortcutOverride: functools.partial(self._handle_keypress, dry_run=True), } - handler = handlers[cast(QEvent.Type, event.type())] + ev_type = event.type() + if machinery.IS_QT6: + ev_type = cast(QEvent.Type, ev_type) + + handler = handlers[ev_type] return handler(cast(QKeyEvent, event)) @cmdutils.register(instance='mode-manager', scope='window') diff --git a/qutebrowser/misc/nativeeventfilter.py b/qutebrowser/misc/nativeeventfilter.py index 3bb9d4bbb..dad22ef7d 100644 --- a/qutebrowser/misc/nativeeventfilter.py +++ b/qutebrowser/misc/nativeeventfilter.py @@ -27,7 +27,7 @@ import enum import ctypes import ctypes.util -from qutebrowser.qt import sip +from qutebrowser.qt import sip, machinery from qutebrowser.qt.core import QAbstractNativeEventFilter, QByteArray, qVersion from qutebrowser.misc import objects @@ -105,6 +105,12 @@ class xcb_query_extension_reply_t(ctypes.Structure): # noqa: N801 # pylint: enable=invalid-name +if machinery.IS_QT6: + _POINTER_RET_T = sip.voidptr +else: + _POINTER_RET_T = int + + class NativeEventFilter(QAbstractNativeEventFilter): """Event filter for XCB messages to work around Qt 6.5.1 crash.""" @@ -113,8 +119,8 @@ class NativeEventFilter(QAbstractNativeEventFilter): # # Tuple because PyQt uses the second value as the *result out-pointer, which # according to the Qt documentation is only used on Windows. - _PASS_EVENT_RET = (False, cast(sip.voidptr, 0)) - _FILTER_EVENT_RET = (True, cast(sip.voidptr, 0)) + _PASS_EVENT_RET = (False, cast(_POINTER_RET_T, 0)) + _FILTER_EVENT_RET = (True, cast(_POINTER_RET_T, 0)) def __init__(self) -> None: super().__init__() @@ -147,7 +153,7 @@ class NativeEventFilter(QAbstractNativeEventFilter): def nativeEventFilter( self, evtype: Union[bytes, QByteArray], message: sip.voidptr - ) -> Tuple[bool, sip.voidptr]: + ) -> Tuple[bool, _POINTER_RET_T]: """Handle XCB events.""" # We're only installed when the platform plugin is xcb assert evtype == b"xcb_generic_event_t", evtype -- cgit v1.2.3-54-g00ecf