diff options
-rw-r--r-- | qutebrowser/config/configdata.yml | 15 | ||||
-rw-r--r-- | qutebrowser/config/qtargs.py | 6 | ||||
-rw-r--r-- | tests/unit/config/test_qtargs.py | 41 |
3 files changed, 62 insertions, 0 deletions
diff --git a/qutebrowser/config/configdata.yml b/qutebrowser/config/configdata.yml index b3d86bda6..7c18c9847 100644 --- a/qutebrowser/config/configdata.yml +++ b/qutebrowser/config/configdata.yml @@ -163,6 +163,21 @@ qt.args: https://peter.sh/experiments/chromium-command-line-switches/ for a list) will work. +qt.environ: + type: + name: Dict + keytype: String + valtype: + name: String + none_ok: true + none_ok: true + default: {} + restart: true + desc: >- + Additional environment variables to set. + + Setting an environment variable to null/None will unset it. + force_software_rendering: renamed: qt.force_software_rendering diff --git a/qutebrowser/config/qtargs.py b/qutebrowser/config/qtargs.py index 2136f7e7f..d6375f331 100644 --- a/qutebrowser/config/qtargs.py +++ b/qutebrowser/config/qtargs.py @@ -259,3 +259,9 @@ def init_envvars() -> None: if qtutils.version_check('5.14', compiled=False) else 'QT_AUTO_SCREEN_SCALE_FACTOR') os.environ[env_var] = '1' + + for var, val in config.val.qt.environ.items(): + if val is None and var in os.environ: + del os.environ[var] + elif val is not None: + os.environ[var] = val diff --git a/tests/unit/config/test_qtargs.py b/tests/unit/config/test_qtargs.py index b050113b4..b38fab41d 100644 --- a/tests/unit/config/test_qtargs.py +++ b/tests/unit/config/test_qtargs.py @@ -428,6 +428,47 @@ class TestEnvVars: assert os.environ[envvar] == expected + @pytest.mark.parametrize('init_val, config_val', [ + ( # Test changing a set variable + {'QT_SCALE_FACTOR': '2'}, + {'QT_SCALE_FACTOR': '4'}, + ), + ( # Test setting an unset variable + {'QT_SCALE_FACTOR': None}, + {'QT_SCALE_FACTOR': '3'}, + ), + ( # Test unsetting a variable which is set + {'QT_SCALE_FACTOR': '3'}, + {'QT_SCALE_FACTOR': None}, + ), + ( # Test unsetting a variable which is unset + {'QT_SCALE_FACTOR': None}, + {'QT_SCALE_FACTOR': None}, + ), + ( # Test setting multiple variables + {'QT_SCALE_FACTOR': '0', 'QT_PLUGIN_PATH': '/usr/bin', 'QT_NEWVAR': None}, + {'QT_SCALE_FACTOR': '3', 'QT_PLUGIN_PATH': '/tmp/', 'QT_NEWVAR': 'newval'}, + ) + ]) + def test_environ_settings(self, monkeypatch, config_stub, + init_val, config_val): + """Test setting environment variables using qt.environ.""" + for var, val in init_val.items(): + if val is None: + monkeypatch.setenv(var, '0') + monkeypatch.delenv(var, raising=False) + else: + monkeypatch.setenv(var, val) + + config_stub.val.qt.environ = config_val + qtargs.init_envvars() + + for var, result in config_val.items(): + if result is None: + assert var not in os.environ + else: + assert os.environ[var] == result + @pytest.mark.parametrize('new_qt', [True, False]) def test_highdpi(self, monkeypatch, config_stub, new_qt): """Test HighDPI environment variables. |