From 6d0d07abfe5151d53ef0ddcf4c5c064dc34bf54f Mon Sep 17 00:00:00 2001 From: Chris Angelico Date: Sat, 11 May 2019 05:46:47 +1000 Subject: [PATCH 1/3] Fire an event whenever an item is locked/unlocked --- src/WSEvents.cpp | 42 ++++++++++++++++++++++++++++++++++++++++++ src/WSEvents.h | 1 + 2 files changed, 43 insertions(+) diff --git a/src/WSEvents.cpp b/src/WSEvents.cpp index 4e978cc4..405cdebe 100644 --- a/src/WSEvents.cpp +++ b/src/WSEvents.cpp @@ -304,6 +304,8 @@ void WSEvents::connectSourceSignals(obs_source_t* source) { signal_handler_connect(sh, "item_remove", OnSceneItemDelete, this); signal_handler_connect(sh, "item_visible", OnSceneItemVisibilityChanged, this); + signal_handler_connect(sh, + "item_locked", OnSceneItemLockedChanged, this); signal_handler_connect(sh, "item_transform", OnSceneItemTransform, this); signal_handler_connect(sh, "item_select", OnSceneItemSelected, this); signal_handler_connect(sh, "item_deselect", OnSceneItemDeselected, this); @@ -333,6 +335,8 @@ void WSEvents::disconnectSourceSignals(obs_source_t* source) { signal_handler_disconnect(sh, "item_remove", OnSceneItemDelete, this); signal_handler_disconnect(sh, "item_visible", OnSceneItemVisibilityChanged, this); + signal_handler_disconnect(sh, + "item_locked", OnSceneItemLockedChanged, this); signal_handler_disconnect(sh, "item_transform", OnSceneItemTransform, this); signal_handler_disconnect(sh, "item_select", OnSceneItemSelected, this); signal_handler_disconnect(sh, "item_deselect", OnSceneItemDeselected, this); @@ -1453,6 +1457,44 @@ void WSEvents::OnSceneItemVisibilityChanged(void* param, calldata_t* data) { instance->broadcastUpdate("SceneItemVisibilityChanged", fields); } +/** + * An item's locked status has been toggled. + * + * @return {String} `scene-name` Name of the scene. + * @return {String} `item-name` Name of the item in the scene. + * @return {int} `item-id` Scene item ID + * @return {boolean} `item-locked` New locked state of the item. + * + * @api events + * @name SceneItemLockedChanged + * @category sources + * @since 4.7.0 + */ +void WSEvents::OnSceneItemLockedChanged(void* param, calldata_t* data) { + auto instance = reinterpret_cast(param); + + obs_scene_t* scene = nullptr; + calldata_get_ptr(data, "scene", &scene); + + obs_sceneitem_t* sceneItem = nullptr; + calldata_get_ptr(data, "item", &sceneItem); + + bool locked = false; + calldata_get_bool(data, "locked", &locked); + + const char* sceneName = + obs_source_get_name(obs_scene_get_source(scene)); + const char* sceneItemName = + obs_source_get_name(obs_sceneitem_get_source(sceneItem)); + + OBSDataAutoRelease fields = obs_data_create(); + obs_data_set_string(fields, "scene-name", sceneName); + obs_data_set_string(fields, "item-name", sceneItemName); + obs_data_set_int(fields, "item-id", obs_sceneitem_get_id(sceneItem)); + obs_data_set_bool(fields, "item-locked", locked); + instance->broadcastUpdate("SceneItemLockedChanged", fields); +} + /** * An item's transform has been changed. * diff --git a/src/WSEvents.h b/src/WSEvents.h index 684fe654..ec2621fe 100644 --- a/src/WSEvents.h +++ b/src/WSEvents.h @@ -136,6 +136,7 @@ private: static void OnSceneItemAdd(void* param, calldata_t* data); static void OnSceneItemDelete(void* param, calldata_t* data); static void OnSceneItemVisibilityChanged(void* param, calldata_t* data); + static void OnSceneItemLockedChanged(void* param, calldata_t* data); static void OnSceneItemTransform(void* param, calldata_t* data); static void OnSceneItemSelected(void* param, calldata_t* data); static void OnSceneItemDeselected(void* param, calldata_t* data); From ec1926f7a687507ecd67512986f045837e80ad32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Wed, 4 Mar 2020 11:26:48 +0100 Subject: [PATCH 2/3] events: fix @since value for SceneItemLockedChanged --- src/WSEvents.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/WSEvents.cpp b/src/WSEvents.cpp index 405cdebe..7a4e488a 100644 --- a/src/WSEvents.cpp +++ b/src/WSEvents.cpp @@ -1468,7 +1468,7 @@ void WSEvents::OnSceneItemVisibilityChanged(void* param, calldata_t* data) { * @api events * @name SceneItemLockedChanged * @category sources - * @since 4.7.0 + * @since unreleased */ void WSEvents::OnSceneItemLockedChanged(void* param, calldata_t* data) { auto instance = reinterpret_cast(param); From 45d5f4a760d5bf7871f829c22708264f256f6325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Lepin?= Date: Wed, 4 Mar 2020 14:04:26 +0100 Subject: [PATCH 3/3] events: rename SceneItemLockedChanged to SceneItemLockChanged --- src/WSEvents.cpp | 10 +++++----- src/WSEvents.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/WSEvents.cpp b/src/WSEvents.cpp index 7a4e488a..efc5980b 100644 --- a/src/WSEvents.cpp +++ b/src/WSEvents.cpp @@ -305,7 +305,7 @@ void WSEvents::connectSourceSignals(obs_source_t* source) { signal_handler_connect(sh, "item_visible", OnSceneItemVisibilityChanged, this); signal_handler_connect(sh, - "item_locked", OnSceneItemLockedChanged, this); + "item_locked", OnSceneItemLockChanged, this); signal_handler_connect(sh, "item_transform", OnSceneItemTransform, this); signal_handler_connect(sh, "item_select", OnSceneItemSelected, this); signal_handler_connect(sh, "item_deselect", OnSceneItemDeselected, this); @@ -336,7 +336,7 @@ void WSEvents::disconnectSourceSignals(obs_source_t* source) { signal_handler_disconnect(sh, "item_visible", OnSceneItemVisibilityChanged, this); signal_handler_disconnect(sh, - "item_locked", OnSceneItemLockedChanged, this); + "item_locked", OnSceneItemLockChanged, this); signal_handler_disconnect(sh, "item_transform", OnSceneItemTransform, this); signal_handler_disconnect(sh, "item_select", OnSceneItemSelected, this); signal_handler_disconnect(sh, "item_deselect", OnSceneItemDeselected, this); @@ -1466,11 +1466,11 @@ void WSEvents::OnSceneItemVisibilityChanged(void* param, calldata_t* data) { * @return {boolean} `item-locked` New locked state of the item. * * @api events - * @name SceneItemLockedChanged + * @name SceneItemLockChanged * @category sources * @since unreleased */ -void WSEvents::OnSceneItemLockedChanged(void* param, calldata_t* data) { +void WSEvents::OnSceneItemLockChanged(void* param, calldata_t* data) { auto instance = reinterpret_cast(param); obs_scene_t* scene = nullptr; @@ -1492,7 +1492,7 @@ void WSEvents::OnSceneItemLockedChanged(void* param, calldata_t* data) { obs_data_set_string(fields, "item-name", sceneItemName); obs_data_set_int(fields, "item-id", obs_sceneitem_get_id(sceneItem)); obs_data_set_bool(fields, "item-locked", locked); - instance->broadcastUpdate("SceneItemLockedChanged", fields); + instance->broadcastUpdate("SceneItemLockChanged", fields); } /** diff --git a/src/WSEvents.h b/src/WSEvents.h index ec2621fe..bca3ce87 100644 --- a/src/WSEvents.h +++ b/src/WSEvents.h @@ -136,7 +136,7 @@ private: static void OnSceneItemAdd(void* param, calldata_t* data); static void OnSceneItemDelete(void* param, calldata_t* data); static void OnSceneItemVisibilityChanged(void* param, calldata_t* data); - static void OnSceneItemLockedChanged(void* param, calldata_t* data); + static void OnSceneItemLockChanged(void* param, calldata_t* data); static void OnSceneItemTransform(void* param, calldata_t* data); static void OnSceneItemSelected(void* param, calldata_t* data); static void OnSceneItemDeselected(void* param, calldata_t* data);