diff --git a/aegisub/src/audio_timing_karaoke.cpp b/aegisub/src/audio_timing_karaoke.cpp index 205d2c1e5..a76e1b191 100644 --- a/aegisub/src/audio_timing_karaoke.cpp +++ b/aegisub/src/audio_timing_karaoke.cpp @@ -109,6 +109,7 @@ class AudioTimingControllerKaraoke : public AudioTimingController { bool auto_commit; ///< Should changes be automatically commited? int commit_id; ///< Last commit id used for an autocommit + bool pending_changes; ///< Are there any pending changes to be committed? void OnAutoCommitChange(agi::OptionValue const& opt); @@ -254,10 +255,11 @@ void AudioTimingControllerKaraoke::DoCommit() { file_changed_slot.Block(); commit_id = c->ass->Commit(_("karaoke timing"), AssFile::COMMIT_DIAG_TEXT, commit_id, active_line); file_changed_slot.Unblock(); + pending_changes = false; } void AudioTimingControllerKaraoke::Commit() { - if (!auto_commit) + if (!auto_commit && pending_changes) DoCommit(); } @@ -266,6 +268,7 @@ void AudioTimingControllerKaraoke::Revert() { cur_syl = 0; commit_id = -1; + pending_changes = false; start_marker.Move(active_line->Start); end_marker.Move(active_line->End); @@ -405,8 +408,10 @@ void AudioTimingControllerKaraoke::AnnounceChanges(int syl) { if (auto_commit) DoCommit(); - else + else { + pending_changes = true; commit_id = -1; + } } void AudioTimingControllerKaraoke::OnMarkerDrag(std::vector const& m, int new_position, int) { diff --git a/aegisub/src/command/grid.cpp b/aegisub/src/command/grid.cpp index ed41b5996..108b63ce0 100644 --- a/aegisub/src/command/grid.cpp +++ b/aegisub/src/command/grid.cpp @@ -42,6 +42,8 @@ #include "../ass_dialogue.h" #include "../ass_file.h" +#include "../audio_controller.h" +#include "../audio_timing.h" #include "../include/aegisub/context.h" #include "../main.h" #include "../frame_main.h" @@ -73,6 +75,10 @@ struct grid_line_next_create : public Command { STR_HELP("Move to the next subtitle line, creating a new one if needed") void operator()(agi::Context *c) { + AudioTimingController *tc = c->audioController->GetTimingController(); + if (tc) + tc->Commit(); + AssDialogue *cur = c->selectionController->GetActiveLine(); c->selectionController->NextLine(); if (cur == c->selectionController->GetActiveLine()) {