From cd918a7f4c9caf0e3c220be080305b59cfd52750 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Tue, 13 Feb 2024 03:27:33 -0600 Subject: [PATCH] UI: Move projector rename signal This moves the renaming of projectors from OBSBasic to OBSProjector. --- UI/window-basic-main.cpp | 5 ----- UI/window-projector.cpp | 19 +++++++++++++++++-- UI/window-projector.hpp | 5 +++-- 3 files changed, 20 insertions(+), 9 deletions(-) diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 2519f8e2c..46d40389b 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -3344,11 +3344,6 @@ void OBSBasic::RenameSources(OBSSource source, QString newName, volumes[i]->SetName(newName); } - for (size_t i = 0; i < projectors.size(); i++) { - if (projectors[i]->GetSource() == source) - projectors[i]->RenameProjector(prevName, newName); - } - if (vcamConfig.type == VCamOutputType::SourceOutput && prevName == QString::fromStdString(vcamConfig.source)) vcamConfig.source = newName.toStdString(); diff --git a/UI/window-projector.cpp b/UI/window-projector.cpp index 24793d553..e61f23182 100644 --- a/UI/window-projector.cpp +++ b/UI/window-projector.cpp @@ -21,8 +21,10 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, { OBSSource source = GetSource(); if (source) { - destroyedSignal.Connect(obs_source_get_signal_handler(source), - "destroy", OBSSourceDestroyed, this); + sigs.emplace_back(obs_source_get_signal_handler(source), + "rename", OBSSourceRenamed, this); + sigs.emplace_back(obs_source_get_signal_handler(source), + "destroy", OBSSourceDestroyed, this); } isAlwaysOnTop = config_get_bool(GetGlobalConfig(), "BasicWindow", @@ -106,6 +108,8 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, OBSProjector::~OBSProjector() { + sigs.clear(); + bool isMultiview = type == ProjectorType::Multiview; obs_display_remove_draw_callback( GetDisplay(), isMultiview ? OBSRenderMultiview : OBSRender, @@ -215,6 +219,17 @@ void OBSProjector::OBSRender(void *data, uint32_t cx, uint32_t cy) endRegion(); } +void OBSProjector::OBSSourceRenamed(void *data, calldata_t *params) +{ + OBSProjector *window = reinterpret_cast(data); + QString oldName = calldata_string(params, "prev_name"); + QString newName = calldata_string(params, "new_name"); + + QMetaObject::invokeMethod(window, "RenameProjector", + Q_ARG(QString, oldName), + Q_ARG(QString, newName)); +} + void OBSProjector::OBSSourceDestroyed(void *data, calldata_t *) { OBSProjector *window = reinterpret_cast(data); diff --git a/UI/window-projector.hpp b/UI/window-projector.hpp index 2a4bdd6d1..8be23d4d4 100644 --- a/UI/window-projector.hpp +++ b/UI/window-projector.hpp @@ -19,10 +19,11 @@ class OBSProjector : public OBSQTDisplay { private: OBSWeakSourceAutoRelease weakSource; - OBSSignal destroyedSignal; + std::vector sigs; static void OBSRenderMultiview(void *data, uint32_t cx, uint32_t cy); static void OBSRender(void *data, uint32_t cx, uint32_t cy); + static void OBSSourceRenamed(void *data, calldata_t *params); static void OBSSourceDestroyed(void *data, calldata_t *params); void mousePressEvent(QMouseEvent *event) override; @@ -53,6 +54,7 @@ private slots: void OpenWindowedProjector(); void AlwaysOnTopToggled(bool alwaysOnTop); void ScreenRemoved(QScreen *screen_); + void RenameProjector(QString oldName, QString newName); public: OBSProjector(QWidget *widget, obs_source_t *source_, int monitor, @@ -63,7 +65,6 @@ public: ProjectorType GetProjectorType(); int GetMonitor(); static void UpdateMultiviewProjectors(); - void RenameProjector(QString oldName, QString newName); void SetHideCursor(); bool IsAlwaysOnTop() const;