UI: Move projector rename signal

This moves the renaming of projectors from OBSBasic to OBSProjector.
This commit is contained in:
cg2121
2024-05-11 17:51:47 -07:00
committed by tt2468
parent 023d9bd851
commit cd918a7f4c
3 changed files with 20 additions and 9 deletions
-5
View File
@@ -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();
+17 -2
View File
@@ -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<OBSProjector *>(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<OBSProjector *>(data);
+3 -2
View File
@@ -19,10 +19,11 @@ class OBSProjector : public OBSQTDisplay {
private:
OBSWeakSourceAutoRelease weakSource;
OBSSignal destroyedSignal;
std::vector<OBSSignal> 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;