[geany/geany] 586e64: Merge pull request #527 from techee/eol_undo

Colomban Wendling git-noreply at xxxxx
Thu Jun 23 17:38:25 UTC 2016


Branch:      refs/heads/master
Author:      Colomban Wendling <ban at herbesfolles.org>
Committer:   Colomban Wendling <ban at herbesfolles.org>
Date:        Thu, 23 Jun 2016 17:38:25 UTC
Commit:      586e64b842b2a77958bafd8f8b443b2436997c49
             https://github.com/geany/geany/commit/586e64b842b2a77958bafd8f8b443b2436997c49

Log Message:
-----------
Merge pull request #527 from techee/eol_undo

Fix undo of line end type change


Modified Paths:
--------------
    src/callbacks.c
    src/document.c
    src/documentprivate.h

Modified: src/callbacks.c
7 lines changed, 7 insertions(+), 0 deletions(-)
===================================================================
@@ -487,8 +487,15 @@ static void convert_eol(gint mode)
 
 	g_return_if_fail(doc != NULL);
 
+	/* sci_convert_eols() adds UNDO_SCINTILLA action in on_editor_notify().
+	 * It is added to the undo stack before sci_convert_eols() finishes
+	 * so after adding UNDO_EOL, UNDO_EOL will be at the top of the stack
+	 * and UNDO_SCINTILLA below it. */
 	sci_convert_eols(doc->editor->sci, mode);
+	document_undo_add(doc, UNDO_EOL, GINT_TO_POINTER(sci_get_eol_mode(doc->editor->sci)));
+
 	sci_set_eol_mode(doc->editor->sci, mode);
+
 	ui_update_statusbar(doc, -1);
 }
 


Modified: src/document.c
50 lines changed, 42 insertions(+), 8 deletions(-)
===================================================================
@@ -3036,12 +3036,29 @@ void document_undo(GeanyDocument *doc)
 				document_redo_add(doc, UNDO_ENCODING, g_strdup(doc->encoding));
 
 				document_set_encoding(doc, (const gchar*)action->data);
+				g_free(action->data);
 
-				ignore_callback = TRUE;
-				encodings_select_radio_item((const gchar*)action->data);
-				ignore_callback = FALSE;
+				ui_update_statusbar(doc, -1);
+				ui_document_show_hide(doc);
+				break;
+			}
+			case UNDO_EOL:
+			{
+				undo_action *next_action;
 
-				g_free(action->data);
+				document_redo_add(doc, UNDO_EOL, GINT_TO_POINTER(sci_get_eol_mode(doc->editor->sci)));
+
+				sci_set_eol_mode(doc->editor->sci, GPOINTER_TO_INT(action->data));
+
+				ui_update_statusbar(doc, -1);
+				ui_document_show_hide(doc);
+
+				/* When undoing, UNDO_EOL is always followed by UNDO_SCINTILLA
+				 * which undos the line endings in the editor and should be
+				 * performed together with UNDO_EOL. */
+				next_action = g_trash_stack_peek(&doc->priv->undo_actions);
+				if (next_action && next_action->type == UNDO_SCINTILLA)
+					document_undo(doc);
 				break;
 			}
 			case UNDO_RELOAD:
@@ -3108,9 +3125,18 @@ void document_redo(GeanyDocument *doc)
 		{
 			case UNDO_SCINTILLA:
 			{
+				undo_action *next_action;
+
 				document_undo_add_internal(doc, UNDO_SCINTILLA, NULL);
 
 				sci_redo(doc->editor->sci);
+
+				/* When redoing an EOL change, the UNDO_SCINTILLA which changes
+				 * the line ends in the editor is followed by UNDO_EOL
+				 * which should be performed together with UNDO_SCINTILLA. */
+				next_action = g_trash_stack_peek(&doc->priv->redo_actions);
+				if (next_action != NULL && next_action->type == UNDO_EOL)
+					document_redo(doc);
 				break;
 			}
 			case UNDO_BOM:
@@ -3127,12 +3153,20 @@ void document_redo(GeanyDocument *doc)
 				document_undo_add_internal(doc, UNDO_ENCODING, g_strdup(doc->encoding));
 
 				document_set_encoding(doc, (const gchar*)action->data);
+				g_free(action->data);
 
-				ignore_callback = TRUE;
-				encodings_select_radio_item((const gchar*)action->data);
-				ignore_callback = FALSE;
+				ui_update_statusbar(doc, -1);
+				ui_document_show_hide(doc);
+				break;
+			}
+			case UNDO_EOL:
+			{
+				document_undo_add_internal(doc, UNDO_EOL, GINT_TO_POINTER(sci_get_eol_mode(doc->editor->sci)));
 
-				g_free(action->data);
+				sci_set_eol_mode(doc->editor->sci, GPOINTER_TO_INT(action->data));
+
+				ui_update_statusbar(doc, -1);
+				ui_document_show_hide(doc);
 				break;
 			}
 			case UNDO_RELOAD:


Modified: src/documentprivate.h
1 lines changed, 1 insertions(+), 0 deletions(-)
===================================================================
@@ -35,6 +35,7 @@ enum
 	UNDO_ENCODING,
 	UNDO_BOM,
 	UNDO_RELOAD,
+	UNDO_EOL,
 	UNDO_ACTIONS_MAX
 };
 



--------------
This E-Mail was brought to you by github_commit_mail.py (Source: https://github.com/geany/infrastructure).


More information about the Commits mailing list