From e1020a190932e2618e1ad52894e2861103c40ab7 Mon Sep 17 00:00:00 2001 From: WarmUpTill <19472752+WarmUpTill@users.noreply.github.com> Date: Thu, 30 Oct 2025 20:29:26 +0100 Subject: [PATCH] Fix poad load steps being executed too frequently --- lib/general.cpp | 2 +- lib/macro/macro-action-edit.cpp | 2 +- lib/macro/macro-condition-edit.cpp | 2 +- lib/macro/macro-edit.cpp | 6 +++--- lib/macro/macro-tab.cpp | 6 +++--- lib/queue/action-queue.cpp | 2 +- lib/utils/plugin-state-helpers.cpp | 3 ++- lib/utils/plugin-state-helpers.hpp | 2 +- 8 files changed, 13 insertions(+), 12 deletions(-) diff --git a/lib/general.cpp b/lib/general.cpp index fca668e0..7627dba2 100644 --- a/lib/general.cpp +++ b/lib/general.cpp @@ -459,7 +459,7 @@ void SwitcherData::LoadSettings(obs_data_t *obj) LoadHotkeys(obj); LoadUISettings(obj); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); // Reset on startup and scene collection change ResetLastOpenedTab(); diff --git a/lib/macro/macro-action-edit.cpp b/lib/macro/macro-action-edit.cpp index 9c7b13e1..9d314c29 100644 --- a/lib/macro/macro-action-edit.cpp +++ b/lib/macro/macro-action-edit.cpp @@ -117,7 +117,7 @@ void MacroActionEdit::ActionSelectionChanged(const QString &text) *_entryData = MacroActionFactory::Create(id, macro); (*_entryData)->SetIndex(idx); (*_entryData)->PostLoad(); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); } auto widget = MacroActionFactory::CreateWidget(id, this, *_entryData); QWidget::connect(widget, SIGNAL(HeaderInfoChanged(const QString &)), diff --git a/lib/macro/macro-condition-edit.cpp b/lib/macro/macro-condition-edit.cpp index a931c8d4..065f7cd7 100644 --- a/lib/macro/macro-condition-edit.cpp +++ b/lib/macro/macro-condition-edit.cpp @@ -239,7 +239,7 @@ void MacroConditionEdit::ConditionSelectionChanged(const QString &text) (*_entryData)->SetIndex(idx); (*_entryData)->SetLogicType(logic); (*_entryData)->PostLoad(); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); } auto widget = MacroConditionFactory::CreateWidget(id, this, *_entryData); diff --git a/lib/macro/macro-edit.cpp b/lib/macro/macro-edit.cpp index 36d5a520..2d75838f 100644 --- a/lib/macro/macro-edit.cpp +++ b/lib/macro/macro-edit.cpp @@ -1080,7 +1080,7 @@ void MacroEdit::AddMacroAction(Macro *macro, int idx, const std::string &id, macro->Actions().at(idx)->Load(data); } macro->Actions().at(idx)->PostLoad(); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); macro->UpdateActionIndices(); ui->actionsList->Insert( idx, @@ -1383,7 +1383,7 @@ void MacroEdit::AddMacroElseAction(Macro *macro, int idx, const std::string &id, macro->ElseActions().at(idx)->Load(data); } macro->ElseActions().at(idx)->PostLoad(); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); macro->UpdateElseActionIndices(); ui->elseActionsList->Insert( idx, new MacroActionEdit( @@ -1583,7 +1583,7 @@ void MacroEdit::AddMacroCondition(Macro *macro, int idx, const std::string &id, macro->Conditions().at(idx)->Load(data); } macro->Conditions().at(idx)->PostLoad(); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); (*cond)->SetLogicType(logic); macro->UpdateConditionIndices(); ui->conditionsList->Insert( diff --git a/lib/macro/macro-tab.cpp b/lib/macro/macro-tab.cpp index 7feee480..852d6f56 100644 --- a/lib/macro/macro-tab.cpp +++ b/lib/macro/macro-tab.cpp @@ -416,7 +416,7 @@ void AdvSceneSwitcher::ImportMacros() OBSDataAutoRelease array_obj = obs_data_array_item(array, i); auto macro = std::make_shared(); macro->Load(array_obj); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); if (macroNameExists(macro->Name()) && !ResolveMacroImportNameConflict(macro)) { @@ -444,7 +444,7 @@ void AdvSceneSwitcher::ImportMacros() for (const auto ¯o : importedMacros) { macro->PostLoad(); } - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); ui->macros->Reset(GetMacros(), GetGlobalMacroSettings()._highlightExecuted); @@ -752,7 +752,7 @@ void AdvSceneSwitcher::CopyMacro() newMacro->Load(data); newMacro->PostLoad(); newMacro->SetName(name); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); Macro::PrepareMoveToGroup(macro->Parent(), newMacro); ui->macros->Add(newMacro, macro); diff --git a/lib/queue/action-queue.cpp b/lib/queue/action-queue.cpp index 1132b243..d6223126 100644 --- a/lib/queue/action-queue.cpp +++ b/lib/queue/action-queue.cpp @@ -113,7 +113,7 @@ void ActionQueue::Add(const std::shared_ptr &action) action->Save(data); copy->Load(data); copy->PostLoad(); - RunPostLoadSteps(); + RunAndClearPostLoadSteps(); copy->ResolveVariablesToFixedValues(); _actions.emplace_back(copy); } else { diff --git a/lib/utils/plugin-state-helpers.cpp b/lib/utils/plugin-state-helpers.cpp index 977d77da..4e04192f 100644 --- a/lib/utils/plugin-state-helpers.cpp +++ b/lib/utils/plugin-state-helpers.cpp @@ -113,12 +113,13 @@ void RunLoadSteps(obs_data_t *obj) } } -void RunPostLoadSteps() +void RunAndClearPostLoadSteps() { std::lock_guard lock(postLoadMutex); for (const auto &func : getPostLoadSteps()) { func(); } + getPostLoadSteps().clear(); } void ClearPostLoadSteps() diff --git a/lib/utils/plugin-state-helpers.hpp b/lib/utils/plugin-state-helpers.hpp index e5f42110..4251d7d3 100644 --- a/lib/utils/plugin-state-helpers.hpp +++ b/lib/utils/plugin-state-helpers.hpp @@ -14,7 +14,7 @@ EXPORT void AddPostLoadStep(std::function); EXPORT void AddIntervalResetStep(std::function); void RunSaveSteps(obs_data_t *); void RunLoadSteps(obs_data_t *); -EXPORT void RunPostLoadSteps(); +EXPORT void RunAndClearPostLoadSteps(); void ClearPostLoadSteps(); EXPORT void AddPluginInitStep(std::function);