diff --git a/obs/data/locale/en-US.ini b/obs/data/locale/en-US.ini index f140d603f..2810b4bfa 100644 --- a/obs/data/locale/en-US.ini +++ b/obs/data/locale/en-US.ini @@ -157,6 +157,7 @@ Basic.Main.PreviewDisabled="Preview is currently disabled" Basic.SourceSelect="Create/Select Source" Basic.SourceSelect.CreateNew="Create new" Basic.SourceSelect.AddExisting="Add Existing" +Basic.SourceSelect.AddVisible="Make source visible" # properties window Basic.PropertiesWindow="Properties for '%1'" diff --git a/obs/forms/OBSBasicSourceSelect.ui b/obs/forms/OBSBasicSourceSelect.ui index a2bafd58a..455cfd88f 100644 --- a/obs/forms/OBSBasicSourceSelect.ui +++ b/obs/forms/OBSBasicSourceSelect.ui @@ -49,6 +49,16 @@ + + + + Basic.SourceSelect.AddVisible + + + true + + + diff --git a/obs/window-basic-source-select.cpp b/obs/window-basic-source-select.cpp index aa9f8a4c2..c433c5c9a 100644 --- a/obs/window-basic-source-select.cpp +++ b/obs/window-basic-source-select.cpp @@ -21,6 +21,11 @@ #include "qt-wrappers.hpp" #include "obs-app.hpp" +struct AddSourceData { + obs_source_t *source; + bool visible; +}; + bool OBSBasicSourceSelect::EnumSources(void *data, obs_source_t *source) { OBSBasicSourceSelect *window = static_cast(data); @@ -79,7 +84,16 @@ void OBSBasicSourceSelect::SourceRemoved(OBSSource source) delete items[0]; } -static void AddExisting(const char *name) +static void AddSource(void *_data, obs_scene_t *scene) +{ + AddSourceData *data = (AddSourceData *)_data; + obs_sceneitem_t *sceneitem; + + sceneitem = obs_scene_add(scene, data->source); + obs_sceneitem_set_visible(sceneitem, data->visible); +} + +static void AddExisting(const char *name, const bool visible) { obs_source_t *source = obs_get_output_source(0); obs_scene_t *scene = obs_scene_from_source(source); @@ -88,14 +102,19 @@ static void AddExisting(const char *name) source = obs_get_source_by_name(name); if (source) { - obs_scene_add(scene, source); + AddSourceData data; + data.source = source; + data.visible = visible; + obs_scene_atomic_update(scene, AddSource, &data); + obs_source_release(source); } obs_scene_release(scene); } -bool AddNew(QWidget *parent, const char *id, const char *name) +bool AddNew(QWidget *parent, const char *id, const char *name, + const bool visible) { obs_source_t *source = obs_get_output_source(0); obs_scene_t *scene = obs_scene_from_source(source); @@ -115,7 +134,11 @@ bool AddNew(QWidget *parent, const char *id, const char *name) if (source) { obs_add_source(source); - obs_scene_add(scene, source); + + AddSourceData data; + data.source = source; + data.visible = visible; + obs_scene_atomic_update(scene, AddSource, &data); success = true; } @@ -130,13 +153,14 @@ bool AddNew(QWidget *parent, const char *id, const char *name) void OBSBasicSourceSelect::on_buttonBox_accepted() { bool useExisting = ui->selectExisting->isChecked(); + bool visible = ui->sourceVisible->isChecked(); if (useExisting) { QListWidgetItem *item = ui->sourceList->currentItem(); if (!item) return; - AddExisting(QT_TO_UTF8(item->text())); + AddExisting(QT_TO_UTF8(item->text()), visible); } else { if (ui->sourceName->text().isEmpty()) { QMessageBox::information(this, @@ -145,7 +169,8 @@ void OBSBasicSourceSelect::on_buttonBox_accepted() return; } - if (!AddNew(this, id, QT_TO_UTF8(ui->sourceName->text()))) + if (!AddNew(this, id, QT_TO_UTF8(ui->sourceName->text()), + visible)) return; }