From 14e984a44efd3779670d27ae59a35bf7eee37b43 Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Tue, 20 Oct 2026 18:32:03 +0200 Subject: [PATCH] Keep showing selected source setting if source is unavailable --- plugins/base/utils/source-setting.cpp | 28 +++++++++++++++++++++++---- plugins/base/utils/source-setting.hpp | 1 + 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/plugins/base/utils/source-setting.cpp b/plugins/base/utils/source-setting.cpp index c732071c..3aa986d6 100644 --- a/plugins/base/utils/source-setting.cpp +++ b/plugins/base/utils/source-setting.cpp @@ -512,9 +512,8 @@ void SourceSettingSelection::SetSource(const OBSWeakSource &source, { const auto previousSelection = _settings->currentData(); Populate(source); - if (restorePreviousSelection) { - _settings->setCurrentIndex( - _settings->findData(previousSelection)); + if (restorePreviousSelection && previousSelection.isValid()) { + Select(previousSelection.value()); } } @@ -522,9 +521,30 @@ void SourceSettingSelection::SetSelection(const OBSWeakSource &source, const SourceSetting &setting) { SetSource(source, false); + Select(setting); +} + +void SourceSettingSelection::Select(const SourceSetting &setting) +{ QVariant variant; variant.setValue(setting); - _settings->setCurrentIndex(_settings->findData(variant)); + int idx = _settings->findData(variant); + + // Keep showing the selected setting even if the source does not provide + // at the moment. + // So when a variable acts as the source the UI does not just show the + // placeholder value + if (idx == -1 && !setting._id.empty()) { + const auto &name = setting._description.empty() + ? setting._id + : setting._description; + _settings->addItem(QString::fromStdString(name), variant); + idx = _settings->count() - 1; + adjustSize(); + updateGeometry(); + } + + _settings->setCurrentIndex(idx); } void SourceSettingSelection::SelectionIdxChanged(int idx) diff --git a/plugins/base/utils/source-setting.hpp b/plugins/base/utils/source-setting.hpp index a0748733..b3f0dc07 100644 --- a/plugins/base/utils/source-setting.hpp +++ b/plugins/base/utils/source-setting.hpp @@ -61,6 +61,7 @@ signals: private: void Populate(const OBSWeakSource &); + void Select(const SourceSetting &); FilterComboBox *_settings; HelpIcon *_tooltip;