From 00fec4b5738d090c6d4e5e5d74c58706ec647c46 Mon Sep 17 00:00:00 2001 From: WarmUpTill Date: Wed, 17 Nov 2021 20:59:03 +0100 Subject: [PATCH] Fix macro hotkeys not working --- src/advanced-scene-switcher.cpp | 2 +- src/headers/switcher-data-structs.hpp | 2 +- src/macro-selection.cpp | 2 +- src/macro-tab.cpp | 16 ++++++++-------- src/macro.cpp | 24 ++++++++++++------------ 5 files changed, 23 insertions(+), 23 deletions(-) diff --git a/src/advanced-scene-switcher.cpp b/src/advanced-scene-switcher.cpp index ad997d52..69485aea 100644 --- a/src/advanced-scene-switcher.cpp +++ b/src/advanced-scene-switcher.cpp @@ -422,7 +422,7 @@ void SwitcherData::Start() void ResetMacroCounters() { for (auto &m : switcher->macros) { - m.ResetCount(); + m->ResetCount(); } } diff --git a/src/headers/switcher-data-structs.hpp b/src/headers/switcher-data-structs.hpp index 60f0db67..7fdf6270 100644 --- a/src/headers/switcher-data-structs.hpp +++ b/src/headers/switcher-data-structs.hpp @@ -95,7 +95,7 @@ struct SwitcherData { Duration cooldown; std::chrono::high_resolution_clock::time_point lastMatchTime; - std::deque macros; + std::deque> macros; std::condition_variable macroWaitCv; std::atomic_bool abortMacroWait = {false}; bool macroSceneSwitched = false; diff --git a/src/macro-selection.cpp b/src/macro-selection.cpp index 9b610259..b92352b0 100644 --- a/src/macro-selection.cpp +++ b/src/macro-selection.cpp @@ -16,7 +16,7 @@ MacroSelection::MacroSelection(QWidget *parent) : QComboBox(parent) firstItem->setEnabled(false); for (auto &m : switcher->macros) { - addItem(QString::fromStdString(m.Name())); + addItem(QString::fromStdString(m->Name())); } QWidget::connect(parent, SIGNAL(MacroAdded(const QString &)), this, diff --git a/src/macro-tab.cpp b/src/macro-tab.cpp index c7dc96e3..20927e34 100644 --- a/src/macro-tab.cpp +++ b/src/macro-tab.cpp @@ -47,7 +47,7 @@ bool AdvSceneSwitcher::addNewMacro(std::string &name) { std::lock_guard lock(switcher->m); - switcher->macros.emplace_back(name); + switcher->macros.emplace_back(std::make_shared(name)); } return true; } @@ -84,7 +84,7 @@ void AdvSceneSwitcher::on_macroRemove_clicked() switcher->abortMacroWait = true; switcher->macroWaitCv.notify_one(); int idx = ui->macros->currentRow(); - QString::fromStdString(switcher->macros[idx].Name()); + QString::fromStdString(switcher->macros[idx]->Name()); switcher->macros.erase(switcher->macros.begin() + idx); } @@ -108,7 +108,7 @@ void AdvSceneSwitcher::on_macroUp_clicked() switcher->macros.begin() + index - 1); for (auto &m : switcher->macros) { - m.ResolveMacroRef(); + m->ResolveMacroRef(); } } } @@ -125,7 +125,7 @@ void AdvSceneSwitcher::on_macroDown_clicked() switcher->macros.begin() + index + 1); for (auto &m : switcher->macros) { - m.ResolveMacroRef(); + m->ResolveMacroRef(); } } } @@ -312,12 +312,12 @@ void AdvSceneSwitcher::on_macros_itemChanged(QListWidgetItem *item) void AdvSceneSwitcher::setupMacroTab() { for (auto &m : switcher->macros) { - QString text = QString::fromStdString(m.Name()); + QString text = QString::fromStdString(m->Name()); QListWidgetItem *item = new QListWidgetItem(text, ui->macros); item->setData(Qt::UserRole, text); item->setFlags(item->flags() | Qt::ItemIsUserCheckable); - if (m.Paused()) { + if (m->Paused()) { item->setCheckState(Qt::Unchecked); } else { item->setCheckState(Qt::Checked); @@ -390,8 +390,8 @@ void AdvSceneSwitcher::CopyMacro() return; } - switcher->macros.back().Load(data); - switcher->macros.back().SetName(name); + switcher->macros.back()->Load(data); + switcher->macros.back()->SetName(name); obs_data_release(data); QString text = QString::fromStdString(name); diff --git a/src/macro.cpp b/src/macro.cpp index 05333ea1..9366c503 100644 --- a/src/macro.cpp +++ b/src/macro.cpp @@ -458,7 +458,7 @@ void SwitcherData::saveMacros(obs_data_t *obj) for (auto &m : macros) { obs_data_t *array_obj = obs_data_create(); - m.Save(array_obj); + m->Save(array_obj); obs_data_array_push_back(macroArray, array_obj); obs_data_release(array_obj); @@ -476,14 +476,14 @@ void SwitcherData::loadMacros(obs_data_t *obj) for (size_t i = 0; i < count; i++) { obs_data_t *array_obj = obs_data_array_item(macroArray, i); - macros.emplace_back(); - macros.back().Load(array_obj); + macros.emplace_back(std::make_shared()); + macros.back()->Load(array_obj); obs_data_release(array_obj); } obs_data_array_release(macroArray); for (auto &m : macros) { - m.ResolveMacroRef(); + m->ResolveMacroRef(); } } @@ -491,11 +491,11 @@ bool SwitcherData::checkMacros() { bool ret = false; for (auto &m : macros) { - if (m.CeckMatch()) { + if (m->CeckMatch()) { ret = true; // This has to be performed here for now as actions are // not performed immediately after checking conditions. - if (m.SwitchesScene()) { + if (m->SwitchesScene()) { switcher->macroSceneSwitched = true; } } @@ -509,11 +509,11 @@ bool SwitcherData::runMacros() // events are available - see: // https://github.com/obsproject/obs-studio/commit/feda1aaa283e8a99f6ba1159cfe6b9c1f2934a61 for (auto m : macros) { - if (m.Matched()) { - vblog(LOG_INFO, "running macro: %s", m.Name().c_str()); - if (!m.PerformAction()) { + if (m->Matched()) { + vblog(LOG_INFO, "running macro: %s", m->Name().c_str()); + if (!m->PerformAction()) { blog(LOG_WARNING, "abort macro: %s", - m.Name().c_str()); + m->Name().c_str()); return false; } } @@ -524,8 +524,8 @@ bool SwitcherData::runMacros() Macro *GetMacroByName(const char *name) { for (auto &m : switcher->macros) { - if (m.Name() == name) { - return &m; + if (m->Name() == name) { + return m.get(); } }