UI: Fix audio filters being deleted not getting added to undo
parent
732c2c7e9e
commit
92745a1009
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -71,6 +71,8 @@ private:
|
|||
|
||||
void FilterNameEdited(QWidget *editor, QListWidget *list);
|
||||
|
||||
void delete_filter(OBSSource filter);
|
||||
|
||||
bool isAsync;
|
||||
|
||||
int noPreviewMargin;
|
||||
|
|
Loading…
Reference in New Issue