Fix transition condition not considering transition overrides
Some checks failed
debian-build / build (push) Has been cancelled
Push to master / Check Formatting 🔍 (push) Has been cancelled
Push to master / Build Project 🧱 (push) Has been cancelled
Push to master / Create Release 🛫 (push) Has been cancelled

This commit is contained in:
WarmUpTill 2024-12-16 19:36:29 +01:00 committed by WarmUpTill
parent 408002e96a
commit d7a244e80e
2 changed files with 30 additions and 14 deletions

View File

@ -111,27 +111,42 @@ bool MacroConditionTransition::CheckCondition()
return ret;
}
void MacroConditionTransition::ConnectToTransitionSignals()
void advss::MacroConditionTransition::AddTransitionSignals(
obs_source_t *transition)
{
const bool useFrontendTransitionSelection =
_transition.GetType() !=
TransitionSelection::Type::TRANSITION ||
(_condition == Condition::TRANSITION_SOURCE ||
_condition == Condition::TRANSITION_TARGET);
_signals.clear();
OBSSourceAutoRelease source =
useFrontendTransitionSelection
? obs_frontend_get_current_transition()
: obs_weak_source_get_source(
_transition.GetTransition());
signal_handler_t *sh = obs_source_get_signal_handler(source);
signal_handler_t *sh = obs_source_get_signal_handler(transition);
_signals.emplace_back(sh, "transition_start", TransitionStarted, this);
_signals.emplace_back(sh, "transition_stop", TransitionEnded, this);
_signals.emplace_back(sh, "transition_video_stop", TransitionVideoEnded,
this);
}
void MacroConditionTransition::ConnectToTransitionSignals()
{
_signals.clear();
const bool watchSingleTransitionType =
_transition.GetType() ==
TransitionSelection::Type::TRANSITION &&
!(_condition == Condition::TRANSITION_SOURCE ||
_condition == Condition::TRANSITION_TARGET);
if (watchSingleTransitionType) {
OBSSourceAutoRelease transition =
OBSGetStrongRef(_transition.GetTransition());
AddTransitionSignals(transition);
return;
}
obs_frontend_source_list transitions = {};
obs_frontend_get_transitions(&transitions);
for (size_t i = 0; i < transitions.sources.num; i++) {
obs_source_t *transition = transitions.sources.array[i];
AddTransitionSignals(transition);
}
obs_frontend_source_list_free(&transitions);
}
void MacroConditionTransition::TransitionStarted(void *data, calldata_t *cd)
{
auto *condition = static_cast<MacroConditionTransition *>(data);

View File

@ -42,6 +42,7 @@ private:
static void TransitionEnded(void *data, calldata_t *);
static void TransitionVideoEnded(void *data, calldata_t *);
static void HandleFrontendEvent(enum obs_frontend_event event, void *);
void AddTransitionSignals(obs_source_t *);
std::vector<OBSSignal> _signals;