Skip to content

Commit

Permalink
Fix transition condition not considering transition overrides
Browse files Browse the repository at this point in the history
  • Loading branch information
WarmUpTill committed Dec 31, 2024
1 parent 408002e commit d7a244e
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 14 deletions.
43 changes: 29 additions & 14 deletions plugins/base/macro-condition-transition.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions plugins/base/macro-condition-transition.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class MacroConditionTransition : public MacroCondition {
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;

Expand Down

0 comments on commit d7a244e

Please sign in to comment.