Change the selection before committing deletions of lines

For whatever reason this was sometimes being done after the commit,
which resulted in a lot of code only working by coincidence when the
grid commit handler happened to be the first one to be called.
This commit is contained in:
Thomas Goyne 2013-10-27 06:59:56 -07:00
parent 2f14c395e7
commit eee4da0642
4 changed files with 8 additions and 15 deletions

View file

@ -315,10 +315,10 @@ void AssKaraoke::SplitLines(std::set<AssDialogue*> const& lines, agi::Context *c
if (!did_split) return;
c->ass->Commit(_("splitting"), AssFile::COMMIT_DIAG_ADDREM | AssFile::COMMIT_DIAG_FULL);
AssDialogue *new_active = c->selectionController->GetActiveLine();
if (!sel.count(c->selectionController->GetActiveLine()))
new_active = *sel.begin();
c->selectionController->SetSelectionAndActive(sel, new_active);
c->ass->Commit(_("splitting"), AssFile::COMMIT_DIAG_ADDREM | AssFile::COMMIT_DIAG_FULL);
}

View file

@ -320,14 +320,8 @@ void BaseGrid::UpdateMaps(bool preserve_selected_rows) {
SetSelectedSet(new_sel);
}
// Force a reannounce of the active line if it hasn't changed, as it isn't
// safe to touch the active line while processing a commit event which would
// cause this function to be called
AssDialogue *line = active_line;
active_line = nullptr;
// The active line may have ceased to exist; pick a new one if so
if (line_index_map.size() && line_index_map.find(line) == line_index_map.end()) {
if (line_index_map.size() && !line_index_map.count(active_line)) {
if (active_row < (int)index_line_map.size())
SetActiveLine(index_line_map[active_row]);
else if (preserve_selected_rows && !selection.empty())
@ -335,9 +329,6 @@ void BaseGrid::UpdateMaps(bool preserve_selected_rows) {
else
SetActiveLine(index_line_map.back());
}
else {
SetActiveLine(line);
}
if (selection.empty() && active_line) {
Selection sel;

View file

@ -494,11 +494,11 @@ static void delete_lines(agi::Context *c, wxString const& commit_message) {
c->ass->InsertLine(new_active);
}
c->ass->Commit(commit_message, AssFile::COMMIT_DIAG_ADDREM);
sel.clear();
sel.insert(new_active);
c->selectionController->SetSelectionAndActive(sel, new_active);
c->ass->Commit(commit_message, AssFile::COMMIT_DIAG_ADDREM);
}
struct edit_line_copy : public validate_sel_nonempty {
@ -670,6 +670,7 @@ static void combine_lines(agi::Context *c, void (*combiner)(AssDialogue *, AssDi
sel.clear();
sel.insert(first);
c->selectionController->SetSelectionAndActive(sel, first);
c->ass->Commit(message, AssFile::COMMIT_DIAG_ADDREM | AssFile::COMMIT_DIAG_FULL);
}

View file

@ -208,7 +208,8 @@ void SubsController::Close() {
redo_stack.clear();
autosaved_commit_id = saved_commit_id = commit_id + 1;
filename.clear();
context->ass->Line.clear();
AssFile blank;
swap(blank.Line, context->ass->Line);
context->ass->LoadDefault();
context->ass->Commit("", AssFile::COMMIT_NEW);
}