From d9c299e23edb7b336ec2f3264dd831a4e6eb3482 Mon Sep 17 00:00:00 2001 From: Ted Morse Date: Sat, 28 Nov 2020 21:27:11 -0800 Subject: Use blink-setting for colorscheme on Qt 5.15+ On Qt 5.15+, `--force-dark-mode` does not set the preferred colorscheme. A blink-setting is used instead to set the preferred colorscheme. The `--force-dark-mode` flag is only set for Qt 5.14. All later versions will use the blink-setting flag. (cherry picked from commit 314c81b24eb9f9457ccdb5c682d718cf24f24a76) # Conflicts: # qutebrowser/browser/webengine/darkmode.py # tests/unit/browser/webengine/test_darkmode.py --- qutebrowser/config/qtargs.py | 14 ++++++++++++-- tests/helpers/utils.py | 3 +++ tests/unit/config/test_qtargs.py | 30 +++++++++++++++++++++--------- 3 files changed, 36 insertions(+), 11 deletions(-) diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py index fbb9fe908..b42484a08 100644 --- a/qutebrowser/config/qtargs.py +++ b/qutebrowser/config/qtargs.py @@ -79,6 +79,10 @@ def _darkmode_prefix() -> str: def _darkmode_settings() -> typing.Iterator[typing.Tuple[str, str]]: """Get necessary blink settings to configure dark mode for QtWebEngine.""" + if (qtutils.version_check('5.15', compiled=False) and + config.val.colors.webpage.prefers_color_scheme_dark): + yield "preferredColorScheme", "1" + if not config.val.colors.webpage.darkmode.enabled: return @@ -330,12 +334,18 @@ def _qtwebengine_settings_args() -> typing.Iterator[str]: False: '--autoplay-policy=user-gesture-required', } - referrer_setting = settings['content.headers.referer'] - if qtutils.version_check('5.14', compiled=False): + if (qtutils.version_check('5.14', compiled=False) and + not qtutils.version_check('5.15', compiled=False)): + # In Qt 5.14, `--force-dark-mode` is used to set the preferred + # colorscheme. In Qt 5.15, this is handled by a blink-setting + # instead. settings['colors.webpage.prefers_color_scheme_dark'] = { True: '--force-dark-mode', False: None, } + + referrer_setting = settings['content.headers.referer'] + if qtutils.version_check('5.14', compiled=False): # Starting with Qt 5.14, this is handled via --enable-features referrer_setting['same-domain'] = None else: diff --git a/tests/helpers/utils.py b/tests/helpers/utils.py index 46787391d..64779dfc6 100644 --- a/tests/helpers/utils.py +++ b/tests/helpers/utils.py @@ -52,6 +52,9 @@ qt514 = pytest.mark.skipif( skip_qt511 = pytest.mark.skipif( qtutils.version_check('5.11'), reason="Needs Qt 5.10 or earlier") +qt515 = pytest.mark.skipif( + not qtutils.version_check('5.15'), reason="Needs Qt 5.15 or newer") + class PartialCompareOutcome: diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py index 69aef8b97..644765a58 100644 --- a/tests/unit/config/test_qtargs.py +++ b/tests/unit/config/test_qtargs.py @@ -317,20 +317,20 @@ class TestQtArgs: else: assert arg in args - @pytest.mark.parametrize('dark, new_qt, added', [ - (True, True, True), - (True, False, False), - (False, True, False), - (False, False, False), + @pytest.mark.parametrize('dark, qt_version, added', [ + (True, "5.13", False), + (True, "5.14", True), + (True, "5.15", False), + (False, "5.13", False), + (False, "5.14", False), + (False, "5.15", False), ]) @utils.qt514 def test_prefers_color_scheme_dark(self, config_stub, monkeypatch, parser, - dark, new_qt, added): + dark, qt_version, added): monkeypatch.setattr(qtargs.objects, 'backend', usertypes.Backend.QtWebEngine) - monkeypatch.setattr(qtargs.qtutils, 'version_check', - lambda version, exact=False, compiled=True: - new_qt) + monkeypatch.setattr(qtargs.qtutils, 'qVersion', lambda: qt_version) config_stub.val.colors.webpage.prefers_color_scheme_dark = dark @@ -591,6 +591,18 @@ class TestDarkMode: assert opt.restart, name assert opt.raw_backends == backends, name + @pytest.mark.parametrize('enabled, expected', [ + # Disabled or nothing set + (False, []), + + # Enabled in configuration + (True, [("preferredColorScheme", "1")]), + ]) + @utils.qt515 + def test_colorscheme(self, config_stub, monkeypatch, enabled, expected): + config_stub.set_obj('colors.webpage.prefers_color_scheme_dark', enabled) + assert list(qtargs._darkmode_settings()) == expected + class TestEnvVars: -- cgit v1.2.3-54-g00ecf