diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index 47262bbaa7..78261d97fc 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -19,6 +19,7 @@ from qt.core import ( ) from threading import Lock, RLock +import calibre.gui2.pyqt6_compat as pqc from calibre import as_unicode, prints from calibre.constants import ( DEBUG, __appname__ as APP_UID, __version__, config_dir, filesystem_encoding, @@ -39,6 +40,7 @@ from calibre.utils.localization import get_lang from polyglot import queue from polyglot.builtins import iteritems, itervalues, string_or_bytes +del pqc try: NO_URL_FORMATTING = QUrl.UrlFormattingOption.None_ except AttributeError: diff --git a/src/calibre/gui2/gestures.py b/src/calibre/gui2/gestures.py index cf45d98bd3..135797eb55 100644 --- a/src/calibre/gui2/gestures.py +++ b/src/calibre/gui2/gestures.py @@ -5,8 +5,8 @@ import os from functools import lru_cache from qt.core import ( - QApplication, QEvent, QMouseEvent, QObject, QPointF, QScroller, Qt, QInputDevice, - pyqtSignal + QApplication, QEvent, QInputDevice, QMouseEvent, QObject, QPointF, + QPointingDevice, QScroller, Qt, pyqtSignal ) from calibre.utils.monotonic import monotonic @@ -174,7 +174,7 @@ class GestureManager(QObject): return etype = ev.type() if etype in (QEvent.Type.MouseButtonPress, QEvent.Type.MouseMove, QEvent.Type.MouseButtonRelease, QEvent.Type.MouseButtonDblClick): - if ev.source() in (Qt.MouseEventSource.MouseEventSynthesizedBySystem, Qt.MouseEventSource.MouseEventSynthesizedByQt): + if ev.pointingDevice().pointerType() is QPointingDevice.PointerType.Finger: # swallow fake mouse events generated from touch events ev.ignore() return False diff --git a/src/calibre/gui2/pyqt6_compat.py b/src/calibre/gui2/pyqt6_compat.py new file mode 100644 index 0000000000..3807d897c2 --- /dev/null +++ b/src/calibre/gui2/pyqt6_compat.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# vim:fileencoding=utf-8 +# License: GPL v3 Copyright: 2021, Kovid Goyal + +# Workaround a bunch of brain dead changes in PyQt6 that break backwards compat +# for no good reason. Since we have a huge body of poorly maintained third +# party plugin code, we NEED backward compat. + +from qt.core import QSinglePointEvent + + +# Restore removed functions from QMouseEvent +QSinglePointEvent.x = lambda self: int(self.position().x()) +QSinglePointEvent.y = lambda self: int(self.position().y()) +QSinglePointEvent.globalPos = lambda self: self.globalPosition.toPoint() +QSinglePointEvent.globalX = lambda self: self.globalPosition.toPoint().x() +QSinglePointEvent.globalY = lambda self: self.globalPosition.toPoint().y() +QSinglePointEvent.localPos = lambda self: self.position() +QSinglePointEvent.screenPos = lambda self: self.globalPosition() +QSinglePointEvent.windowPos = lambda self: self.scenePosition()