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);