Compare commits

..

2 Commits

Author SHA1 Message Date
WarmUpTill
ba7886c8c1 Fix variables of nested macros' actions not being resolved 2026-06-16 20:43:09 +02:00
WarmUpTill
801268d08b Fix nested macro actions being executed twice when added to a queue 2026-06-16 20:29:11 +02:00
7 changed files with 17 additions and 76 deletions

View File

@@ -2546,7 +2546,6 @@ AdvSceneSwitcher.selectCurrentScene="Current Scene"
AdvSceneSwitcher.selectPreviewScene="Preview Scene"
AdvSceneSwitcher.selectAnyScene="Any Scene"
AdvSceneSwitcher.currentTransition="Current Transition"
AdvSceneSwitcher.noneTransition="None"
AdvSceneSwitcher.anyTransition="Any Transition"
AdvSceneSwitcher.selectTransition="--select transition--"
AdvSceneSwitcher.selectWindow="--select window--"

View File

@@ -135,7 +135,7 @@ QStringList GetSourceNames()
}
void PopulateTransitionSelection(QComboBox *sel, bool addCurrent, bool addAny,
bool addSelect, bool addNone)
bool addSelect)
{
obs_frontend_source_list *transitions = new obs_frontend_source_list();
@@ -168,11 +168,6 @@ void PopulateTransitionSelection(QComboBox *sel, bool addCurrent, bool addAny,
addSelect ? 1 : 0,
obs_module_text("AdvSceneSwitcher.anyTransition"));
}
if (addNone) {
sel->insertItem(
addSelect ? 1 : 0,
obs_module_text("AdvSceneSwitcher.noneTransition"));
}
}
void PopulateWindowSelection(QComboBox *sel, bool addSelect)

View File

