mirror of
https://github.com/WarmUpTill/SceneSwitcher.git
synced 2026-10-17 14:08:55 -05:00
Fix macro pause hotkeys not displaying macro name in OBS settings
This commit is contained in:
@@ -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();
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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 ¯oActions = _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();
|
||||
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user