Fix macro pause hotkeys not displaying macro name in OBS settings
Some checks are pending
debian-build / build (push) Waiting to run
Push to master / Check Formatting 🔍 (push) Waiting to run
Push to master / Build Project 🧱 (push) Waiting to run
Push to master / Create Release 🛫 (push) Blocked by required conditions

This commit is contained in:
WarmUpTill
2026-10-15 19:01:25 +02:00
committed by WarmUpTill
parent 62d443819e
commit ccaadb0ffd
7 changed files with 71 additions and 22 deletions

View File

@@ -13,6 +13,12 @@ bool MacroActionLoop::_registered = MacroActionFactory::Register(
{MacroActionLoop::Create, MacroActionLoopEdit::Create,
"AdvSceneSwitcher.action.loop"});
MacroActionLoop::MacroActionLoop(Macro *m)
: MacroAction(m),
_loopMacro(Macro::CreateNested())
{
}
bool MacroActionLoop::PerformAction()
{
int iterations = 0;
@@ -71,7 +77,7 @@ bool MacroActionLoop::Load(obs_data_t *obj)
if (obs_data_has_user_value(obj, "loopMacro")) {
OBSDataAutoRelease loopMacroData =
obs_data_get_obj(obj, "loopMacro");
_loopMacro = std::make_shared<Macro>();
_loopMacro = Macro::CreateNested();
_loopMacro->Load(loopMacroData);
}
_customWidgetHeight = obs_data_get_int(obj, "customWidgetHeight");
@@ -99,7 +105,7 @@ std::shared_ptr<MacroAction> MacroActionLoop::Copy() const
OBSDataAutoRelease data = obs_data_create();
_loopMacro->Save(data);
copy->_loopMacro = std::make_shared<Macro>();
copy->_loopMacro = Macro::CreateNested();
copy->_loopMacro->Load(data);
copy->_loopMacro->PostLoad();

View File

@@ -11,7 +11,7 @@ namespace advss {
class MacroActionLoop : public MacroAction {
public:
MacroActionLoop(Macro *m) : MacroAction(m) {}
MacroActionLoop(Macro *m);
bool PerformAction();
void LogAction() const;
bool Save(obs_data_t *obj) const;
@@ -22,7 +22,7 @@ public:
std::shared_ptr<MacroAction> Copy() const;
void ResolveVariablesToFixedValues();
std::shared_ptr<Macro> _loopMacro = std::make_shared<Macro>();
std::shared_ptr<Macro> _loopMacro;
IntVariable _maxIterations = 100;
int _customWidgetHeight = 0;

View File

@@ -18,6 +18,13 @@ bool MacroActionMacro::_registered = MacroActionFactory::Register(
{MacroActionMacro::Create, MacroActionMacroEdit::Create,
"AdvSceneSwitcher.action.macro"});
MacroActionMacro::MacroActionMacro(Macro *m)
: MacroAction(m),
MacroRefAction(m),
_nestedMacro(Macro::CreateNested())
{
}
void MacroActionMacro::AdjustActionState(Macro *macro) const
{
const auto &macroActions = _useElseSection ? macro->ElseActions()
@@ -266,7 +273,7 @@ bool MacroActionMacro::Load(obs_data_t *obj)
if (obs_data_has_user_value(obj, "nestedMacro")) {
OBSDataAutoRelease nestedMacroData =
obs_data_get_obj(obj, "nestedMacro");
_nestedMacro = std::make_shared<Macro>();
_nestedMacro = Macro::CreateNested();
_nestedMacro->Load(nestedMacroData);
}
@@ -303,7 +310,7 @@ std::shared_ptr<MacroAction> MacroActionMacro::Copy() const
OBSDataAutoRelease data = obs_data_create();
_nestedMacro->Save(data);
copy->_nestedMacro = std::make_shared<Macro>();
copy->_nestedMacro = Macro::CreateNested();
copy->_nestedMacro->Load(data);
copy->_nestedMacro->PostLoad();

View File

@@ -17,7 +17,7 @@ namespace advss {
class MacroActionMacro final : public MacroRefAction {
public:
MacroActionMacro(Macro *m) : MacroAction(m), MacroRefAction(m) {}
MacroActionMacro(Macro *m);
bool PerformAction();
void LogAction() const;
bool Save(obs_data_t *obj) const;
@@ -73,7 +73,7 @@ public:
std::string _actionId;
RegexConfig _regex;
RunOptions _runOptions = {};
std::shared_ptr<Macro> _nestedMacro = std::make_shared<Macro>();
std::shared_ptr<Macro> _nestedMacro;
int _customWidgetHeight = 0;
private:

View File

@@ -797,6 +797,14 @@ std::shared_ptr<Macro> Macro::Parent() const
return _parent.lock();
}
std::shared_ptr<Macro> Macro::CreateNested()
{
auto macro = std::make_shared<Macro>();
macro->_isNested = true;
macro->_registerHotkeys = false;
return macro;
}
void Macro::SetNestedParentMacro(Macro *parent)
{
_nestedParentMacro = parent;
@@ -934,20 +942,12 @@ bool Macro::Load(obs_data_t *obj)
"macroElseActionSplitterPosition");
obs_data_set_default_bool(obj, "registerHotkeys", true);
_registerHotkeys = obs_data_get_bool(obj, "registerHotkeys");
if (_registerHotkeys) {
SetupHotkeys();
}
OBSDataArrayAutoRelease pauseHotkey =
obs_data_get_array(obj, "pauseHotkey");
obs_hotkey_load(_pauseHotkey, pauseHotkey);
OBSDataArrayAutoRelease unpauseHotkey =
obs_data_get_array(obj, "unpauseHotkey");
obs_hotkey_load(_unpauseHotkey, unpauseHotkey);
OBSDataArrayAutoRelease togglePauseHotkey =
obs_data_get_array(obj, "togglePauseHotkey");
obs_hotkey_load(_togglePauseHotkey, togglePauseHotkey);
SetHotkeysDesc();
_registerHotkeys = !_isNested &&
obs_data_get_bool(obj, "registerHotkeys");
_pauseHotkeyData = obs_data_get_array(obj, "pauseHotkey");
_unpauseHotkeyData = obs_data_get_array(obj, "unpauseHotkey");
_togglePauseHotkeyData = obs_data_get_array(obj, "togglePauseHotkey");
_hotkeyLoadPending = true;
bool root = true;
OBSDataArrayAutoRelease conditions =
@@ -1022,8 +1022,29 @@ bool Macro::Load(obs_data_t *obj)
return true;
}
void Macro::LoadHotkeys()
{
if (!_hotkeyLoadPending) {
return;
}
_hotkeyLoadPending = false;
if (_registerHotkeys) {
SetupHotkeys();
}
obs_hotkey_load(_pauseHotkey, _pauseHotkeyData);
obs_hotkey_load(_unpauseHotkey, _unpauseHotkeyData);
obs_hotkey_load(_togglePauseHotkey, _togglePauseHotkeyData);
SetHotkeysDesc();
_pauseHotkeyData = nullptr;
_unpauseHotkeyData = nullptr;
_togglePauseHotkeyData = nullptr;
}
bool Macro::PostLoad()
{
LoadHotkeys();
for (auto &c : _conditions) {
c->WithLock([c]() { c->PostLoad(); });
}
@@ -1149,6 +1170,10 @@ static obs_hotkey_id registerHotkeyHelper(const std::string prefix,
void Macro::SetupHotkeys()
{
if (_isNested) {
return;
}
if (_pauseHotkey != OBS_INVALID_HOTKEY_ID ||
_unpauseHotkey != OBS_INVALID_HOTKEY_ID ||
_togglePauseHotkey != OBS_INVALID_HOTKEY_ID) {

View File

@@ -130,6 +130,7 @@ public:
void SetParent(std::shared_ptr<Macro> m) { _parent = m; }
std::shared_ptr<Macro> Parent() const;
static std::shared_ptr<Macro> CreateNested();
void SetNestedParentMacro(Macro *parent);
Macro *GetNestedParentMacro() const { return _nestedParentMacro; }
@@ -163,6 +164,7 @@ public:
private:
void SetupHotkeys();
void LoadHotkeys();
void ClearHotkeys() const;
void SetHotkeysDesc() const;
@@ -191,6 +193,7 @@ private:
std::weak_ptr<Macro> _parent;
Macro *_nestedParentMacro = nullptr;
bool _isNested = false;
uint32_t _groupSize = 0;
bool _isGroup = false;
bool _isCollapsed = false;
@@ -213,6 +216,10 @@ private:
obs_hotkey_id _pauseHotkey = OBS_INVALID_HOTKEY_ID;
obs_hotkey_id _unpauseHotkey = OBS_INVALID_HOTKEY_ID;
obs_hotkey_id _togglePauseHotkey = OBS_INVALID_HOTKEY_ID;
bool _hotkeyLoadPending = false;
OBSDataArrayAutoRelease _pauseHotkeyData;
OBSDataArrayAutoRelease _unpauseHotkeyData;
OBSDataArrayAutoRelease _togglePauseHotkeyData;
ActionTriggerMode _actionTriggerMode =
ActionTriggerMode::MACRO_RESULT_CHANGED;

View File

@@ -5,6 +5,10 @@ namespace advss {
bool MacroActionMacro::_registered = false;
const std::string MacroActionMacro::id = "macro";
MacroActionMacro::MacroActionMacro(Macro *m) : MacroAction(m), MacroRefAction(m)
{
}
bool MacroActionMacro::PerformAction()
{
return false;