From ed2726c9d2c71ada9d58f7831061f93dcb29ed84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20L?= Date: Sun, 21 Apr 2019 14:17:50 +0200 Subject: [PATCH] SourceOrderChanged: include scene items list --- src/Utils.cpp | 8 ++++---- src/WSEvents.cpp | 24 ++++++++++++++++++++++-- 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/Utils.cpp b/src/Utils.cpp index 0fe2fd8e..19b0a75b 100644 --- a/src/Utils.cpp +++ b/src/Utils.cpp @@ -87,7 +87,7 @@ obs_data_array_t* Utils::GetSceneItems(obs_source_t* source) { obs_sceneitem_t* currentItem, void* param) { - obs_data_array_t* data = static_cast(param); + obs_data_array_t* data = reinterpret_cast(param); OBSDataAutoRelease itemData = GetSceneItemData(currentItem); obs_data_array_insert(data, 0, itemData); @@ -166,7 +166,7 @@ obs_sceneitem_t* Utils::GetSceneItemFromName(obs_source_t* source, QString name) obs_sceneitem_t* currentItem, void* param) { - current_search* search = static_cast(param); + current_search* search = reinterpret_cast(param); QString currentItemName = obs_source_get_name(obs_sceneitem_get_source(currentItem)); @@ -202,7 +202,7 @@ obs_sceneitem_t* Utils::GetSceneItemFromId(obs_source_t* source, size_t id) { obs_sceneitem_t* currentItem, void* param) { - current_search* search = static_cast(param); + current_search* search = reinterpret_cast(param); if (obs_sceneitem_get_id(currentItem) == search->query) { search->result = currentItem; @@ -499,7 +499,7 @@ obs_hotkey_t* Utils::FindHotkeyByName(QString name) { search.result = nullptr; obs_enum_hotkeys([](void* data, obs_hotkey_id id, obs_hotkey_t* hotkey) { - current_search* search = static_cast(data); + current_search* search = reinterpret_cast(data); const char* hk_name = obs_hotkey_get_name(hotkey); if (hk_name == search->query) { diff --git a/src/WSEvents.cpp b/src/WSEvents.cpp index 5a6f2303..20ff2397 100644 --- a/src/WSEvents.cpp +++ b/src/WSEvents.cpp @@ -1101,6 +1101,9 @@ void WSEvents::OnSourceFilterOrderChanged(void* param, calldata_t* data) { * Scene items have been reordered. * * @return {String} `scene-name` Name of the scene where items have been reordered. + * @return {Array} `scene-items` Ordered list of scene items + * @return {String} `scene-items.*.source-name` Item source name + * @return {int} `scene-items.*.item-id` Scene item unique ID * * @api events * @name SourceOrderChanged @@ -1110,12 +1113,29 @@ void WSEvents::OnSourceFilterOrderChanged(void* param, calldata_t* data) { void WSEvents::OnSceneReordered(void* param, calldata_t* data) { auto instance = reinterpret_cast(param); - obs_scene_t* scene = nullptr; - calldata_get_ptr(data, "scene", &scene); + OBSScene scene = calldata_get_pointer(data, "scene"); + if (!scene) { + return; + } + + OBSDataArrayAutoRelease sceneItems = obs_data_array_create(); + obs_scene_enum_items(scene, [](obs_scene_t* scene, obs_sceneitem_t* sceneItem, void* param) { + obs_data_array_t* sceneItems = reinterpret_cast(param); + + OBSSource itemSource = obs_sceneitem_get_source(sceneItem); + + OBSDataAutoRelease item = obs_data_create(); + obs_data_set_string(item, "source-name", obs_source_get_name(itemSource)); + obs_data_set_int(item, "item-id", obs_sceneitem_get_id(sceneItem)); + obs_data_array_push_back(sceneItems, item); + + return true; + }, sceneItems); OBSDataAutoRelease fields = obs_data_create(); obs_data_set_string(fields, "scene-name", obs_source_get_name(obs_scene_get_source(scene))); + obs_data_set_array(fields, "scene-items", sceneItems); instance->broadcastUpdate("SourceOrderChanged", fields); }