Apply env overrides to bootstrap process in monitored launch

This commit is contained in:
Marco Allegretti 2026-03-23 13:20:46 +01:00
parent 56ab147a85
commit e8626b11c1

View file

@ -1540,6 +1540,31 @@ QString GameCenterDaemon::launchMonitored(const QVariantMap &launchSpec, const Q
auto *bootstrap = new QProcess(this);
{
QVariant rawEnv = launchSpec.value(QStringLiteral("envOverrides"));
if (rawEnv.canConvert<QDBusVariant>()) {
rawEnv = rawEnv.value<QDBusVariant>().variant();
}
if (rawEnv.canConvert<QVariantMap>()) {
const QVariantMap bootstrapEnv = rawEnv.toMap();
if (!bootstrapEnv.isEmpty()) {
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
for (auto it = bootstrapEnv.constBegin(); it != bootstrapEnv.constEnd(); ++it) {
const QString key = it.key();
if (key.isEmpty() || key.contains(QLatin1Char('='))) {
continue;
}
QVariant value = it.value();
if (value.canConvert<QDBusVariant>()) {
value = value.value<QDBusVariant>().variant();
}
env.insert(key, value.toString());
}
bootstrap->setProcessEnvironment(env);
}
}
}
connect(bootstrap, &QProcess::errorOccurred, this, [this, sessionId, gameId, provider, command](QProcess::ProcessError error) {
if (error != QProcess::FailedToStart) {
return;