diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index 47536c92f..6e2316434 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -300,6 +300,8 @@ Basic.TransitionProperties="Transition Properties" Basic.SceneTransitions="Scene Transitions" Basic.TransitionDuration="Duration" Basic.TogglePreviewProgramMode="Studio Mode" +Basic.EnablePreviewProgramMode="Enable Studio Mode" +Basic.DisablePreviewProgramMode="Disable Studio Mode" # undo Undo.Undo="Undo" diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index ec258a594..fa63e20b9 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2639,7 +2639,21 @@ void OBSBasic::CreateHotkeys() }; auto LoadHotkeyPair = [&](obs_hotkey_pair_id id, const char *name0, - const char *name1) { + const char *name1, + const char *oldName = NULL) { + if (oldName) { + const auto info = config_get_string(basicConfig, + "Hotkeys", oldName); + if (info) { + config_set_string(basicConfig, "Hotkeys", name0, + info); + config_set_string(basicConfig, "Hotkeys", name1, + info); + config_remove_value(basicConfig, "Hotkeys", + oldName); + config_save(basicConfig); + } + } OBSDataArrayAutoRelease array0 = obs_data_get_array(LoadHotkeyData(name0), "bindings"); OBSDataArrayAutoRelease array1 = @@ -2759,6 +2773,23 @@ void OBSBasic::CreateHotkeys() LoadHotkeyPair(togglePreviewHotkeys, "OBSBasic.EnablePreview", "OBSBasic.DisablePreview"); + togglePreviewProgramHotkeys = obs_hotkey_pair_register_frontend( + "OBSBasic.EnablePreviewProgram", + Str("Basic.EnablePreviewProgramMode"), + "OBSBasic.DisablePreviewProgram", + Str("Basic.DisablePreviewProgramMode"), + MAKE_CALLBACK(!basic.IsPreviewProgramMode(), + basic.EnablePreviewProgram, + "Enabling preview program"), + MAKE_CALLBACK(basic.IsPreviewProgramMode(), + basic.DisablePreviewProgram, + "Disabling preview program"), + this, this); + LoadHotkeyPair(togglePreviewProgramHotkeys, + "OBSBasic.EnablePreviewProgram", + "OBSBasic.DisablePreviewProgram", + "OBSBasic.TogglePreviewProgram"); + contextBarHotkeys = obs_hotkey_pair_register_frontend( "OBSBasic.ShowContextBar", Str("Basic.Main.ShowContextBar"), "OBSBasic.HideContextBar", Str("Basic.Main.HideContextBar"), @@ -2771,20 +2802,6 @@ void OBSBasic::CreateHotkeys() "OBSBasic.HideContextBar"); #undef MAKE_CALLBACK - auto togglePreviewProgram = [](void *data, obs_hotkey_id, - obs_hotkey_t *, bool pressed) { - if (pressed) - QMetaObject::invokeMethod(static_cast(data), - "on_modeSwitch_clicked", - Qt::QueuedConnection); - }; - - togglePreviewProgramHotkey = obs_hotkey_register_frontend( - "OBSBasic.TogglePreviewProgram", - Str("Basic.TogglePreviewProgramMode"), togglePreviewProgram, - this); - LoadHotkey(togglePreviewProgramHotkey, "OBSBasic.TogglePreviewProgram"); - auto transition = [](void *data, obs_hotkey_id, obs_hotkey_t *, bool pressed) { if (pressed) @@ -2846,8 +2863,8 @@ void OBSBasic::ClearHotkeys() obs_hotkey_pair_unregister(vcamHotkeys); obs_hotkey_pair_unregister(togglePreviewHotkeys); obs_hotkey_pair_unregister(contextBarHotkeys); + obs_hotkey_pair_unregister(togglePreviewProgramHotkeys); obs_hotkey_unregister(forceStreamingStopHotkey); - obs_hotkey_unregister(togglePreviewProgramHotkey); obs_hotkey_unregister(transitionHotkey); obs_hotkey_unregister(statsHotkey); obs_hotkey_unregister(screenshotHotkey); @@ -9047,6 +9064,16 @@ void OBSBasic::DisablePreview() EnablePreviewDisplay(false); } +void OBSBasic::EnablePreviewProgram() +{ + SetPreviewProgramMode(true); +} + +void OBSBasic::DisablePreviewProgram() +{ + SetPreviewProgramMode(false); +} + static bool nudge_callback(obs_scene_t *, obs_sceneitem_t *item, void *param) { if (obs_sceneitem_locked(item)) diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 868ed3c99..97bf84cfa 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -507,7 +507,7 @@ private: bool sceneDuplicationMode = true; bool swapScenesMode = true; volatile bool previewProgramMode = false; - obs_hotkey_id togglePreviewProgramHotkey = 0; + obs_hotkey_pair_id togglePreviewProgramHotkeys = 0; obs_hotkey_id transitionHotkey = 0; obs_hotkey_id statsHotkey = 0; obs_hotkey_id screenshotHotkey = 0; @@ -806,6 +806,9 @@ private slots: void EnablePreview(); void DisablePreview(); + void EnablePreviewProgram(); + void DisablePreviewProgram(); + void SceneCopyFilters(); void ScenePasteFilters();