UI: Add undo/redo for "Add existing source"

Adds an undo/redo action for the "Add existing source", which previously
was missing.
This commit is contained in:
gxalpha
2021-08-18 16:21:00 +02:00
committed by Jim
parent c83b758f4d
commit d121c92fbb

View File

@@ -241,8 +241,51 @@ void OBSBasicSourceSelect::on_buttonBox_accepted()
if (!item)
return;
AddExisting(QT_TO_UTF8(item->text()), visible, false, nullptr,
QString source_name = item->text();
AddExisting(QT_TO_UTF8(source_name), visible, false, nullptr,
nullptr);
OBSBasic *main =
reinterpret_cast<OBSBasic *>(App()->GetMainWindow());
const char *scene_name =
obs_source_get_name(main->GetCurrentSceneSource());
auto undo = [scene_name, main](const std::string &data) {
UNUSED_PARAMETER(data);
obs_source_t *scene_source =
obs_get_source_by_name(scene_name);
main->SetCurrentScene(scene_source, true);
obs_source_release(scene_source);
obs_scene_t *scene = obs_get_scene_by_name(scene_name);
OBSSceneItem item;
auto cb = [](obs_scene_t *scene,
obs_sceneitem_t *sceneitem, void *data) {
UNUSED_PARAMETER(scene);
OBSSceneItem &last =
*reinterpret_cast<OBSSceneItem *>(data);
last = sceneitem;
return true;
};
obs_scene_enum_items(scene, cb, &item);
obs_sceneitem_remove(item);
obs_scene_release(scene);
};
auto redo = [scene_name, main, source_name,
visible](const std::string &data) {
UNUSED_PARAMETER(data);
obs_source_t *scene_source =
obs_get_source_by_name(scene_name);
main->SetCurrentScene(scene_source, true);
obs_source_release(scene_source);
AddExisting(QT_TO_UTF8(source_name), visible, false,
nullptr, nullptr);
};
undo_s.add_action(QTStr("Undo.Add").arg(source_name), undo,
redo, "", "");
} else {
if (ui->sourceName->text().isEmpty()) {
OBSMessageBox::warning(this,