diff options
author | Florian Bruhin <me@the-compiler.org> | 2023-08-15 14:03:25 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2023-08-15 14:30:10 +0200 |
commit | f6d44b927aa97de472001e9699944d12dbee3345 (patch) | |
tree | 266efeb1f35995fdeec5143c3ae74e9cf177bbbe | |
parent | 0d2afd58f3d0e34af21cee7d8a3fc9d855594e9f (diff) | |
download | qutebrowser-f6d44b927aa97de472001e9699944d12dbee3345.tar.gz qutebrowser-f6d44b927aa97de472001e9699944d12dbee3345.zip |
First child widget keyboard focus workaround
Fixes #7820
-rw-r--r-- | qutebrowser/browser/eventfilter.py | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/qutebrowser/browser/eventfilter.py b/qutebrowser/browser/eventfilter.py index a9ddb93c2..b5659dba0 100644 --- a/qutebrowser/browser/eventfilter.py +++ b/qutebrowser/browser/eventfilter.py @@ -8,8 +8,9 @@ from qutebrowser.qt import machinery from qutebrowser.qt.core import QObject, QEvent, Qt, QTimer from qutebrowser.config import config -from qutebrowser.utils import log, message, usertypes, qtutils +from qutebrowser.utils import log, message, usertypes, qtutils, version, utils from qutebrowser.keyinput import modeman +from qutebrowser.misc import objects class ChildEventFilter(QObject): @@ -43,6 +44,21 @@ class ChildEventFilter(QObject): if self._widget is not None: assert obj is self._widget + # Carry on keyboard focus to the new child + # WORKAROUND for unknown Qt bug losing focus on child change + old_focus_widget = objects.qapp.focusWidget() + if old_focus_widget is not None: + metaobj = old_focus_widget.metaObject() + if ( + metaobj is not None and + metaobj.className() == "QQuickWidget" and + old_focus_widget.parent() is obj and + objects.backend == usertypes.Backend.QtWebEngine and + version.qtwebengine_versions().webengine >= utils.VersionNumber(6, 2) + ): + log.misc.debug("Focusing new child") + child.setFocus() + child.installEventFilter(self._filter) elif event.type() == QEvent.Type.ChildRemoved: child = event.child() |