diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index f9714a086..277072c14 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -784,6 +784,7 @@ Basic.Settings.General.SysTray="System Tray"
Basic.Settings.General.SysTrayWhenStarted="Minimize to system tray when started"
Basic.Settings.General.SystemTrayHideMinimize="Always minimize to system tray instead of task bar"
Basic.Settings.General.SaveProjectors="Save projectors on exit"
+Basic.Settings.General.CloseExistingProjectors="Limit one fullscreen projector per screen"
Basic.Settings.General.Preview="Preview"
Basic.Settings.General.OverflowHidden="Hide overflow"
Basic.Settings.General.OverflowAlwaysVisible="Overflow always visible"
diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui
index f0d40bb50..4b562a174 100644
--- a/UI/forms/OBSBasicSettings.ui
+++ b/UI/forms/OBSBasicSettings.ui
@@ -476,6 +476,13 @@
+ -
+
+
+ Basic.Settings.General.CloseExistingProjectors
+
+
+
-
diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp
index cb694e128..95b984b49 100644
--- a/UI/window-basic-main.cpp
+++ b/UI/window-basic-main.cpp
@@ -8431,6 +8431,17 @@ OBSProjector *OBSBasic::OpenProjector(obs_source_t *source, int monitor,
if (monitor > 9 || monitor > QGuiApplication::screens().size() - 1)
return nullptr;
+ bool closeProjectors = config_get_bool(GetGlobalConfig(), "BasicWindow",
+ "CloseExistingProjectors");
+
+ if (closeProjectors && monitor > -1) {
+ for (size_t i = projectors.size(); i > 0; i--) {
+ size_t idx = i - 1;
+ if (projectors[idx]->GetMonitor() == monitor)
+ DeleteProjector(projectors[idx]);
+ }
+ }
+
OBSProjector *projector =
new OBSProjector(nullptr, source, monitor, type);
diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp
index 661662805..a0afe5797 100644
--- a/UI/window-basic-settings.cpp
+++ b/UI/window-basic-settings.cpp
@@ -396,6 +396,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->systemTrayWhenStarted,CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->systemTrayAlways, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->saveProjectors, CHECK_CHANGED, GENERAL_CHANGED);
+ HookWidget(ui->closeProjectors, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->snappingEnabled, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->screenSnapping, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->centerSnapping, CHECK_CHANGED, GENERAL_CHANGED);
@@ -1259,6 +1260,10 @@ void OBSBasicSettings::LoadGeneralSettings()
"SaveProjectors");
ui->saveProjectors->setChecked(saveProjectors);
+ bool closeProjectors = config_get_bool(GetGlobalConfig(), "BasicWindow",
+ "CloseExistingProjectors");
+ ui->closeProjectors->setChecked(closeProjectors);
+
bool snappingEnabled = config_get_bool(GetGlobalConfig(), "BasicWindow",
"SnappingEnabled");
ui->snappingEnabled->setChecked(snappingEnabled);
@@ -3172,6 +3177,11 @@ void OBSBasicSettings::SaveGeneralSettings()
"SaveProjectors",
ui->saveProjectors->isChecked());
+ if (WidgetChanged(ui->closeProjectors))
+ config_set_bool(GetGlobalConfig(), "BasicWindow",
+ "CloseExistingProjectors",
+ ui->closeProjectors->isChecked());
+
if (WidgetChanged(ui->studioPortraitLayout)) {
config_set_bool(GetGlobalConfig(), "BasicWindow",
"StudioPortraitLayout",