From fc063444ca955250e28b88c9d55b9d4a4c4d32e0 Mon Sep 17 00:00:00 2001 From: Christoph Hohmann Date: Sat, 19 Sep 2015 12:49:37 +0200 Subject: [PATCH] UI: Add checkbox for visibility of new scene items Note: This functionality should probably be considered as a temporary solution. Ideally, sources should not be visible on creation until the user presses "OK" in the initial properties dialog. Also, the problem of initial visibility can additionally be solved by implementing the preview/program functionality. Once preview/program is implemented the need for this patch will be negated, and the option should probably be removed. Closes jp9000/obs-studio#483 --- obs/data/locale/en-US.ini | 1 + obs/forms/OBSBasicSourceSelect.ui | 10 ++++++++ obs/window-basic-source-select.cpp | 37 +++++++++++++++++++++++++----- 3 files changed, 42 insertions(+), 6 deletions(-) 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; }