From 7bb430efd0518b0bec61664e3b39367e5c297e1b Mon Sep 17 00:00:00 2001 From: Palana Date: Tue, 7 Jul 2015 02:02:41 +0200 Subject: [PATCH] UI: Clean up sourceSceneRefs when removing scenes Previously the sourceSceneRefs were being cleaned up in OBSBasic::SceneItemRemoved; due to changes in e82018579bc4a69d55c653d175a910b9a06bd3bb the signal handler that called OBSBasic::SceneItemRemoved is now being removed before the scene triggers its item_remove signals --- obs/window-basic-main.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index a71d2956b..2967e7fad 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -1250,6 +1250,25 @@ void OBSBasic::RemoveScene(OBSSource source) delete sel; } + auto DeleteSceneRefs = [&](obs_sceneitem_t *si) + { + obs_source_t *source = obs_sceneitem_get_source(si); + sourceSceneRefs[source] -= 1; + + if (!sourceSceneRefs[source]) { + obs_source_remove(source); + sourceSceneRefs.erase(source); + } + }; + using DeleteSceneRefs_t = decltype(DeleteSceneRefs); + + obs_scene_enum_items(obs_scene_from_source(source), + [](obs_scene_t *, obs_sceneitem_t *si, void *data) + { + (*static_cast(data))(si); + return true; + }, static_cast(&DeleteSceneRefs)); + SaveProject(); } -- GitLab