summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTed Morse <ekpneo@users.noreply.github.com>2020-11-28 21:27:11 -0800
committerTed Morse <ekpneo@users.noreply.github.com>2020-11-28 22:58:32 -0800
commit314c81b24eb9f9457ccdb5c682d718cf24f24a76 (patch)
tree02505664c17ee749c3a78f67dfe014ece3514ed2
parent6a9f3d6cf55d7863b9b650aece2ab081e46bfc61 (diff)
downloadqutebrowser-314c81b24eb9f9457ccdb5c682d718cf24f24a76.tar.gz
qutebrowser-314c81b24eb9f9457ccdb5c682d718cf24f24a76.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.
-rw-r--r--qutebrowser/browser/webengine/darkmode.py4
-rw-r--r--qutebrowser/config/qtargs.py10
-rw-r--r--tests/helpers/utils.py3
-rw-r--r--tests/unit/browser/webengine/test_darkmode.py13
-rw-r--r--tests/unit/config/test_qtargs.py18
5 files changed, 37 insertions, 11 deletions
diff --git a/qutebrowser/browser/webengine/darkmode.py b/qutebrowser/browser/webengine/darkmode.py
index 630a7bf9e..5ae079392 100644
--- a/qutebrowser/browser/webengine/darkmode.py
+++ b/qutebrowser/browser/webengine/darkmode.py
@@ -264,6 +264,10 @@ def _variant() -> Variant:
def settings() -> Iterator[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
diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py
index 8ab93c904..663296bbc 100644
--- a/qutebrowser/config/qtargs.py
+++ b/qutebrowser/config/qtargs.py
@@ -203,12 +203,18 @@ def _qtwebengine_settings_args() -> Iterator[str]:
}
}
- 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 2c275bf15..3b5ee0ab6 100644
--- a/tests/helpers/utils.py
+++ b/tests/helpers/utils.py
@@ -44,6 +44,9 @@ ON_CI = 'CI' in os.environ
qt514 = pytest.mark.skipif(
not qtutils.version_check('5.14'), reason="Needs Qt 5.14 or newer")
+qt515 = pytest.mark.skipif(
+ not qtutils.version_check('5.15'), reason="Needs Qt 5.15 or newer")
+
class PartialCompareOutcome:
diff --git a/tests/unit/browser/webengine/test_darkmode.py b/tests/unit/browser/webengine/test_darkmode.py
index 3e62000d2..0c39cf95c 100644
--- a/tests/unit/browser/webengine/test_darkmode.py
+++ b/tests/unit/browser/webengine/test_darkmode.py
@@ -32,6 +32,19 @@ def patch_backend(monkeypatch):
monkeypatch.setattr(objects, 'backend', usertypes.Backend.QtWebEngine)
+@pytest.mark.parametrize('enabled, expected', [
+ # Disabled or nothing set
+ (False, []),
+
+ # Enabled in configuration
+ (True, [("preferredColorScheme", "1")]),
+])
+@utils.qt515
+def test_colorscheme(config_stub, monkeypatch, enabled, expected):
+ config_stub.set_obj('colors.webpage.prefers_color_scheme_dark', enabled)
+ assert list(darkmode.settings()) == expected
+
+
@pytest.mark.parametrize('settings, expected', [
# Disabled
({}, []),
diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py
index 051956a00..d26a8ab50 100644
--- a/tests/unit/config/test_qtargs.py
+++ b/tests/unit/config/test_qtargs.py
@@ -289,20 +289,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