From 7e3df43463d16815e8d29fee1b11489de688dee9 Mon Sep 17 00:00:00 2001 From: Florian Bruhin Date: Sun, 4 Jan 2026 22:24:28 +0100 Subject: [PATCH] Disable child focus workaround on unaffected Qt versions The workaround added for #7820 seems to cause datalist dropdowns to lose focus on Wayland. Let's just disable the old workaround on Qt versions that are not affected by the original issue, which seems to be Qt 6.6.3+. Fixes #8831. --- doc/changelog.asciidoc | 11 +++++++++++ qutebrowser/browser/eventfilter.py | 8 ++++---- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc index faa04b7ba..bdc7529a3 100644 --- a/doc/changelog.asciidoc +++ b/doc/changelog.asciidoc @@ -15,6 +15,17 @@ breaking changes (such as renamed commands) can happen in minor releases. // `Fixed` for any bug fixes. // `Security` to invite users to upgrade in case of vulnerabilities. +[[v3.6.4]] +v3.6.4 (unreleased) +------------------- + +Fixed +~~~~~ + +- datalist dropdowns not opening correctly on Wayland/Sway (#8831). + This was caused by an old workaround for a different QtWebEngine issue, + which is now disabled for QtWebEngine 6.6.3 and newer. + [[v3.6.3]] v3.6.3 (2025-11-30) ------------------- diff --git a/qutebrowser/browser/eventfilter.py b/qutebrowser/browser/eventfilter.py index 2e6cc3a2c..db01e8613 100644 --- a/qutebrowser/browser/eventfilter.py +++ b/qutebrowser/browser/eventfilter.py @@ -10,7 +10,7 @@ from qutebrowser.qt.gui import QKeyEvent from qutebrowser.qt.widgets import QWidget 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, keyutils @@ -55,16 +55,16 @@ class ChildEventFilter(QObject): # - This is a child event filter on a tab (self._widget is not None) # - We find an old existing child which is a QQuickWidget and is # currently focused. - # - We're using QtWebEngine >= 6.4 (older versions are not affected) + # - We're using an affected QtWebEngine version children = [ c for c in self._widget.findChildren( QWidget, "", Qt.FindChildOption.FindDirectChildrenOnly) if c is not child and c.hasFocus() and c.metaObject() is not None and - c.metaObject().className() == "QQuickWidget" + c.metaObject().className() == "QQuickWidget" # Qt 6.4+ ] - if children: + if children and version.qtwebengine_versions().webengine < utils.VersionNumber(6, 6, 3): log.misc.debug("Focusing new child") child.setFocus()