summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2020-10-05 18:57:37 +0200
committerFlorian Bruhin <me@the-compiler.org>2020-10-05 18:57:37 +0200
commite1484d9038f5282e39f6d2d957f3a1d246ab8251 (patch)
treeaf842c19894ecd065f2e69f022f456f9ad377c0b
parentaa03c1d9037ccb9e402156a2707e15d00ee8bd7a (diff)
downloadqutebrowser-e1484d9038f5282e39f6d2d957f3a1d246ab8251.tar.gz
qutebrowser-e1484d9038f5282e39f6d2d957f3a1d246ab8251.zip
Implement dark mode for Qt 5.15.2
See #5752
-rw-r--r--doc/changelog.asciidoc1
-rw-r--r--qutebrowser/config/qtargs.py20
-rw-r--r--tests/unit/config/test_qtargs.py38
3 files changed, 40 insertions, 19 deletions
diff --git a/doc/changelog.asciidoc b/doc/changelog.asciidoc
index 23182bcae..25206f286 100644
--- a/doc/changelog.asciidoc
+++ b/doc/changelog.asciidoc
@@ -66,6 +66,7 @@ Changed
`--asciidoc-python path/to/python --asciidoc path/to/asciidoc.py`
instead of the former
`--asciidoc path/to/python path/to/asciidoc.py`.
+- Dark mode is now supported with Qt 5.15.2 (which is not released yet)
- The `readability-js` userscript now adds some CSS to improve the reader mode
styling in various scenarios:
* Images are now shrinked to the page width, similarly to what Firefox' reader
diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py
index b81194c22..a9d92e95d 100644
--- a/qutebrowser/config/qtargs.py
+++ b/qutebrowser/config/qtargs.py
@@ -61,6 +61,21 @@ def qt_args(namespace: argparse.Namespace) -> typing.List[str]:
return argv
+def _darkmode_prefix() -> str:
+ """Return the prefix to use for darkmode settings."""
+ try:
+ from PyQt5.QtWebEngine import PYQT_WEBENGINE_VERSION
+ except ImportError:
+ # Added in PyQt 5.13
+ return 'darkMode'
+
+ if PYQT_WEBENGINE_VERSION >= 0x050f02:
+ # QtWebEngine 5.15.2 comes with Chromium 83
+ return 'forceDarkMode'
+ else:
+ return 'darkMode'
+
+
def _darkmode_settings() -> typing.Iterator[typing.Tuple[str, str]]:
"""Get necessary blink settings to configure dark mode for QtWebEngine."""
if not config.val.colors.webpage.darkmode.enabled:
@@ -139,10 +154,7 @@ def _darkmode_settings() -> typing.Iterator[typing.Tuple[str, str]]:
if mapping is not None:
value = mapping[value]
- # FIXME: This is "forceDarkMode" starting with Chromium 83
- prefix = 'darkMode'
-
- yield prefix + key, str(value)
+ yield _darkmode_prefix() + key, str(value)
def _qtwebengine_enabled_features(
diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py
index 639975694..784978c72 100644
--- a/tests/unit/config/test_qtargs.py
+++ b/tests/unit/config/test_qtargs.py
@@ -400,7 +400,14 @@ class TestQtArgs:
parsed = parser.parse_args([])
args = qtargs.qt_args(parsed)
- assert '--blink-settings=darkModeEnabled=true' in args
+ old_setting = '--blink-settings=darkModeEnabled=true'
+ new_setting = '--blink-settings=forceDarkModeEnabled=true'
+
+ assert old_setting in args or new_setting in args
+
+
+def add_prefix(name):
+ return qtargs._darkmode_prefix() + name
class TestDarkMode:
@@ -421,25 +428,25 @@ class TestDarkMode:
(
{'enabled': True},
True,
- [('darkModeEnabled', 'true')]
+ [(add_prefix('Enabled'), 'true')]
),
(
{'enabled': True},
False,
- [('darkMode', '4')]
+ [(add_prefix(''), '4')]
),
# Algorithm
(
{'enabled': True, 'algorithm': 'brightness-rgb'},
True,
- [('darkModeEnabled', 'true'),
- ('darkModeInversionAlgorithm', '2')],
+ [(add_prefix('Enabled'), 'true'),
+ (add_prefix('InversionAlgorithm'), '2')],
),
(
{'enabled': True, 'algorithm': 'brightness-rgb'},
False,
- [('darkMode', '2')],
+ [(add_prefix(''), '2')],
),
])
@@ -455,19 +462,19 @@ class TestDarkMode:
@pytest.mark.parametrize('setting, value, exp_key, exp_val', [
('contrast', -0.5,
- 'darkModeContrast', '-0.5'),
+ add_prefix('Contrast'), '-0.5'),
('policy.page', 'smart',
- 'darkModePagePolicy', '1'),
+ add_prefix('PagePolicy'), '1'),
('policy.images', 'smart',
- 'darkModeImagePolicy', '2'),
+ add_prefix('ImagePolicy'), '2'),
('threshold.text', 100,
- 'darkModeTextBrightnessThreshold', '100'),
+ add_prefix('TextBrightnessThreshold'), '100'),
('threshold.background', 100,
- 'darkModeBackgroundBrightnessThreshold', '100'),
+ add_prefix('BackgroundBrightnessThreshold'), '100'),
('grayscale.all', True,
- 'darkModeGrayscale', 'true'),
+ add_prefix('Grayscale'), 'true'),
('grayscale.images', 0.5,
- 'darkModeImageGrayscale', '0.5'),
+ add_prefix('ImageGrayscale'), '0.5'),
])
def test_customization(self, config_stub, monkeypatch,
setting, value, exp_key, exp_val):
@@ -477,7 +484,7 @@ class TestDarkMode:
lambda version, exact=False, compiled=True:
True)
- expected = [('darkModeEnabled', 'true'), (exp_key, exp_val)]
+ expected = [(add_prefix('Enabled'), 'true'), (exp_key, exp_val)]
assert list(qtargs._darkmode_settings()) == expected
def test_new_chromium(self):
@@ -493,7 +500,8 @@ class TestDarkMode:
assert version._chromium_version() in [
'unavailable', # QtWebKit
'77.0.3865.129', # Qt 5.14
- '80.0.3987.163', # Qt 5.15
+ '80.0.3987.163', # Qt 5.15.0
+ '83.0.4103.122', # Qt 5.15.2
]
def test_options(self, configdata_init):