From 5bbfef81e0adda86d164b148b58f38a680231cc0 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Sat, 6 Feb 2021 18:23:57 +0100 Subject: [PATCH] Improve scene trigger handling (#117) --- src/headers/scene-trigger.hpp | 3 ++- src/scene-trigger.cpp | 16 +++++++++------- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/headers/scene-trigger.hpp b/src/headers/scene-trigger.hpp index bc68f20a..9e213b5a 100644 --- a/src/headers/scene-trigger.hpp +++ b/src/headers/scene-trigger.hpp @@ -36,7 +36,8 @@ struct SceneTrigger : SceneSwitcherEntry { void save(obs_data_t *obj); void load(obs_data_t *obj); - bool checkMatch(OBSWeakSource previousScene); + bool checkMatch(OBSWeakSource currentScene, + OBSWeakSource previousScene); void performAction(); void logMatch(); }; diff --git a/src/scene-trigger.cpp b/src/scene-trigger.cpp index 64983bdc..aa9ed291 100644 --- a/src/scene-trigger.cpp +++ b/src/scene-trigger.cpp @@ -223,13 +223,9 @@ void SceneTrigger::performAction() t.detach(); } -bool SceneTrigger::checkMatch(OBSWeakSource previousScene) +bool SceneTrigger::checkMatch(OBSWeakSource currentScene, + OBSWeakSource previousScene) { - OBSSource source = obs_frontend_get_current_scene(); - OBSWeakSource currentScene = obs_source_get_weak_source(source); - obs_source_release(source); - obs_weak_source_release(currentScene); - switch (triggerType) { case sceneTriggerType::NONE: return false; @@ -249,12 +245,18 @@ void SwitcherData::checkTriggers() return; } + OBSSource source = obs_frontend_get_current_scene(); + OBSWeakSource currentScene = obs_source_get_weak_source(source); + for (auto &t : sceneTriggers) { - if (t.checkMatch(previousScene)) { + if (t.checkMatch(currentScene, previousScene)) { t.logMatch(); t.performAction(); } } + + obs_source_release(source); + obs_weak_source_release(currentScene); } void SwitcherData::saveSceneTriggers(obs_data_t *obj)