diff --git a/CMakeLists.txt b/CMakeLists.txt index 6c464393..f1d20d77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,13 +48,13 @@ set(obs-websocket_HEADERS src/forms/settings-dialog.h) # --- Platform-independent build settings --- -add_library(obs-websocket MODULE +add_library(obs-websocket MODULE ${obs-websocket_SOURCES} ${obs-websocket_HEADERS}) add_dependencies(obs-websocket mbedcrypto) -include_directories( +include_directories( "${LIBOBS_INCLUDE_DIR}/../UI/obs-frontend-api" ${Qt5Core_INCLUDES} ${Qt5WebSockets_INCLUDES} @@ -62,7 +62,7 @@ include_directories( ${mbedcrypto_INCLUDES} "${CMAKE_SOURCE_DIR}/deps/mbedtls/include") -target_link_libraries(obs-websocket +target_link_libraries(obs-websocket libobs Qt5::Core Qt5::WebSockets diff --git a/src/WSEvents.cpp b/src/WSEvents.cpp index 52a6201f..f683a4a3 100644 --- a/src/WSEvents.cpp +++ b/src/WSEvents.cpp @@ -80,10 +80,6 @@ WSEvents::WSEvents(WSServer* srv) { this, SLOT(Heartbeat())); statusTimer->start(2000); // equal to frontend's constant BITRATE_UPDATE_SECONDS - QListWidget* sceneList = Utils::GetSceneListControl(); - connect(sceneList, SIGNAL(currentItemChanged(QListWidgetItem*, QListWidgetItem*)), - this, SLOT(SelectedSceneChanged(QListWidgetItem*, QListWidgetItem*))); - currentScene = nullptr; QTimer::singleShot(1000, this, SLOT(deferredInitOperations())); @@ -186,6 +182,9 @@ void WSEvents::FrontendEventHandler(enum obs_frontend_event event, void* private else if (event == OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED) { owner->OnStudioModeSwitched(false); } + else if (event == OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED) { + owner->OnPreviewSceneChanged(); + } else if (event == OBS_FRONTEND_EVENT_EXIT) { owner->connectSceneSignals(nullptr); owner->OnExit(); @@ -310,13 +309,6 @@ void WSEvents::OnSceneChange() { obs_data_set_array(data, "sources", sceneItems); broadcastUpdate("SwitchScenes", data); - - // Dirty fix : OBS blocks signals when swapping scenes in Studio Mode - // after transition end, so SelectedSceneChanged is never called... - if (obs_frontend_preview_program_mode_active()) { - QListWidget* list = Utils::GetSceneListControl(); - SelectedSceneChanged(list->currentItem(), nullptr); - } } /** @@ -922,17 +914,16 @@ void WSEvents::OnSceneItemVisibilityChanged(void* param, calldata_t* data) { * @category studio mode * @since 4.1.0 */ -void WSEvents::SelectedSceneChanged(QListWidgetItem* current, QListWidgetItem* prev) { +void WSEvents::OnPreviewSceneChanged() { if (obs_frontend_preview_program_mode_active()) { - OBSScene scene = Utils::SceneListItemToScene(current); + OBSSourceAutoRelease scene = obs_frontend_get_current_preview_scene(); if (!scene) return; - OBSSource sceneSource = obs_scene_get_source(scene); - OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(sceneSource); + OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(scene); OBSDataAutoRelease data = obs_data_create(); - obs_data_set_string(data, "scene-name", obs_source_get_name(sceneSource)); + obs_data_set_string(data, "scene-name", obs_source_get_name(scene)); obs_data_set_array(data, "sources", sceneItems); broadcastUpdate("PreviewSceneChanged", data); diff --git a/src/WSEvents.h b/src/WSEvents.h index f1b77b36..135fd089 100644 --- a/src/WSEvents.h +++ b/src/WSEvents.h @@ -49,8 +49,6 @@ class WSEvents : public QObject { void StreamStatus(); void Heartbeat(); void TransitionDurationChanged(int ms); - void SelectedSceneChanged( - QListWidgetItem* current, QListWidgetItem* prev); private: WSServer* _srv; @@ -97,6 +95,7 @@ class WSEvents : public QObject { void OnReplayStopped(); void OnStudioModeSwitched(bool enabled); + void OnPreviewSceneChanged(); void OnExit();