@@ -19,8 +19,7 @@ EXPORT QStringList GetSourceNames();
EXPORT void PopulateTransitionSelection(QComboBox *sel, bool addCurrent = true,
bool addAny = false,
bool addSelect = true,
bool addNone = false);
bool addSelect = true);
EXPORT void PopulateWindowSelection(QComboBox *sel, bool addSelect = true);
void PopulateAudioSelection(QComboBox *sel, bool addSelect = true);
void PopulateVideoSelection(QComboBox *sel, bool addMainOutput = false,

View File

@@ -160,11 +160,12 @@ static void attachRestoreContext(obs_sceneitem_t *item,
static void setSceneItemVisibility(obs_sceneitem_t *item,
const bool setTransition,
const TransitionSelection &transitionSel,
const OBSWeakSource &transitionWeak,
const bool setDuration,
const Duration &duration,
MacroActionSceneVisibility::Action action)
{
const OBSSourceAutoRelease transition = OBSGetStrongRef(transitionWeak);
const bool itemIsVisible = obs_sceneitem_visible(item);
const OBSSource currentTransition =
@@ -174,16 +175,6 @@ static void setSceneItemVisibility(obs_sceneitem_t *item,
OBSSource privateTransitionSource = nullptr;
if (setTransition) {
OBSSourceAutoRelease transition;
if (transitionSel.GetType() ==
TransitionSelection::Type::CURRENT) {
transition = obs_source_get_ref(
obs_sceneitem_get_transition(item,
!itemIsVisible));
} else {
transition =
OBSGetStrongRef(transitionSel.GetTransition());
}
privateTransitionSource = SetSceneItemTransition(
item, transition, !itemIsVisible);
} else {
@@ -238,7 +229,8 @@ bool MacroActionSceneVisibility::PerformAction()
{
auto items = _source.GetSceneItems(_scene);
for (const auto &item : items) {
setSceneItemVisibility(item, _updateTransition, _transition,
setSceneItemVisibility(item, _updateTransition,
_transition.GetTransition(),
_updateDuration, _duration, _action);
}
return true;
@@ -348,7 +340,7 @@ MacroActionSceneVisibilityEdit::MacroActionSceneVisibilityEdit(
},
SceneItemSelectionWidget::NameClashMode::ALL)),
_updateTransition(new QCheckBox(this)),
_transitions(new TransitionSelectionWidget(this, true, false, true)),
_transitions(new TransitionSelectionWidget(this, false, false)),
_updateDuration(new QCheckBox(this)),
_duration(new DurationSelection(this, false)),
_durationLayout(new QHBoxLayout),
@@ -482,11 +474,8 @@ void MacroActionSceneVisibilityEdit::ActionChanged(int value)
void MacroActionSceneVisibilityEdit::SetWidgetVisibility()
{
const auto transitionType = _entryData->_transition.GetType();
const bool hideDurationSelection =
_entryData->_updateTransition &&
transitionType != TransitionSelection::Type::CURRENT &&
transitionType != TransitionSelection::Type::NONE &&
IsFixedLengthTransition(
_entryData->_transition.GetTransition());

View File

@@ -406,17 +406,15 @@ void MacroActionTransitionEdit::SetWidgetVisibility()
MacroActionTransition::Type::TBAR;
const bool isReleaseTbar = _entryData->_type ==
MacroActionTransition::Type::RELEASE_TBAR;
const bool isSourceTransition =
_entryData->_type == MacroActionTransition::Type::SOURCE_SHOW ||
_entryData->_type == MacroActionTransition::Type::SOURCE_HIDE;
_sources->setVisible(isSourceTransition);
_sources->setVisible(
_entryData->_type == MacroActionTransition::Type::SOURCE_HIDE ||
_entryData->_type == MacroActionTransition::Type::SOURCE_SHOW);
_scenes->setVisible(_entryData->_type !=
MacroActionTransition::Type::SCENE &&
!isTbar && !isReleaseTbar);
SetLayoutVisible(_transitionLayout, !isTbar && !isReleaseTbar);
SetLayoutVisible(_durationLayout, !isTbar && !isReleaseTbar);
SetLayoutVisible(_tbarLayout, isTbar);
_transitions->EnableNoneEntry(isSourceTransition);
adjustSize();
}

View File

@@ -48,8 +48,6 @@ OBSWeakSource TransitionSelection::GetTransition() const
obs_source_release(source);
return weakSource;
}
case Type::NONE:
return nullptr;
default:
break;
}
@@ -65,8 +63,6 @@ std::string TransitionSelection::ToString() const
return obs_module_text("AdvSceneSwitcher.currentTransition");
case Type::ANY:
return obs_module_text("AdvSceneSwitcher.anyTransition");
case Type::NONE:
return obs_module_text("AdvSceneSwitcher.noneTransition");
default:
break;
}
@@ -74,16 +70,14 @@ std::string TransitionSelection::ToString() const
}
TransitionSelectionWidget::TransitionSelectionWidget(QWidget *parent,
bool current, bool any,
bool none)
bool current, bool any)
: FilterComboBox(parent,
obs_module_text("AdvSceneSwitcher.selectTransition")),
_addCurrent(current),
_addAny(any),
_addNone(none)
_addAny(any)
{
setDuplicatesEnabled(true);
PopulateTransitionSelection(this, current, any, false, none);
PopulateTransitionSelection(this, current, any, false);
QWidget::connect(this, SIGNAL(currentTextChanged(const QString &)),
this, SLOT(SelectionChanged(const QString &)));
@@ -92,9 +86,8 @@ TransitionSelectionWidget::TransitionSelectionWidget(QWidget *parent,
void TransitionSelectionWidget::SetTransition(const TransitionSelection &t)
{
// Order of entries
// 1. None transition
// 2. Any transition
// 3. Current transition
// 1. Any transition
// 2. Current transition
// 4. Transitions
switch (t.GetType()) {
@@ -109,10 +102,6 @@ void TransitionSelectionWidget::SetTransition(const TransitionSelection &t)
setCurrentIndex(findText(QString::fromStdString(
obs_module_text("AdvSceneSwitcher.anyTransition"))));
break;
case TransitionSelection::Type::NONE:
setCurrentIndex(findText(QString::fromStdString(
obs_module_text("AdvSceneSwitcher.noneTransition"))));
break;
default:
setCurrentIndex(-1);
break;
@@ -131,17 +120,6 @@ void TransitionSelectionWidget::EnableAnyEntry(bool enable)
Populate();
}
void TransitionSelectionWidget::EnableNoneEntry(bool enable)
{
if (_addNone == enable) {
return;
}
const auto selection = GetCurrentSelection();
_addNone = enable;
Populate();
SetTransition(selection);
}
void TransitionSelectionWidget::showEvent(QShowEvent *event)
{
FilterComboBox::showEvent(event);
@@ -155,7 +133,7 @@ void TransitionSelectionWidget::Populate()
{
const QSignalBlocker blocker(this);
clear();
PopulateTransitionSelection(this, _addCurrent, _addAny, true, _addNone);
PopulateTransitionSelection(this, _addCurrent, _addAny);
}
static bool isFirstEntry(const QComboBox *l, QString name, int idx)
@@ -185,9 +163,6 @@ TransitionSelection TransitionSelectionWidget::GetCurrentSelection() const
if (IsAnyTransitionSelected(text)) {
result._type = TransitionSelection::Type::ANY;
}
if (IsNoneTransitionSelected(text)) {
result._type = TransitionSelection::Type::NONE;
}
}
return result;
}
@@ -212,16 +187,6 @@ bool TransitionSelectionWidget::IsAnyTransitionSelected(
return false;
}
bool TransitionSelectionWidget::IsNoneTransitionSelected(
const QString &name) const
{
if (name == QString::fromStdString((obs_module_text(
"AdvSceneSwitcher.noneTransition")))) {
return isFirstEntry(this, name, currentIndex());
}
return false;
}
void TransitionSelectionWidget::SelectionChanged(const QString &)
{
emit TransitionChanged(GetCurrentSelection());

View File

@@ -16,7 +16,6 @@ public:
TRANSITION,
CURRENT,
ANY,
NONE,
};
Type GetType() const { return _type; }
@@ -34,11 +33,10 @@ class TransitionSelectionWidget : public FilterComboBox {
public:
TransitionSelectionWidget(QWidget *parent, bool current = true,
bool any = false, bool none = false);
bool any = false);
void SetTransition(const TransitionSelection &);
void EnableCurrentEntry(bool enable);
void EnableAnyEntry(bool enable);
void EnableNoneEntry(bool enable);
protected:
void showEvent(QShowEvent *event) override;
@@ -54,11 +52,9 @@ private:
TransitionSelection GetCurrentSelection() const;
bool IsCurrentTransitionSelected(const QString &name) const;
bool IsAnyTransitionSelected(const QString &name) const;
bool IsNoneTransitionSelected(const QString &name) const;
bool _addCurrent;
bool _addAny;
bool _addNone;
};
} // namespace advss