From 6461b63623d77f9d4a73c7580e062f6038918fc6 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Thu, 30 Nov 2017 06:17:07 -0800 Subject: [PATCH] UI: Fix preview/program projectors being swapped If a preview projector was created in normal mode, it would become a studio projector in studio mode. The window title of the window projector would reflect that it was in fact a preview projector and not a program projector. --- UI/window-basic-main.cpp | 16 ++++------------ UI/window-basic-main.hpp | 10 +++++----- UI/window-projector.cpp | 13 ++----------- 3 files changed, 11 insertions(+), 28 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 6cc4fa921..97d61118f 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -3733,23 +3733,15 @@ void OBSBasic::CreateSourcePopupMenu(QListWidgetItem *item, bool preview) popup.addAction(ui->actionLockPreview); popup.addMenu(ui->scalingMenu); - const char *slot = IsPreviewProgramMode() - ? SLOT(OpenStudioProgramProjector()) - : SLOT(OpenPreviewProjector()); - previewProjector = new QMenu(QTStr("PreviewProjector")); AddProjectorMenuMonitors(previewProjector, this, - slot); + SLOT(OpenPreviewProjector())); popup.addMenu(previewProjector); - slot = IsPreviewProgramMode() - ? SLOT(OpenStudioProgramWindow()) - : SLOT(OpenPreviewWindow()); - QAction *previewWindow = popup.addAction( QTStr("PreviewWindow"), - this, slot); + this, SLOT(OpenPreviewWindow())); popup.addAction(previewWindow); @@ -4951,13 +4943,13 @@ void OBSBasic::on_program_customContextMenuRequested(const QPoint&) studioProgramProjector = new QMenu( QTStr("StudioProgramProjector")); AddProjectorMenuMonitors(studioProgramProjector, this, - SLOT(OpenPreviewProjector())); + SLOT(OpenStudioProgramProjector())); popup.addMenu(studioProgramProjector); QAction *studioProgramWindow = popup.addAction( QTStr("StudioProgramWindow"), - this, SLOT(OpenPreviewWindow())); + this, SLOT(OpenStudioProgramWindow())); popup.addAction(studioProgramWindow); diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index c7bfc4d37..fee372642 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -327,11 +327,6 @@ private: int disableOutputsRef = 0; - inline bool IsPreviewProgramMode() const - { - return os_atomic_load_bool(&previewProgramMode); - } - inline void OnActivate(); inline void OnDeactivate(); @@ -495,6 +490,11 @@ public: obs_service_t *GetService(); void SetService(obs_service_t *service); + inline bool IsPreviewProgramMode() const + { + return os_atomic_load_bool(&previewProgramMode); + } + bool StreamingActive() const; bool Active() const; diff --git a/UI/window-projector.cpp b/UI/window-projector.cpp index 50b9bd990..7b63a6237 100644 --- a/UI/window-projector.cpp +++ b/UI/window-projector.cpp @@ -73,12 +73,6 @@ void OBSProjector::Init(int monitor, bool window, QString title, show(); - if (studioProgram && !source) { - OBSBasic *main = - reinterpret_cast(App()->GetMainWindow()); - source = main->GetCurrentSceneSource(); - } - if (source) obs_source_inc_showing(source); @@ -99,6 +93,7 @@ void OBSProjector::Init(int monitor, bool window, QString title, void OBSProjector::OBSRender(void *data, uint32_t cx, uint32_t cy) { OBSProjector *window = reinterpret_cast(data); + OBSBasic *main = reinterpret_cast(App()->GetMainWindow()); uint32_t targetCX; uint32_t targetCY; @@ -126,14 +121,10 @@ void OBSProjector::OBSRender(void *data, uint32_t cx, uint32_t cy) gs_ortho(0.0f, float(targetCX), 0.0f, float(targetCY), -100.0f, 100.0f); gs_set_viewport(x, y, newCX, newCY); - if (window->useStudioProgram) { - OBSBasic *main = - reinterpret_cast(App()->GetMainWindow()); + if (!window->useStudioProgram && main->IsPreviewProgramMode()) { OBSSource curSource = main->GetCurrentSceneSource(); if (window->source != curSource) { - blog(LOG_INFO, "new scene for studio preview projector: '%s'", - obs_source_get_name(curSource)); obs_source_dec_showing(window->source); obs_source_inc_showing(curSource); window->source = curSource;