From f6d44b927aa97de472001e9699944d12dbee3345 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Tue, 15 Aug 2023 14:03:25 +0200 Subject: First child widget keyboard focus workaround Fixes #7820 --- qutebrowser/browser/eventfilter.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) 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() -- cgit v1.2.3-54-g00ecf