Merge pull request #199 from Palakis/4.3-jimtree-studiomode-fix

[not ready] events: fix triggering of PreviewSceneChanged
This commit is contained in:
Stéphane Lepin 2018-07-29 17:01:48 +02:00 committed by GitHub
commit 454a68d1b7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 21 deletions

View File

@ -80,10 +80,6 @@ WSEvents::WSEvents(WSServer* srv) {
this, SLOT(Heartbeat())); this, SLOT(Heartbeat()));
statusTimer->start(2000); // equal to frontend's constant BITRATE_UPDATE_SECONDS 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; currentScene = nullptr;
QTimer::singleShot(1000, this, SLOT(deferredInitOperations())); 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) { else if (event == OBS_FRONTEND_EVENT_STUDIO_MODE_DISABLED) {
owner->OnStudioModeSwitched(false); owner->OnStudioModeSwitched(false);
} }
else if (event == OBS_FRONTEND_EVENT_PREVIEW_SCENE_CHANGED) {
owner->OnPreviewSceneChanged();
}
else if (event == OBS_FRONTEND_EVENT_EXIT) { else if (event == OBS_FRONTEND_EVENT_EXIT) {
owner->connectSceneSignals(nullptr); owner->connectSceneSignals(nullptr);
owner->OnExit(); owner->OnExit();
@ -310,13 +309,6 @@ void WSEvents::OnSceneChange() {
obs_data_set_array(data, "sources", sceneItems); obs_data_set_array(data, "sources", sceneItems);
broadcastUpdate("SwitchScenes", data); 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 * @category studio mode
* @since 4.1.0 * @since 4.1.0
*/ */
void WSEvents::SelectedSceneChanged(QListWidgetItem* current, QListWidgetItem* prev) { void WSEvents::OnPreviewSceneChanged() {
if (obs_frontend_preview_program_mode_active()) { if (obs_frontend_preview_program_mode_active()) {
OBSScene scene = Utils::SceneListItemToScene(current); OBSSourceAutoRelease scene = obs_frontend_get_current_preview_scene();
if (!scene) if (!scene)
return; return;
OBSSource sceneSource = obs_scene_get_source(scene); OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(scene);
OBSDataArrayAutoRelease sceneItems = Utils::GetSceneItems(sceneSource);
OBSDataAutoRelease data = obs_data_create(); 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); obs_data_set_array(data, "sources", sceneItems);
broadcastUpdate("PreviewSceneChanged", data); broadcastUpdate("PreviewSceneChanged", data);

View File

@ -49,8 +49,6 @@ class WSEvents : public QObject {
void StreamStatus(); void StreamStatus();
void Heartbeat(); void Heartbeat();
void TransitionDurationChanged(int ms); void TransitionDurationChanged(int ms);
void SelectedSceneChanged(
QListWidgetItem* current, QListWidgetItem* prev);
private: private:
WSServer* _srv; WSServer* _srv;
@ -97,6 +95,7 @@ class WSEvents : public QObject {
void OnReplayStopped(); void OnReplayStopped();
void OnStudioModeSwitched(bool enabled); void OnStudioModeSwitched(bool enabled);
void OnPreviewSceneChanged();
void OnExit(); void OnExit();