diff --git a/obs/data/locale/en-US.ini b/obs/data/locale/en-US.ini
index 6ab950d11..338a6c0d6 100644
--- a/obs/data/locale/en-US.ini
+++ b/obs/data/locale/en-US.ini
@@ -359,6 +359,7 @@ Basic.Settings.General.Theme="Theme"
Basic.Settings.General.Language="Language"
Basic.Settings.General.WarnBeforeStartingStream="Show confirmation dialog when starting streams"
Basic.Settings.General.WarnBeforeStoppingStream="Show confirmation dialog when stopping streams"
+Basic.Settings.General.HideProjectorCursor="Hide cursor over projectors"
Basic.Settings.General.Snapping="Source Alignment Snapping"
Basic.Settings.General.ScreenSnapping="Snap Sources to edge of screen"
Basic.Settings.General.CenterSnapping="Snap Sources to horizontal and vertical center"
diff --git a/obs/forms/OBSBasicSettings.ui b/obs/forms/OBSBasicSettings.ui
index 736b75e9f..3b3d5d038 100644
--- a/obs/forms/OBSBasicSettings.ui
+++ b/obs/forms/OBSBasicSettings.ui
@@ -285,6 +285,13 @@
+ -
+
+
+ Basic.Settings.General.HideProjectorCursor
+
+
+
diff --git a/obs/window-basic-settings.cpp b/obs/window-basic-settings.cpp
index 3fa2ddafa..6c46f7e32 100644
--- a/obs/window-basic-settings.cpp
+++ b/obs/window-basic-settings.cpp
@@ -271,6 +271,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->theme, COMBO_CHANGED, GENERAL_CHANGED);
HookWidget(ui->warnBeforeStreamStart,CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->warnBeforeStreamStop, CHECK_CHANGED, GENERAL_CHANGED);
+ HookWidget(ui->hideProjectorCursor, 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);
@@ -823,6 +824,10 @@ void OBSBasicSettings::LoadGeneralSettings()
"BasicWindow", "WarnBeforeStoppingStream");
ui->warnBeforeStreamStop->setChecked(warnBeforeStreamStop);
+ bool hideProjectorCursor = config_get_bool(GetGlobalConfig(),
+ "BasicWindow", "HideProjectorCursor");
+ ui->hideProjectorCursor->setChecked(hideProjectorCursor);
+
loading = false;
}
@@ -2157,6 +2162,10 @@ void OBSBasicSettings::SaveGeneralSettings()
config_set_bool(GetGlobalConfig(), "BasicWindow",
"WarnBeforeStoppingStream",
ui->warnBeforeStreamStop->isChecked());
+
+ config_set_bool(GetGlobalConfig(), "BasicWindow",
+ "HideProjectorCursor",
+ ui->hideProjectorCursor->isChecked());
}
void OBSBasicSettings::SaveStream1Settings()
diff --git a/obs/window-projector.cpp b/obs/window-projector.cpp
index b6091d94d..cc086d3cd 100644
--- a/obs/window-projector.cpp
+++ b/obs/window-projector.cpp
@@ -26,6 +26,14 @@ OBSProjector::OBSProjector(QWidget *widget, obs_source_t *source_)
connect(this, &OBSQTDisplay::DisplayCreated, addDrawCallback);
+ bool hideCursor = config_get_bool(GetGlobalConfig(),
+ "BasicWindow", "HideProjectorCursor");
+ if (hideCursor) {
+ QPixmap empty(16, 16);
+ empty.fill(Qt::transparent);
+ setCursor(QCursor(empty));
+ }
+
App()->IncrementSleepInhibition();
}