From 8f3b868fd94b55a2b1397d4de2f0589214d8ee39 Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Wed, 22 Oct 2025 20:35:47 +0200 Subject: [PATCH] Limit projector action to main canvas and improve layout --- lib/utils/scene-selection.hpp | 2 +- plugins/base/macro-action-projector.cpp | 37 +++++++++++++++---------- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/lib/utils/scene-selection.hpp b/lib/utils/scene-selection.hpp index ee797540..0c035bb6 100644 --- a/lib/utils/scene-selection.hpp +++ b/lib/utils/scene-selection.hpp @@ -46,7 +46,7 @@ public: bool previous = false, bool current = false, bool preview = false); EXPORT void SetScene(const SceneSelection &); - void LockToMainCanvas(); + EXPORT void LockToMainCanvas(); protected: void showEvent(QShowEvent *event) override; diff --git a/plugins/base/macro-action-projector.cpp b/plugins/base/macro-action-projector.cpp index 64e38cf1..ec31d8cb 100644 --- a/plugins/base/macro-action-projector.cpp +++ b/plugins/base/macro-action-projector.cpp @@ -250,6 +250,10 @@ MacroActionProjectorEdit::MacroActionProjectorEdit( _regex(new RegexConfigWidget(this)), _layout(new QHBoxLayout(this)) { + // The obs_frontend_open_projector() function does not seem to support + // scenes of secondary canvases + _scenes->LockToMainCanvas(); + populateActionSelection(_actions); populateWindowTypes(_windowTypes); populateSelectionTypes(_types); @@ -396,26 +400,29 @@ void MacroActionProjectorEdit::SetWidgetVisibility() return; } - _projectorWindowName->setVisible(_entryData->_action == + const auto &action = _entryData->_action; + const auto &type = _entryData->_type; + + _projectorWindowName->setVisible(action == MacroActionProjector::Action::CLOSE); - _regex->setVisible(_entryData->_action == - MacroActionProjector::Action::CLOSE); - _types->setVisible(_entryData->_action == - MacroActionProjector::Action::OPEN); - _windowTypes->setVisible(_entryData->_action == - MacroActionProjector::Action::OPEN); - _scenes->setVisible( - _entryData->_action == MacroActionProjector::Action::OPEN && - _entryData->_type == MacroActionProjector::Type::SCENE); - _sources->setVisible( - _entryData->_action == MacroActionProjector::Action::OPEN && - _entryData->_type == MacroActionProjector::Type::SOURCE); - _monitors->setVisible(_entryData->_action == - MacroActionProjector::Action::OPEN && + _regex->setVisible(action == MacroActionProjector::Action::CLOSE); + _types->setVisible(action == MacroActionProjector::Action::OPEN); + _windowTypes->setVisible(action == MacroActionProjector::Action::OPEN); + _scenes->setVisible(action == MacroActionProjector::Action::OPEN && + type == MacroActionProjector::Type::SCENE); + _sources->setVisible(action == MacroActionProjector::Action::OPEN && + type == MacroActionProjector::Type::SOURCE); + _monitors->setVisible(action == MacroActionProjector::Action::OPEN && _entryData->_fullscreen); adjustSize(); updateGeometry(); + + if (action == MacroActionProjector::Action::CLOSE) { + RemoveStretchIfPresent(_layout); + } else { + AddStretchIfNecessary(_layout); + } } } // namespace advss