diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/src/settingsdialogproton.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/src/src/settingsdialogproton.cpp b/src/src/settingsdialogproton.cpp index 96906fa..5efc7c6 100644 --- a/src/src/settingsdialogproton.cpp +++ b/src/src/settingsdialogproton.cpp @@ -470,8 +470,9 @@ void ProtonSettingsTab::onWinetricks() // Restore the original host LD_LIBRARY_PATH so that winetricks (and any // GUI helpers it spawns, e.g. kdialog/zenity) don't pick up Fluorine's - // bundled Qt libraries, which cause symbol-lookup errors on SteamOS. - auto restoreOrig = [&](const QString& var, const QString& origVar) { + // bundled Qt libraries, which cause symbol-lookup errors. + // Uses the same restore-or-strip logic as protonlauncher.cpp. + auto restoreOrStrip = [&](const QString& var, const QString& origVar) { if (env.contains(origVar)) { const QString orig = env.value(origVar); if (orig.isEmpty()) @@ -479,11 +480,27 @@ void ProtonSettingsTab::onWinetricks() else env.insert(var, orig); env.remove(origVar); + } else { + // Fallback: strip Fluorine's bundled library paths by pattern. + const QString value = env.value(var); + if (value.isEmpty()) return; + QStringList kept; + for (const QString& p : value.split(':')) { + if (p.contains("fluorine") || p.contains(".mount_Fluori")) { + continue; + } + kept.append(p); + } + if (kept.isEmpty()) { + env.remove(var); + } else { + env.insert(var, kept.join(':')); + } } }; - restoreOrig("LD_LIBRARY_PATH", "FLUORINE_ORIG_LD_LIBRARY_PATH"); - restoreOrig("LD_PRELOAD", "FLUORINE_ORIG_LD_PRELOAD"); - restoreOrig("QT_PLUGIN_PATH", "FLUORINE_ORIG_QT_PLUGIN_PATH"); + restoreOrStrip("LD_LIBRARY_PATH", "FLUORINE_ORIG_LD_LIBRARY_PATH"); + restoreOrStrip("LD_PRELOAD", "FLUORINE_ORIG_LD_PRELOAD"); + restoreOrStrip("QT_PLUGIN_PATH", "FLUORINE_ORIG_QT_PLUGIN_PATH"); env.remove("QT_QPA_PLATFORM_PLUGIN_PATH"); for (const QString& flag : envFlags) { |
