From 18a46610ca525d72345188323b6b6978704840c5 Mon Sep 17 00:00:00 2001
From: Thomas Goyne <plorkyeran@aegisub.org>
Date: Sat, 3 Nov 2012 15:40:54 -0700
Subject: [PATCH] Commit pending audio changes on Enter in the edit box. Closes
 #1544.

---
 aegisub/src/audio_timing_karaoke.cpp | 9 +++++++--
 aegisub/src/command/grid.cpp         | 6 ++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

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<AudioMarker*> 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()) {
-- 
GitLab