talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

commit 28b02eb371d5cfb914e305ba1362db3bf91ba6c1
parent 2d145abb8e20e635f72be0b3be7ef3fd2f2554cc
Author: Salvatore De Paolis <iwkse@claws-mail.org>
Date:   Fri,  4 Apr 2008 15:58:21 +0000

2008-04-04 [iwkse]	3.3.1cvs53

	* src/undo.c
		Fix a segfault but breaks undo
		on a specific case (eg. double paste with
		middle-mouse button)

Diffstat:
MChangeLog | 7+++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/undo.c | 22++++++++++++----------
4 files changed, 21 insertions(+), 11 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,10 @@ +2008-04-04 [iwkse] 3.3.1cvs53 + + * src/undo.c + Fix a segfault but breaks undo + on a specific case (eg. double paste with + middle-mouse button) + 2008-04-04 [iwkse] 3.3.1cvs52 * src/prefs_filtering.c diff --git a/PATCHSETS b/PATCHSETS @@ -3287,3 +3287,4 @@ ( cvs diff -u -r 1.115.2.192 -r 1.115.2.193 src/main.c; ) > 3.3.1cvs50.patchset ( cvs diff -u -r 1.59.2.65 -r 1.59.2.66 src/prefs_filtering.c; ) > 3.3.1cvs51.patchset ( cvs diff -u -r 1.59.2.66 -r 1.59.2.67 src/prefs_filtering.c; ) > 3.3.1cvs52.patchset +( cvs diff -u -r 1.13.2.14 -r 1.13.2.15 src/undo.c; ) > 3.3.1cvs53.patchset diff --git a/configure.ac b/configure.ac @@ -11,7 +11,7 @@ MINOR_VERSION=3 MICRO_VERSION=1 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=52 +EXTRA_VERSION=53 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/undo.c b/src/undo.c @@ -368,7 +368,7 @@ void undo_undo(UndoMain *undostruct) gtk_adjustment_set_value (GTK_ADJUSTMENT(textview->vadjustment), undoinfo->window_position); - + switch (undoinfo->action) { case UNDO_ACTION_DELETE: gtk_text_buffer_get_iter_at_offset(buffer, &iter, undoinfo->start_pos); @@ -384,21 +384,22 @@ void undo_undo(UndoMain *undostruct) gtk_text_buffer_get_iter_at_offset(buffer, &end_iter, undoinfo->end_pos); gtk_text_buffer_delete(buffer, &start_iter, &end_iter); /* "pull" another data structure from the list */ - undoinfo = (UndoInfo *)undostruct->undo->data; - g_return_if_fail(undoinfo != NULL); - undostruct->redo = g_list_prepend(undostruct->redo, undoinfo); - undostruct->undo = g_list_remove(undostruct->undo, undoinfo); - g_return_if_fail(undoinfo->action == UNDO_ACTION_REPLACE_DELETE); - gtk_text_buffer_insert(buffer, &start_iter, undoinfo->text, -1); + if (undostruct->undo){ + undoinfo = (UndoInfo *)undostruct->undo->data; + g_return_if_fail(undoinfo != NULL); + g_return_if_fail(undoinfo->action == UNDO_ACTION_REPLACE_DELETE); + gtk_text_buffer_insert(buffer, &start_iter, undoinfo->text, -1); + } break; case UNDO_ACTION_REPLACE_DELETE: - g_warning("This should not happen. UNDO_REPLACE_DELETE"); + gtk_text_buffer_get_iter_at_offset(buffer, &iter, undoinfo->start_pos); + gtk_text_buffer_insert(buffer, &iter, undoinfo->text, -1); break; default: g_assert_not_reached(); break; } - + undostruct->change_state_func(undostruct, UNDO_STATE_UNCHANGED, UNDO_STATE_TRUE, undostruct->change_state_data); @@ -474,7 +475,8 @@ void undo_redo(UndoMain *undostruct) gtk_text_buffer_insert(buffer, &start_iter, redoinfo->text, -1); break; case UNDO_ACTION_REPLACE_INSERT: - g_warning("This should not happen. Redo: UNDO_REPLACE_INSERT"); + gtk_text_buffer_get_iter_at_offset(buffer, &iter, redoinfo->start_pos); + gtk_text_buffer_insert(buffer, &iter, redoinfo->text, -1); break; default: g_assert_not_reached();