0
0
mirror of https://github.com/obsproject/obs-studio.git synced 2024-09-19 20:32:15 +02:00

UI: Move projector rename signal

This moves the renaming of projectors from OBSBasic to OBSProjector.
This commit is contained in:
cg2121 2024-02-13 03:27:33 -06:00 committed by tt2468
parent 023d9bd851
commit cd918a7f4c
3 changed files with 20 additions and 9 deletions

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();

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);

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;