|
@@ -773,7 +773,7 @@ void OBSBasicFilters::on_removeAsyncFilter_clicked()
|
|
|
OBSSource filter = GetFilter(ui->asyncFilters->currentRow(), true);
|
|
|
if (filter) {
|
|
|
if (QueryRemove(this, filter))
|
|
|
- obs_source_filter_remove(source, filter);
|
|
|
+ delete_filter(filter);
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -815,73 +815,7 @@ void OBSBasicFilters::on_removeEffectFilter_clicked()
|
|
|
OBSSource filter = GetFilter(ui->effectFilters->currentRow(), false);
|
|
|
if (filter) {
|
|
|
if (QueryRemove(this, filter)) {
|
|
|
- obs_data_t *wrapper = obs_save_source(filter);
|
|
|
- std::string parent_name(obs_source_get_name(source));
|
|
|
- obs_data_set_string(wrapper, "undo_name",
|
|
|
- parent_name.c_str());
|
|
|
-
|
|
|
- std::string scene_name = obs_source_get_name(
|
|
|
- reinterpret_cast<OBSBasic *>(
|
|
|
- App()->GetMainWindow())
|
|
|
- ->GetCurrentSceneSource());
|
|
|
- auto undo = [scene_name](const std::string &data) {
|
|
|
- obs_source_t *ssource = obs_get_source_by_name(
|
|
|
- scene_name.c_str());
|
|
|
- reinterpret_cast<OBSBasic *>(
|
|
|
- App()->GetMainWindow())
|
|
|
- ->SetCurrentScene(ssource, true);
|
|
|
- obs_source_release(ssource);
|
|
|
-
|
|
|
- obs_data_t *dat =
|
|
|
- obs_data_create_from_json(data.c_str());
|
|
|
- obs_source_t *source = obs_get_source_by_name(
|
|
|
- obs_data_get_string(dat, "undo_name"));
|
|
|
- obs_source_t *filter = obs_load_source(dat);
|
|
|
- obs_source_filter_add(source, filter);
|
|
|
-
|
|
|
- obs_data_release(dat);
|
|
|
- obs_source_release(source);
|
|
|
- obs_source_release(filter);
|
|
|
- };
|
|
|
-
|
|
|
- obs_data_t *rwrapper = obs_data_create();
|
|
|
- obs_data_set_string(rwrapper, "fname",
|
|
|
- obs_source_get_name(filter));
|
|
|
- obs_data_set_string(rwrapper, "sname",
|
|
|
- parent_name.c_str());
|
|
|
- auto redo = [scene_name](const std::string &data) {
|
|
|
- obs_source_t *ssource = obs_get_source_by_name(
|
|
|
- scene_name.c_str());
|
|
|
- reinterpret_cast<OBSBasic *>(
|
|
|
- App()->GetMainWindow())
|
|
|
- ->SetCurrentScene(ssource, true);
|
|
|
- obs_source_release(ssource);
|
|
|
-
|
|
|
- obs_data_t *dat =
|
|
|
- obs_data_create_from_json(data.c_str());
|
|
|
- obs_source_t *source = obs_get_source_by_name(
|
|
|
- obs_data_get_string(dat, "sname"));
|
|
|
- obs_source_t *filter =
|
|
|
- obs_source_get_filter_by_name(
|
|
|
- source, obs_data_get_string(
|
|
|
- dat, "fname"));
|
|
|
- obs_source_filter_remove(source, filter);
|
|
|
-
|
|
|
- obs_data_release(dat);
|
|
|
- obs_source_release(filter);
|
|
|
- obs_source_release(source);
|
|
|
- };
|
|
|
-
|
|
|
- std::string undo_data(obs_data_get_json(wrapper));
|
|
|
- std::string redo_data(obs_data_get_json(rwrapper));
|
|
|
- main->undo_s.add_action(
|
|
|
- QTStr("Undo.Delete")
|
|
|
- .arg(obs_source_get_name(filter)),
|
|
|
- undo, redo, undo_data, redo_data);
|
|
|
- obs_source_filter_remove(source, filter);
|
|
|
-
|
|
|
- obs_data_release(wrapper);
|
|
|
- obs_data_release(rwrapper);
|
|
|
+ delete_filter(filter);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -1228,3 +1162,63 @@ void OBSBasicFilters::PasteFilter()
|
|
|
|
|
|
obs_source_copy_single_filter(source, filter);
|
|
|
}
|
|
|
+
|
|
|
+void OBSBasicFilters::delete_filter(OBSSource filter)
|
|
|
+{
|
|
|
+ obs_data_t *wrapper = obs_save_source(filter);
|
|
|
+ std::string parent_name(obs_source_get_name(source));
|
|
|
+ obs_data_set_string(wrapper, "undo_name", parent_name.c_str());
|
|
|
+
|
|
|
+ std::string scene_name = obs_source_get_name(
|
|
|
+ reinterpret_cast<OBSBasic *>(App()->GetMainWindow())
|
|
|
+ ->GetCurrentSceneSource());
|
|
|
+ auto undo = [scene_name](const std::string &data) {
|
|
|
+ obs_source_t *ssource =
|
|
|
+ obs_get_source_by_name(scene_name.c_str());
|
|
|
+ reinterpret_cast<OBSBasic *>(App()->GetMainWindow())
|
|
|
+ ->SetCurrentScene(ssource, true);
|
|
|
+ obs_source_release(ssource);
|
|
|
+
|
|
|
+ obs_data_t *dat = obs_data_create_from_json(data.c_str());
|
|
|
+ obs_source_t *source = obs_get_source_by_name(
|
|
|
+ obs_data_get_string(dat, "undo_name"));
|
|
|
+ obs_source_t *filter = obs_load_source(dat);
|
|
|
+ obs_source_filter_add(source, filter);
|
|
|
+
|
|
|
+ obs_data_release(dat);
|
|
|
+ obs_source_release(source);
|
|
|
+ obs_source_release(filter);
|
|
|
+ };
|
|
|
+
|
|
|
+ obs_data_t *rwrapper = obs_data_create();
|
|
|
+ obs_data_set_string(rwrapper, "fname", obs_source_get_name(filter));
|
|
|
+ obs_data_set_string(rwrapper, "sname", parent_name.c_str());
|
|
|
+ auto redo = [scene_name](const std::string &data) {
|
|
|
+ obs_source_t *ssource =
|
|
|
+ obs_get_source_by_name(scene_name.c_str());
|
|
|
+ reinterpret_cast<OBSBasic *>(App()->GetMainWindow())
|
|
|
+ ->SetCurrentScene(ssource, true);
|
|
|
+ obs_source_release(ssource);
|
|
|
+
|
|
|
+ obs_data_t *dat = obs_data_create_from_json(data.c_str());
|
|
|
+ obs_source_t *source = obs_get_source_by_name(
|
|
|
+ obs_data_get_string(dat, "sname"));
|
|
|
+ obs_source_t *filter = obs_source_get_filter_by_name(
|
|
|
+ source, obs_data_get_string(dat, "fname"));
|
|
|
+ obs_source_filter_remove(source, filter);
|
|
|
+
|
|
|
+ obs_data_release(dat);
|
|
|
+ obs_source_release(filter);
|
|
|
+ obs_source_release(source);
|
|
|
+ };
|
|
|
+
|
|
|
+ std::string undo_data(obs_data_get_json(wrapper));
|
|
|
+ std::string redo_data(obs_data_get_json(rwrapper));
|
|
|
+ main->undo_s.add_action(
|
|
|
+ QTStr("Undo.Delete").arg(obs_source_get_name(filter)), undo,
|
|
|
+ redo, undo_data, redo_data, NULL);
|
|
|
+ obs_source_filter_remove(source, filter);
|
|
|
+
|
|
|
+ obs_data_release(wrapper);
|
|
|
+ obs_data_release(rwrapper);
|
|
|
+}
|