From 7bc3c87163b229b25cce32323b718ba5f2fb6db2 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 14 Aug 2018 13:05:34 -0700 Subject: [PATCH] UI: Allow the transform dialog for group sub-sources --- UI/window-basic-transform.cpp | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/UI/window-basic-transform.cpp b/UI/window-basic-transform.cpp index 7b0b4b048..1f529ddaa 100644 --- a/UI/window-basic-transform.cpp +++ b/UI/window-basic-transform.cpp @@ -4,23 +4,28 @@ Q_DECLARE_METATYPE(OBSSceneItem); -static OBSSceneItem FindASelectedItem(OBSScene scene) +static bool find_sel(obs_scene_t *, obs_sceneitem_t *item, void *param) { - auto func = [] (obs_scene_t *scene, obs_sceneitem_t *item, void *param) - { - OBSSceneItem &dst = *reinterpret_cast(param); + OBSSceneItem &dst = *reinterpret_cast(param); - if (obs_sceneitem_selected(item)) { - dst = item; + if (obs_sceneitem_selected(item)) { + dst = item; + return false; + } + if (obs_sceneitem_is_group(item)) { + obs_sceneitem_group_enum_items(item, find_sel, param); + if (!!dst) { return false; } + } - UNUSED_PARAMETER(scene); - return true; - }; + return true; +}; +static OBSSceneItem FindASelectedItem(OBSScene scene) +{ OBSSceneItem item; - obs_scene_enum_items(scene, func, &item); + obs_scene_enum_items(scene, find_sel, &item); return item; } @@ -63,9 +68,10 @@ OBSBasicTransform::OBSBasicTransform(OBSBasic *parent) installEventFilter(CreateShortcutFilter()); - OBSScene curScene = main->GetCurrentScene(); - SetScene(curScene); - SetItem(FindASelectedItem(curScene)); + OBSSceneItem item = FindASelectedItem(main->GetCurrentScene()); + OBSScene scene = obs_sceneitem_get_scene(item); + SetScene(scene); + SetItem(item); channelChangedSignal.Connect(obs_get_signal_handler(), "channel_change", OBSChannelChanged, this);