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",