summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Morse <ekpneo@users.noreply.github.com>2020-11-28 21:27:11 -0800
committerFlorian Bruhin <me@the-compiler.org>2020-12-03 14:43:31 +0100
commitd9c299e23edb7b336ec2f3264dd831a4e6eb3482 (patch)
tree39ddf6042bfe255d33b2ed27ebed37e4c385d998
parent348f450becddd07d75ca5e3c3ba991207478c931 (diff)
downloadqutebrowser-d9c299e23edb7b336ec2f3264dd831a4e6eb3482.tar.gz
qutebrowser-d9c299e23edb7b336ec2f3264dd831a4e6eb3482.zip
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
-rw-r--r--qutebrowser/config/qtargs.py14
-rw-r--r--tests/helpers/utils.py3
-rw-r--r--tests/unit/config/test_qtargs.py30
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: