diff --git a/src/WSRequestHandler.cpp b/src/WSRequestHandler.cpp index 2cadf9c0..321fa5a6 100644 --- a/src/WSRequestHandler.cpp +++ b/src/WSRequestHandler.cpp @@ -38,7 +38,6 @@ QHash WSRequestHandler::messageMap { { "GetCurrentScene", WSRequestHandler::HandleGetCurrentScene }, { "GetSceneList", WSRequestHandler::HandleGetSceneList }, - { "SetSceneItemOrder", WSRequestHandler::HandleSetSceneItemOrder }, { "SetSourceRender", WSRequestHandler::HandleSetSceneItemRender }, // Retrocompat { "SetSceneItemRender", WSRequestHandler::HandleSetSceneItemRender }, { "SetSceneItemPosition", WSRequestHandler::HandleSetSceneItemPosition }, @@ -49,6 +48,7 @@ QHash WSRequestHandler::messageMap { { "ResetSceneItem", WSRequestHandler::HandleResetSceneItem }, { "DeleteSceneItem", WSRequestHandler::HandleDeleteSceneItem }, { "DuplicateSceneItem", WSRequestHandler::HandleDuplicateSceneItem }, + { "ReorderSceneItems", WSRequestHandler::HandleReorderSceneItems }, { "GetStreamingStatus", WSRequestHandler::HandleGetStreamingStatus }, { "StartStopStreaming", WSRequestHandler::HandleStartStopStreaming }, diff --git a/src/WSRequestHandler.h b/src/WSRequestHandler.h index a3d13847..cb259827 100644 --- a/src/WSRequestHandler.h +++ b/src/WSRequestHandler.h @@ -66,7 +66,6 @@ class WSRequestHandler : public QObject { static void HandleGetCurrentScene(WSRequestHandler* req); static void HandleGetSceneList(WSRequestHandler* req); - static void HandleSetSceneItemOrder(WSRequestHandler* req); static void HandleSetSceneItemRender(WSRequestHandler* req); static void HandleSetSceneItemPosition(WSRequestHandler* req); static void HandleSetSceneItemTransform(WSRequestHandler* req); @@ -76,6 +75,7 @@ class WSRequestHandler : public QObject { static void HandleResetSceneItem(WSRequestHandler* req); static void HandleDuplicateSceneItem(WSRequestHandler* req); static void HandleDeleteSceneItem(WSRequestHandler* req); + static void HandleReorderSceneItems(WSRequestHandler* req); static void HandleGetStreamingStatus(WSRequestHandler* req); static void HandleStartStopStreaming(WSRequestHandler* req); diff --git a/src/WSRequestHandler_Scenes.cpp b/src/WSRequestHandler_Scenes.cpp index 928f8e16..bebdb9c2 100644 --- a/src/WSRequestHandler_Scenes.cpp +++ b/src/WSRequestHandler_Scenes.cpp @@ -90,11 +90,11 @@ void WSRequestHandler::HandleGetSceneList(WSRequestHandler* req) { * @param {String (optional)} `items[].name` Name of a scene item. Sufficiently unique if no scene items share sources within the scene. * * @api requests -* @name SetSceneItemOrder +* @name ReorderSceneItems * @category scenes * @since 4.5.0 */ -void WSRequestHandler::HandleSetSceneItemOrder(WSRequestHandler* req) { +void WSRequestHandler::HandleReorderSceneItems(WSRequestHandler* req) { QString sceneName = obs_data_get_string(req->data, "scene"); OBSSourceAutoRelease scene = Utils::GetSceneFromNameOrCurrent(sceneName); if (!scene) { @@ -113,7 +113,7 @@ void WSRequestHandler::HandleSetSceneItemOrder(WSRequestHandler* req) { std::vector newOrder; newOrder.reserve(count); - for (size_t i = 0; i < count; i++) { + for (size_t i = 0; i < count; ++i) { OBSDataAutoRelease item = obs_data_array_item(items, i); OBSSceneItemAutoRelease sceneItem = Utils::GetSceneItemFromItem(scene, item); @@ -124,7 +124,7 @@ void WSRequestHandler::HandleSetSceneItemOrder(WSRequestHandler* req) { return; } - for (size_t j = 0; j <= i; j++) { + for (size_t j = 0; j <= i; ++j) { if (sceneItem == newOrder[j]) { req->SendErrorResponse("Duplicate sceneItem in specified order"); return; @@ -140,5 +140,9 @@ void WSRequestHandler::HandleSetSceneItemOrder(WSRequestHandler* req) { return; } + for (auto const& item: newOrder) { + obs_sceneitem_release(item); + } + req->SendOKResponse(); }