WSRequestHandler(SceneItems): fix DuplicateSceneItem

This commit is contained in:
Stéphane Lepin 2019-11-15 20:39:39 +01:00
parent 973b4b9f70
commit f83317f7c8

View File

@ -526,18 +526,6 @@ RpcResponse WSRequestHandler::DeleteSceneItem(const RpcRequest& request) {
return request.success(); return request.success();
} }
struct DuplicateSceneItemData {
obs_sceneitem_t *referenceItem;
obs_source_t *fromSource;
obs_sceneitem_t *newItem;
};
static void DuplicateSceneItem(void *_data, obs_scene_t *scene) {
DuplicateSceneItemData *data = (DuplicateSceneItemData *)_data;
data->newItem = obs_scene_add(scene, data->fromSource);
obs_sceneitem_set_visible(data->newItem, obs_sceneitem_visible(data->referenceItem));
}
/** /**
* Duplicates a scene item. * Duplicates a scene item.
* *
@ -558,6 +546,12 @@ static void DuplicateSceneItem(void *_data, obs_scene_t *scene) {
* @since 4.5.0 * @since 4.5.0
*/ */
RpcResponse WSRequestHandler::DuplicateSceneItem(const RpcRequest& request) { RpcResponse WSRequestHandler::DuplicateSceneItem(const RpcRequest& request) {
struct DuplicateSceneItemData {
obs_sceneitem_t *referenceItem;
obs_source_t *fromSource;
obs_sceneitem_t *newItem;
};
if (!request.hasField("item")) { if (!request.hasField("item")) {
return request.failed("missing request parameters"); return request.failed("missing request parameters");
} }
@ -585,7 +579,11 @@ RpcResponse WSRequestHandler::DuplicateSceneItem(const RpcRequest& request) {
data.referenceItem = referenceItem; data.referenceItem = referenceItem;
obs_enter_graphics(); obs_enter_graphics();
obs_scene_atomic_update(toScene, DuplicateSceneItem, &data); obs_scene_atomic_update(toScene, [](void *_data, obs_scene_t *scene) {
auto data = (DuplicateSceneItemData*)_data;
data->newItem = obs_scene_add(scene, data->fromSource);
obs_sceneitem_set_visible(data->newItem, obs_sceneitem_visible(data->referenceItem));
}, &data);
obs_leave_graphics(); obs_leave_graphics();
obs_sceneitem_t *newItem = data.newItem; obs_sceneitem_t *newItem = data.newItem;