diff --git a/.github/workflows/bleeding.yml b/.github/workflows/bleeding.yml index 227ee16cd..29441f3a7 100644 --- a/.github/workflows/bleeding.yml +++ b/.github/workflows/bleeding.yml @@ -48,7 +48,7 @@ jobs: shell: bash if: failure() - name: Upload screenshots - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: "end2end-screenshots-${{ steps.info.outputs.date }}-${{ steps.info.outputs.sha_short }}-${{ matrix.image }}" path: | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f100d9a4b..9d65407b9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,7 +37,7 @@ jobs: - uses: actions/checkout@v6 with: persist-credentials: false - - uses: actions/cache@v4 + - uses: actions/cache@v5 with: path: | .mypy_cache @@ -121,7 +121,7 @@ jobs: shell: bash if: failure() - name: Upload screenshots - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: "end2end-screenshots-${{ steps.info.outputs.date }}-${{ steps.info.outputs.sha_short }}-${{ matrix.image }}" path: | @@ -220,7 +220,7 @@ jobs: - uses: actions/checkout@v6 with: persist-credentials: false - - uses: actions/cache@v4 + - uses: actions/cache@v5 with: path: | .mypy_cache @@ -269,7 +269,7 @@ jobs: shell: bash if: failure() - name: Upload screenshots - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: "end2end-screenshots-${{ steps.info.outputs.date }}-${{ steps.info.outputs.sha_short }}-${{ matrix.testenv }}-${{ matrix.os }}" path: | diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 8f42d42ee..9981a1e6d 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -72,7 +72,7 @@ jobs: echo "sha_short=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT" shell: bash - name: Upload artifacts - uses: actions/upload-artifact@v5 + uses: actions/upload-artifact@v6 with: name: "qutebrowser-nightly-${{ steps.info.outputs.date }}-${{ steps.info.outputs.sha_short }}-${{ matrix.name }}" path: | diff --git a/.github/workflows/recompile-requirements.yml b/.github/workflows/recompile-requirements.yml index 07f11428e..9e3e44cb6 100644 --- a/.github/workflows/recompile-requirements.yml +++ b/.github/workflows/recompile-requirements.yml @@ -41,7 +41,7 @@ jobs: - name: Run qutebrowser smoke test run: "xvfb-run .venv/bin/python3 -m qutebrowser --no-err-windows --nowindow --temp-basedir about:blank ':later 500 quit'" - name: Create pull request - uses: peter-evans/create-pull-request@v7 + uses: peter-evans/create-pull-request@v8 with: committer: qutebrowser bot author: qutebrowser bot 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/misc/requirements/requirements-dev.txt b/misc/requirements/requirements-dev.txt index cd9ea4668..33b28204c 100644 --- a/misc/requirements/requirements-dev.txt +++ b/misc/requirements/requirements-dev.txt @@ -1,12 +1,12 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py annotated-types==0.7.0 -anyio==4.11.0 +anyio==4.12.0 autocommand==2.2.2 backports.tarfile==1.2.0 bracex==2.6 build==1.3.0 -bump-my-version==1.2.4 +bump-my-version==1.2.5 certifi==2025.11.12 cffi==2.0.0 charset-normalizer==3.4.4 @@ -47,7 +47,7 @@ Pygments==2.19.2 PyJWT==2.10.1 Pympler==1.1 pyproject_hooks==1.2.0 -PyQt-builder==1.19.0 +PyQt-builder==1.19.1 python-dateutil==2.9.0.post0 python-dotenv==1.2.1 questionary==2.1.1 @@ -60,7 +60,6 @@ rich-click==1.9.4 SecretStorage==3.3.3 sip==6.14.0 six==1.17.0 -sniffio==1.3.1 tomli==2.3.0 tomlkit==0.13.3 twine==6.2.0 @@ -68,7 +67,7 @@ typeguard==4.3.0 typing-inspection==0.4.2 typing_extensions==4.15.0 uritemplate==4.2.0 -# urllib3==2.5.0 +# urllib3==2.6.2 wcmatch==10.1 wcwidth==0.2.14 zipp==3.23.0 diff --git a/misc/requirements/requirements-mypy.txt b/misc/requirements/requirements-mypy.txt index 3b75558bd..32e42a231 100644 --- a/misc/requirements/requirements-mypy.txt +++ b/misc/requirements/requirements-mypy.txt @@ -1,11 +1,12 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py chardet==5.2.0 -diff_cover==9.7.2 +diff_cover==10.0.0 Jinja2==3.1.6 +librt==0.7.3 lxml==6.0.2 MarkupSafe==3.0.3 -mypy==1.18.2 +mypy==1.19.0 mypy_extensions==1.1.0 pathspec==0.12.1 pluggy==1.6.0 diff --git a/misc/requirements/requirements-pylint.txt b/misc/requirements/requirements-pylint.txt index f59cc3538..432386f55 100644 --- a/misc/requirements/requirements-pylint.txt +++ b/misc/requirements/requirements-pylint.txt @@ -24,5 +24,5 @@ tomli==2.3.0 tomlkit==0.13.3 typing_extensions==4.15.0 uritemplate==4.2.0 -# urllib3==2.5.0 +# urllib3==2.6.2 zipp==3.23.0 diff --git a/misc/requirements/requirements-pyqt-6.10.txt b/misc/requirements/requirements-pyqt-6.10.txt index 802128a67..a37b3b68a 100644 --- a/misc/requirements/requirements-pyqt-6.10.txt +++ b/misc/requirements/requirements-pyqt-6.10.txt @@ -1,6 +1,6 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -PyQt6==6.10.0 +PyQt6==6.10.1 PyQt6-Qt6==6.10.1 PyQt6-WebEngine==6.10.0 PyQt6-WebEngine-Qt6==6.10.1 diff --git a/misc/requirements/requirements-pyqt-6.txt b/misc/requirements/requirements-pyqt-6.txt index 802128a67..a37b3b68a 100644 --- a/misc/requirements/requirements-pyqt-6.txt +++ b/misc/requirements/requirements-pyqt-6.txt @@ -1,6 +1,6 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -PyQt6==6.10.0 +PyQt6==6.10.1 PyQt6-Qt6==6.10.1 PyQt6-WebEngine==6.10.0 PyQt6-WebEngine-Qt6==6.10.1 diff --git a/misc/requirements/requirements-pyqt.txt b/misc/requirements/requirements-pyqt.txt index 802128a67..a37b3b68a 100644 --- a/misc/requirements/requirements-pyqt.txt +++ b/misc/requirements/requirements-pyqt.txt @@ -1,6 +1,6 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -PyQt6==6.10.0 +PyQt6==6.10.1 PyQt6-Qt6==6.10.1 PyQt6-WebEngine==6.10.0 PyQt6-WebEngine-Qt6==6.10.1 diff --git a/misc/requirements/requirements-pyroma.txt b/misc/requirements/requirements-pyroma.txt index b844c39cd..3558f0a69 100644 --- a/misc/requirements/requirements-pyroma.txt +++ b/misc/requirements/requirements-pyroma.txt @@ -10,9 +10,9 @@ importlib_metadata==8.7.0 packaging==25.0 Pygments==2.19.2 pyproject_hooks==1.2.0 -pyroma==5.0 +pyroma==5.0.1 requests==2.32.5 tomli==2.3.0 -trove-classifiers==2025.11.14.15 -urllib3==2.5.0 +trove-classifiers==2025.12.1.14 +urllib3==2.6.2 zipp==3.23.0 diff --git a/misc/requirements/requirements-sphinx.txt b/misc/requirements/requirements-sphinx.txt index 42660ab5e..e5ff746d1 100644 --- a/misc/requirements/requirements-sphinx.txt +++ b/misc/requirements/requirements-sphinx.txt @@ -22,5 +22,5 @@ sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==2.0.0 sphinxcontrib-serializinghtml==2.0.0 tomli==2.3.0 -urllib3==2.5.0 +urllib3==2.6.2 zipp==3.23.0 diff --git a/misc/requirements/requirements-tests.txt b/misc/requirements/requirements-tests.txt index 0b69c7e36..30bd927fa 100644 --- a/misc/requirements/requirements-tests.txt +++ b/misc/requirements/requirements-tests.txt @@ -3,7 +3,7 @@ attrs==25.4.0 autocommand==2.2.2 backports.tarfile==1.2.0 -beautifulsoup4==4.14.2 +beautifulsoup4==4.14.3 blinker==1.9.0 certifi==2025.11.12 charset-normalizer==3.4.4 @@ -61,7 +61,7 @@ tldextract==5.3.0 tomli==2.3.0 typeguard==4.3.0 typing_extensions==4.15.0 -urllib3==2.5.0 +urllib3==2.6.2 vulture==2.14 -Werkzeug==3.1.3 +Werkzeug==3.1.4 zipp==3.23.0 diff --git a/misc/requirements/requirements-tox.txt b/misc/requirements/requirements-tox.txt index 929fe4135..3256e0af4 100644 --- a/misc/requirements/requirements-tox.txt +++ b/misc/requirements/requirements-tox.txt @@ -1,6 +1,6 @@ # This file is automatically generated by scripts/dev/recompile_requirements.py -cachetools==6.2.2 +cachetools==6.2.3 chardet==5.2.0 colorama==0.4.6 distlib==0.4.0 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() diff --git a/qutebrowser/misc/earlyinit.py b/qutebrowser/misc/earlyinit.py index 60d2c7c09..d1f1669a8 100644 --- a/qutebrowser/misc/earlyinit.py +++ b/qutebrowser/misc/earlyinit.py @@ -23,6 +23,7 @@ import datetime from typing import NoReturn try: import tkinter + import tkinter.messagebox except ImportError: tkinter = None # type: ignore[assignment] diff --git a/qutebrowser/utils/version.py b/qutebrowser/utils/version.py index 0d0598ca5..2eb67838a 100644 --- a/qutebrowser/utils/version.py +++ b/qutebrowser/utils/version.py @@ -654,6 +654,7 @@ class WebEngineVersions: utils.VersionNumber(6, 9): (_BASES[130], '133.0.6943.141'), # 2025-02-25 utils.VersionNumber(6, 9, 1): (_BASES[130], '136.0.7103.114'), # 2025-05-13 utils.VersionNumber(6, 9, 2): (_BASES[130], '139.0.7258.67'), # 2025-07-29 + utils.VersionNumber(6, 9, 3): (_BASES[130], '140.0.7339.207'), # 2025-09-22 ## Qt 6.10 utils.VersionNumber(6, 10): (_BASES[134], '140.0.7339.207'), # 2025-09-22 diff --git a/scripts/dev/changelog_urls.json b/scripts/dev/changelog_urls.json index 7c1ba32d9..0b49ada48 100644 --- a/scripts/dev/changelog_urls.json +++ b/scripts/dev/changelog_urls.json @@ -23,6 +23,7 @@ "Mako": "https://docs.makotemplates.org/en/latest/changelog.html", "hypothesis": "https://hypothesis.readthedocs.io/en/latest/changes.html", "mypy": "https://github.com/python/mypy/blob/master/CHANGELOG.md", + "librt": "https://github.com/mypyc/librt/commits/master/", "types-PyYAML": "https://github.com/python/typeshed/commits/main/stubs/PyYAML", "types-colorama": "https://github.com/python/typeshed/commits/main/stubs/colorama", "types-docutils": "https://github.com/python/typeshed/commits/main/stubs/docutils", @@ -101,7 +102,6 @@ "h11": "https://h11.readthedocs.io/en/latest/changes.html", "httpcore": "https://github.com/encode/httpcore/blob/master/CHANGELOG.md", "httpx": "https://github.com/encode/httpx/blob/master/CHANGELOG.md", - "sniffio": "https://sniffio.readthedocs.io/en/latest/history.html", "six": "https://github.com/benjaminp/six/blob/master/CHANGES", "altgraph": "https://github.com/ronaldoussoren/altgraph/blob/master/doc/changelog.rst", "urllib3": "https://github.com/urllib3/urllib3/blob/main/CHANGES.rst",