diff options
author | Florian Bruhin <me@the-compiler.org> | 2021-01-02 13:27:36 +0100 |
---|---|---|
committer | Florian Bruhin <me@the-compiler.org> | 2021-01-02 13:27:36 +0100 |
commit | 83d3f07c20b4db6ec972cf5f997714e2834b57c0 (patch) | |
tree | b82e5551140daf26e0d25fb3c6d01eabcf30757c | |
parent | be4a03d2c3ee24b1316db36e5e7b40c2b16278cf (diff) | |
parent | 5c4ba10a5326e895b63668cd6aabc437db71c21b (diff) | |
download | qutebrowser-83d3f07c20b4db6ec972cf5f997714e2834b57c0.tar.gz qutebrowser-83d3f07c20b4db6ec972cf5f997714e2834b57c0.zip |
Merge remote-tracking branch 'origin/pr/5981'
-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. |