SourceOrderChanged: include scene items list

This commit is contained in:
Stéphane L 2019-04-21 14:17:50 +02:00
parent 6b31ff7e79
commit ed2726c9d2
2 changed files with 26 additions and 6 deletions

View File

@ -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<obs_data_array_t*>(param);
obs_data_array_t* data = reinterpret_cast<obs_data_array_t*>(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<current_search*>(param);
current_search* search = reinterpret_cast<current_search*>(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<current_search*>(param);
current_search* search = reinterpret_cast<current_search*>(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<current_search*>(data);
current_search* search = reinterpret_cast<current_search*>(data);
const char* hk_name = obs_hotkey_get_name(hotkey);
if (hk_name == search->query) {

View File

@ -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<Object>} `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<WSEvents*>(param);
obs_scene_t* scene = nullptr;
calldata_get_ptr(data, "scene", &scene);
OBSScene scene = calldata_get_pointer<obs_scene_t>(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<obs_data_array_t*>(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);
}