diff --git a/plugins/base/macro-action-projector.cpp b/plugins/base/macro-action-projector.cpp index f3a7083d..7376151e 100644 --- a/plugins/base/macro-action-projector.cpp +++ b/plugins/base/macro-action-projector.cpp @@ -1,6 +1,5 @@ #include "macro-action-projector.hpp" #include "layout-helpers.hpp" -#include "monitor-helpers.hpp" #include "selection-helpers.hpp" #include "source-helpers.hpp" @@ -246,7 +245,7 @@ MacroActionProjectorEdit::MacroActionProjectorEdit( _scenes(new SceneSelectionWidget(window(), true, false, true, true, true)), _sources(new SourceSelectionWidget(window(), getSourcesList, true)), - _monitors(new QComboBox()), + _monitors(new MonitorSelectionWidget(this)), _projectorWindowName(new VariableLineEdit(this)), _regex(new RegexConfigWidget(this)), _layout(new QHBoxLayout(this)) @@ -258,6 +257,7 @@ MacroActionProjectorEdit::MacroActionProjectorEdit( _monitors->addItems(GetMonitorNames()); _monitors->setPlaceholderText( obs_module_text("AdvSceneSwitcher.selectDisplay")); + _monitors->SetAllowUnmatchedSelection(false); QWidget::connect(_actions, SIGNAL(currentIndexChanged(int)), this, SLOT(ActionChanged(int))); diff --git a/plugins/base/macro-action-projector.hpp b/plugins/base/macro-action-projector.hpp index c5138d5a..e2483347 100644 --- a/plugins/base/macro-action-projector.hpp +++ b/plugins/base/macro-action-projector.hpp @@ -1,5 +1,6 @@ #pragma once #include "macro-action-edit.hpp" +#include "monitor-helpers.hpp" #include "regex-config.hpp" #include "scene-selection.hpp" #include "source-selection.hpp" @@ -88,7 +89,7 @@ private: QComboBox *_windowTypes; SceneSelectionWidget *_scenes; SourceSelectionWidget *_sources; - QComboBox *_monitors; + MonitorSelectionWidget *_monitors; VariableLineEdit *_projectorWindowName; RegexConfigWidget *_regex; QHBoxLayout *_layout; diff --git a/plugins/base/macro-condition-display.cpp b/plugins/base/macro-condition-display.cpp index e1ad3ba9..651c4ac2 100644 --- a/plugins/base/macro-condition-display.cpp +++ b/plugins/base/macro-condition-display.cpp @@ -1,6 +1,5 @@ #include "macro-condition-display.hpp" #include "layout-helpers.hpp" -#include "monitor-helpers.hpp" #include #include @@ -254,7 +253,7 @@ MacroConditionDisplayEdit::MacroConditionDisplayEdit( : QWidget(parent), _conditions(new QComboBox()), _compareModes(new QComboBox()), - _displays(new QComboBox()), + _displays(new MonitorSelectionWidget(this)), _regex(new RegexConfigWidget()), _displayCount(new VariableSpinBox(this)), _displayWidth(new VariableSpinBox(this)), @@ -264,8 +263,6 @@ MacroConditionDisplayEdit::MacroConditionDisplayEdit( { populateConditionSelection(_conditions); populateCompareModeselection(_compareModes); - _displays->addItems(GetMonitorNames()); - _displays->setEditable(true); _displayWidth->setMaximum(99999); _displayHeight->setMaximum(99999); diff --git a/plugins/base/macro-condition-display.hpp b/plugins/base/macro-condition-display.hpp index b1c264da..64ce696a 100644 --- a/plugins/base/macro-condition-display.hpp +++ b/plugins/base/macro-condition-display.hpp @@ -1,5 +1,6 @@ #pragma once #include "macro-condition-edit.hpp" +#include "monitor-helpers.hpp" #include "variable-line-edit.hpp" #include "variable-spinbox.hpp" #include "regex-config.hpp" @@ -80,7 +81,7 @@ private: QComboBox *_conditions; QComboBox *_compareModes; - QComboBox *_displays; + MonitorSelectionWidget *_displays; RegexConfigWidget *_regex; VariableSpinBox *_displayCount; VariableSpinBox *_displayWidth; diff --git a/plugins/base/utils/monitor-helpers.cpp b/plugins/base/utils/monitor-helpers.cpp index 6f054b91..c1652173 100644 --- a/plugins/base/utils/monitor-helpers.cpp +++ b/plugins/base/utils/monitor-helpers.cpp @@ -47,4 +47,23 @@ QStringList GetMonitorNames() return monitorNames; } +MonitorSelectionWidget::MonitorSelectionWidget(QWidget *parent) + : FilterComboBox(parent) +{ + setEditable(true); + SetAllowUnmatchedSelection(true); + setMaxVisibleItems(20); + addItems(GetMonitorNames()); +} + +void MonitorSelectionWidget::showEvent(QShowEvent *event) +{ + FilterComboBox::showEvent(event); + const QSignalBlocker b(this); + const auto text = currentText(); + clear(); + addItems(GetMonitorNames()); + setCurrentText(text); +} + } // namespace advss diff --git a/plugins/base/utils/monitor-helpers.hpp b/plugins/base/utils/monitor-helpers.hpp index 65f02733..b0fa1743 100644 --- a/plugins/base/utils/monitor-helpers.hpp +++ b/plugins/base/utils/monitor-helpers.hpp @@ -1,8 +1,18 @@ #pragma once -#include +#include "filter-combo-box.hpp" namespace advss { QStringList GetMonitorNames(); +class MonitorSelectionWidget : public FilterComboBox { + Q_OBJECT + +public: + MonitorSelectionWidget(QWidget *parent); + +protected: + void showEvent(QShowEvent *event) override; +}; + } // namespace advss