From aa2bea37491f15a5edd03fcc5f52b106b4895f61 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Fri, 4 Mar 2016 12:56:09 -0800 Subject: [PATCH] (API Change) libobs: Don't use signal for obs_load_sources (Note: This commit also changes the UI) Changed: ------------------- void obs_load_sources(obs_data_array_t *sources_list); To: ------------------- void obs_load_sources(obs_data_array_t *sources_list, obs_source_load_cb callback, void *private_data); Signals should really never be required to use to make some function work properly. The "source_load" signal was required for the obs_load_sources function, but it's meant more for loading private data in the settings, not for general loading of sources. This changes it so that a callback is explicitly required to load the sources. --- libobs/obs.c | 4 +++- libobs/obs.h | 5 ++++- obs/window-basic-main.cpp | 7 ++----- obs/window-basic-main.hpp | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/libobs/obs.c b/libobs/obs.c index 560ab0a79..966f2d96f 100644 --- a/libobs/obs.c +++ b/libobs/obs.c @@ -1474,7 +1474,8 @@ obs_source_t *obs_load_source(obs_data_t *source_data) return obs_load_source_type(source_data); } -void obs_load_sources(obs_data_array_t *array) +void obs_load_sources(obs_data_array_t *array, obs_load_source_cb cb, + void *private_data) { if (!obs) return; @@ -1507,6 +1508,7 @@ void obs_load_sources(obs_data_array_t *array) if (source->info.type == OBS_SOURCE_TYPE_TRANSITION) obs_transition_load(source, source_data); obs_source_load(source); + cb(private_data, source); } obs_data_release(source_data); } diff --git a/libobs/obs.h b/libobs/obs.h index 86b824932..9c98a18d1 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -550,8 +550,11 @@ EXPORT obs_data_t *obs_save_source(obs_source_t *source); /** Loads a source from settings data */ EXPORT obs_source_t *obs_load_source(obs_data_t *data); +typedef void (*obs_load_source_cb)(void *private_data, obs_source_t *source); + /** Loads sources from a data array */ -EXPORT void obs_load_sources(obs_data_array_t *array); +EXPORT void obs_load_sources(obs_data_array_t *array, obs_load_source_cb cb, + void *private_data); /** Saves sources to a data array */ EXPORT obs_data_array_t *obs_save_sources(void); diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index ce205056a..cef39f5cf 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -526,7 +526,7 @@ void OBSBasic::Load(const char *file) LoadAudioDevice(AUX_AUDIO_2, 4, data); LoadAudioDevice(AUX_AUDIO_3, 5, data); - obs_load_sources(sources); + obs_load_sources(sources, OBSBasic::SourceLoaded, this); if (transitions) LoadTransitions(transitions); @@ -835,8 +835,6 @@ void OBSBasic::InitOBSCallbacks() ProfileScope("OBSBasic::InitOBSCallbacks"); signalHandlers.reserve(signalHandlers.size() + 6); - signalHandlers.emplace_back(obs_get_signal_handler(), "source_load", - OBSBasic::SourceLoaded, this); signalHandlers.emplace_back(obs_get_signal_handler(), "source_remove", OBSBasic::SourceRemoved, this); signalHandlers.emplace_back(obs_get_signal_handler(), "source_activate", @@ -2031,10 +2029,9 @@ void OBSBasic::SceneItemDeselected(void *data, calldata_t *params) Q_ARG(bool, false)); } -void OBSBasic::SourceLoaded(void *data, calldata_t *params) +void OBSBasic::SourceLoaded(void *data, obs_source_t *source) { OBSBasic *window = static_cast(data); - obs_source_t *source = (obs_source_t*)calldata_ptr(params, "source"); if (obs_scene_from_source(source) != NULL) QMetaObject::invokeMethod(window, diff --git a/obs/window-basic-main.hpp b/obs/window-basic-main.hpp index 7ccf1a262..243ee9583 100644 --- a/obs/window-basic-main.hpp +++ b/obs/window-basic-main.hpp @@ -329,7 +329,7 @@ private: static void SceneItemRemoved(void *data, calldata_t *params); static void SceneItemSelected(void *data, calldata_t *params); static void SceneItemDeselected(void *data, calldata_t *params); - static void SourceLoaded(void *data, calldata_t *params); + static void SourceLoaded(void *data, obs_source_t *source); static void SourceRemoved(void *data, calldata_t *params); static void SourceActivated(void *data, calldata_t *params); static void SourceDeactivated(void *data, calldata_t *params);