diff options
Diffstat (limited to 'qutebrowser/config/qtargs.py')
-rw-r--r-- | qutebrowser/config/qtargs.py | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py index 7513554b3..934953d0a 100644 --- a/qutebrowser/config/qtargs.py +++ b/qutebrowser/config/qtargs.py @@ -8,7 +8,7 @@ import os import sys import argparse import pathlib -from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple +from typing import Any, Dict, Iterator, List, Optional, Sequence, Tuple, Union, Callable from qutebrowser.qt import machinery from qutebrowser.qt.core import QLocale @@ -273,10 +273,19 @@ def _qtwebengine_args( if disabled_features: yield _DISABLE_FEATURES + ','.join(disabled_features) - yield from _qtwebengine_settings_args() + yield from _qtwebengine_settings_args(versions) -_WEBENGINE_SETTINGS: Dict[str, Dict[Any, Optional[str]]] = { +_SettingValueType = Union[ + str, + Callable[ + [ + version.WebEngineVersions, + ], + str, + ], +] +_WEBENGINE_SETTINGS: Dict[str, Dict[Any, Optional[_SettingValueType]]] = { 'qt.force_software_rendering': { 'software-opengl': None, 'qt-quick': None, @@ -324,13 +333,33 @@ _WEBENGINE_SETTINGS: Dict[str, Dict[Any, Optional[str]]] = { 'auto': '--enable-experimental-web-platform-features' if machinery.IS_QT5 else None, }, + 'qt.workarounds.disable_accelerated_2d_canvas': { + 'always': '--disable-accelerated-2d-canvas', + 'never': None, + 'auto': lambda versions: 'always' + if machinery.IS_QT6 + and versions.chromium_major + and versions.chromium_major < 111 + else 'never', + }, } -def _qtwebengine_settings_args() -> Iterator[str]: +def _qtwebengine_settings_args(versions: version.WebEngineVersions) -> Iterator[str]: for setting, args in sorted(_WEBENGINE_SETTINGS.items()): arg = args[config.instance.get(setting)] - if arg is not None: + if callable(arg): + new_value = arg(versions) + assert ( + new_value in args + ), f"qt.settings feature detection returned an unrecognized value: {new_value} for {setting}" + result = args[new_value] + if result is not None: + assert isinstance( + result, str + ), f"qt.settings feature detection returned an invalid type: {type(result)} for {setting}" + yield result + elif arg is not None: yield arg |