[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