diff --git a/UI/source-tree.hpp b/UI/source-tree.hpp index 00c0d58da93a6217cf9c1566e28b01af10602127..bf5569c85be204b0a8473a8def1bf4dbc0f3bfdc 100644 --- a/UI/source-tree.hpp +++ b/UI/source-tree.hpp @@ -184,6 +184,7 @@ public: public slots: inline void ReorderItems() { GetStm()->ReorderItems(); } + inline void RefreshItems() { GetStm()->SceneChanged(); } void Remove(OBSSceneItem item); void GroupSelectedItems(); void UngroupSelectedGroups(); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index ea785b149d90e98d51f3ee1a6003884dd1dd6e65..119d4ded3e826ac190f6600b4089b05d4fbff15e 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2541,6 +2541,8 @@ void OBSBasic::AddScene(OBSSource source) this), std::make_shared(handler, "reorder", OBSBasic::SceneReordered, this), + std::make_shared(handler, "refresh", + OBSBasic::SceneRefreshed, this), }); item->setData(static_cast(QtDataRole::OBSSignals), @@ -3240,6 +3242,15 @@ void OBSBasic::ReorderSources(OBSScene scene) SaveProject(); } +void OBSBasic::RefreshSources(OBSScene scene) +{ + if (scene != GetCurrentScene() || ui->sources->IgnoreReorder()) + return; + + ui->sources->RefreshItems(); + SaveProject(); +} + /* OBS Callbacks */ void OBSBasic::SceneReordered(void *data, calldata_t *params) @@ -3252,6 +3263,16 @@ void OBSBasic::SceneReordered(void *data, calldata_t *params) Q_ARG(OBSScene, OBSScene(scene))); } +void OBSBasic::SceneRefreshed(void *data, calldata_t *params) +{ + OBSBasic *window = static_cast(data); + + obs_scene_t *scene = (obs_scene_t *)calldata_ptr(params, "scene"); + + QMetaObject::invokeMethod(window, "RefreshSources", + Q_ARG(OBSScene, OBSScene(scene))); +} + void OBSBasic::SceneItemAdded(void *data, calldata_t *params) { OBSBasic *window = static_cast(data); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 481244faa815a9270b65a5e89a7bab94accdc568..4b2b1e846ed360148f1dd7463bf4185c18a14f4d 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -580,6 +580,7 @@ private slots: void ToggleAlwaysOnTop(); void ReorderSources(OBSScene scene); + void RefreshSources(OBSScene scene); void ProcessHotkey(obs_hotkey_id id, bool pressed); @@ -661,6 +662,7 @@ private slots: private: /* OBS Callbacks */ static void SceneReordered(void *data, calldata_t *params); + static void SceneRefreshed(void *data, calldata_t *params); static void SceneItemAdded(void *data, calldata_t *params); static void SceneItemSelected(void *data, calldata_t *params); static void SceneItemDeselected(void *data, calldata_t *params);