summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Bruhin <me@the-compiler.org>2021-01-02 13:27:36 +0100
committerFlorian Bruhin <me@the-compiler.org>2021-01-02 13:27:36 +0100
commit83d3f07c20b4db6ec972cf5f997714e2834b57c0 (patch)
treeb82e5551140daf26e0d25fb3c6d01eabcf30757c
parentbe4a03d2c3ee24b1316db36e5e7b40c2b16278cf (diff)
parent5c4ba10a5326e895b63668cd6aabc437db71c21b (diff)
downloadqutebrowser-83d3f07c20b4db6ec972cf5f997714e2834b57c0.tar.gz
qutebrowser-83d3f07c20b4db6ec972cf5f997714e2834b57c0.zip
Merge remote-tracking branch 'origin/pr/5981'
-rw-r--r--qutebrowser/config/configdata.yml15
-rw-r--r--qutebrowser/config/qtargs.py6
-rw-r--r--tests/unit/config/test_qtargs.py41
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.