diff options
author | Florian Bruhin <me@the-compiler.org> | 2020-10-05 18:57:37 +0200 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2020-10-05 18:57:37 +0200 |
commit | e1484d9038f5282e39f6d2d957f3a1d246ab8251 (patch) | |
tree | af842c19894ecd065f2e69f022f456f9ad377c0b | |
parent | aa03c1d9037ccb9e402156a2707e15d00ee8bd7a (diff) | |
download | qutebrowser-e1484d9038f5282e39f6d2d957f3a1d246ab8251.tar.gz qutebrowser-e1484d9038f5282e39f6d2d957f3a1d246ab8251.zip |
Implement dark mode for Qt 5.15.2
See #5752
-rw-r--r-- | doc/changelog.asciidoc | 1 | ||||
-rw-r--r-- | qutebrowser/config/qtargs.py | 20 | ||||
-rw-r--r-- | tests/unit/config/test_qtargs.py | 38 |
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): |