diff options
Diffstat (limited to 'qutebrowser/browser/eventfilter.py')
-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() |