diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index 554fd392..89f21ccc 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -343,7 +343,7 @@ bool SwitcherData::checkForMatch(OBSWeakSource &scene, return match; } -void switchScene(const sceneSwitchInfo &sceneSwitch) +void switchScene(const sceneSwitchInfo &sceneSwitch, bool force) { if (!sceneSwitch.scene && switcher->verbose) { blog(LOG_INFO, "nothing to switch to"); @@ -353,7 +353,7 @@ void switchScene(const sceneSwitchInfo &sceneSwitch) obs_source_t *source = obs_weak_source_get_source(sceneSwitch.scene); obs_source_t *currentSource = obs_frontend_get_current_scene(); - if (source && source != currentSource) { + if (source && (source != currentSource || force)) { transitionData currentTransitionData; setNextTransition(sceneSwitch, currentSource, currentTransitionData); diff --git a/src/headers/advanced-scene-switcher.hpp b/src/headers/advanced-scene-switcher.hpp index 08705087..736f3290 100644 --- a/src/headers/advanced-scene-switcher.hpp +++ b/src/headers/advanced-scene-switcher.hpp @@ -302,7 +302,7 @@ void setNextTransition(const sceneSwitchInfo &ssi, obs_source_t *currentSource, void overwriteTransitionOverride(const sceneSwitchInfo &ssi, transitionData &td); void restoreTransitionOverride(obs_source_t *scene, const transitionData &td); -void switchScene(const sceneSwitchInfo &ssi); +void switchScene(const sceneSwitchInfo &ssi, bool force = false); void switchPreviewScene(const OBSWeakSource &ws); /****************************************************************************** diff --git a/src/macro-action-scene-switch.cpp b/src/macro-action-scene-switch.cpp index 69afaa85..ca11c56f 100644 --- a/src/macro-action-scene-switch.cpp +++ b/src/macro-action-scene-switch.cpp @@ -39,7 +39,8 @@ bool MacroActionSwitchScene::PerformAction() { auto scene = _scene.GetScene(); switchScene({scene, _transition.GetTransition(), - (int)(_duration.seconds * 1000)}); + (int)(_duration.seconds * 1000)}, + obs_frontend_preview_program_mode_active()); if (_blockUntilTransitionDone && scene) { waitForTransitionChange(scene); return !switcher->abortMacroWait;