2008-04-04 [iwkse] 3.3.1cvs53
authorSalvatore De Paolis <iwkse@claws-mail.org>
Fri, 4 Apr 2008 15:58:21 +0000 (15:58 +0000)
committerSalvatore De Paolis <iwkse@claws-mail.org>
Fri, 4 Apr 2008 15:58:21 +0000 (15:58 +0000)
* src/undo.c
Fix a segfault but breaks undo
on a specific case (eg. double paste with
middle-mouse button)

ChangeLog
PATCHSETS
configure.ac
src/undo.c

index 6f2c1ac4ebdd92ab5dcff9aa215f87409dd8fdc5..54c0bd790c7c960ec16ad633c0d3086443086da1 100644 (file)
--- 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
index a91c4ddf3223c7dd25adcab27f02d39c0e662eee..5abe92e887d8e35144815c0b99d4d22cef3269a8 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
index 63de1f7a7148a76859a882a291787f7fa701eefb..ad4d18fdfadf4dfa22c581d99173d7cb5ba825f3 100644 (file)
@@ -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=
 
index a5777e0bb195c28cfc7bf1796bb236a3f4e0528c..18946c055186bfcf55c2a419e946d2b611ac8acf 100644 (file)
@@ -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();