2007-08-28 [colin] 2.10.0cvs180
authorColin Leroy <colin@colino.net>
Tue, 28 Aug 2007 16:22:21 +0000 (16:22 +0000)
committerColin Leroy <colin@colino.net>
Tue, 28 Aug 2007 16:22:21 +0000 (16:22 +0000)
* src/compose.c
* src/compose.h
Fix signature replacement when it's been wrapped

ChangeLog
PATCHSETS
configure.ac
src/compose.c
src/compose.h

index e8c486fb676e1835d09c7945701ed43d22bf7aa1..d59d81ed6016db4bce9830462020c750ed540738 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2007-08-28 [colin]     2.10.0cvs180
+
+       * src/compose.c
+       * src/compose.h
+               Fix signature replacement when it's been wrapped
+
 2007-08-27 [colin]     2.10.0cvs179
 
        * src/summaryview.c
index 2ba47756059ee47b07c4928134bae9ca3318d48d..c8dbad17d3dcde802a777a8d233dba66e4bcdb6f 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.2.2.22 -r 1.2.2.23 src/folder_item_prefs.c;  cvs diff -u -r 1.2.2.11 -r 1.2.2.12 src/folder_item_prefs.h;  cvs diff -u -r 1.1.2.49 -r 1.1.2.50 src/imap_gtk.c;  cvs diff -u -r 1.2.2.27 -r 1.2.2.28 src/mh_gtk.c;  ) > 2.10.0cvs177.patchset
 ( cvs diff -u -r 1.395.2.321 -r 1.395.2.322 src/summaryview.c;  ) > 2.10.0cvs178.patchset
 ( cvs diff -u -r 1.395.2.322 -r 1.395.2.323 src/summaryview.c;  ) > 2.10.0cvs179.patchset
+( cvs diff -u -r 1.382.2.403 -r 1.382.2.404 src/compose.c;  cvs diff -u -r 1.50.2.41 -r 1.50.2.42 src/compose.h;  ) > 2.10.0cvs180.patchset
index cdd7d9890ba16e58f15b7f9b6071ae4d709a3c70..e32f1f229540ec1d4384e1fec27e97bc3dd09a3a 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=10
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=179
+EXTRA_VERSION=180
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 401635076df0bd582ed3838beb85fb8c5dca8b81..0a43af94a442e5276d9879d03270056f0f3cfd43 100644 (file)
@@ -925,7 +925,7 @@ static void compose_create_tags(GtkTextView *text, Compose *compose)
                                           NULL);
        }
        
-       gtk_text_buffer_create_tag(buffer, "signature",
+       compose->signature_tag = gtk_text_buffer_create_tag(buffer, "signature",
                                   "foreground-gdk", &signature_color,
                                   NULL);
        
@@ -3006,10 +3006,9 @@ static void compose_insert_sig(Compose *compose, gboolean replace)
        GtkTextMark *mark;
        GtkTextIter iter, iter_end;
        gint cur_pos;
-       gchar *search = NULL;
        gboolean prev_autowrap;
-       gboolean found = FALSE, shift = FALSE;
-
+       gboolean found = FALSE;
+       gboolean exists = FALSE;
        
        g_return_if_fail(compose->account != NULL);
 
@@ -3025,54 +3024,55 @@ static void compose_insert_sig(Compose *compose, gboolean replace)
 
        gtk_text_buffer_get_end_iter(buffer, &iter);
 
-       search = compose->sig_str;
-again:
-       if (replace && search) {
+       exists = (compose->sig_str != NULL);
+
+       if (replace) {
                GtkTextIter first_iter, start_iter, end_iter;
 
                gtk_text_buffer_get_start_iter(buffer, &first_iter);
 
-               if (compose->sig_str[0] == '\0')
+               if (!exists || compose->sig_str[0] == '\0')
                        found = FALSE;
                else
-                       found = gtk_text_iter_forward_search(&first_iter,
-                                                            search,
-                                                            GTK_TEXT_SEARCH_TEXT_ONLY,
-                                                            &start_iter, &end_iter,
-                                                            NULL);
+                       found = gtk_text_iter_forward_to_tag_toggle(&first_iter,
+                                       compose->signature_tag);
 
                if (found) {
-                       gtk_text_buffer_delete(buffer, &start_iter, &end_iter);
-                       iter = start_iter;
-               }
+                       /* include previous \n\n */
+                       gtk_text_iter_backward_chars(&first_iter, 2);
+                       start_iter = first_iter;
+                       end_iter = first_iter;
+                       /* skip re-start */
+                       found = gtk_text_iter_forward_to_tag_toggle(&end_iter,
+                                       compose->signature_tag);
+                       found &= gtk_text_iter_forward_to_tag_toggle(&end_iter,
+                                       compose->signature_tag);
+                       if (found) {
+                               gtk_text_buffer_delete(buffer, &start_iter, &end_iter);
+                               iter = start_iter;
+                       }
+               } 
        } 
-       if (replace && !found && search && strlen(search) > 2
-       &&  search[0] == '\n' && search[1] == '\n') {
-               search ++;
-               shift = TRUE;
-               goto again;
-       }
 
        g_free(compose->sig_str);
        compose->sig_str = compose_get_signature_str(compose);
-       if (!compose->sig_str || (replace && !compose->account->auto_sig))
-               compose->sig_str = g_strdup("");
 
        cur_pos = gtk_text_iter_get_offset(&iter);
-       if (shift && found)
-               gtk_text_buffer_insert(buffer, &iter, compose->sig_str + 1, -1);
-       else
-               gtk_text_buffer_insert(buffer, &iter, compose->sig_str, -1);
-       /* skip \n\n */
-       gtk_text_buffer_get_iter_at_offset(buffer, &iter, cur_pos);
-       gtk_text_iter_forward_char(&iter);
-       gtk_text_iter_forward_char(&iter);
-       gtk_text_buffer_get_end_iter(buffer, &iter_end);
-       gtk_text_buffer_apply_tag_by_name(buffer,"signature",&iter, &iter_end);
 
-       if (cur_pos > gtk_text_buffer_get_char_count (buffer))
-               cur_pos = gtk_text_buffer_get_char_count (buffer);
+       if (!compose->sig_str || (replace && !compose->account->auto_sig)) {
+               g_free(compose->sig_str);
+               compose->sig_str = NULL;
+       } else {
+               gtk_text_buffer_insert(buffer, &iter, compose->sig_str, -1);
+               /* remove \n\n */
+               gtk_text_buffer_get_iter_at_offset(buffer, &iter, cur_pos);
+               gtk_text_iter_forward_chars(&iter, 2);
+               gtk_text_buffer_get_end_iter(buffer, &iter_end);
+               gtk_text_buffer_apply_tag_by_name(buffer,"signature",&iter, &iter_end);
 
+               if (cur_pos > gtk_text_buffer_get_char_count (buffer))
+                       cur_pos = gtk_text_buffer_get_char_count (buffer);
+       }
        /* put the cursor where it should be 
         * either where the quote_fmt says, either before the signature */
        if (compose->set_cursor_pos < 0)
index 13967ae9215227bdbec37023c1dd61890cbe7ed0..c6feed12d1b4891140d139b67d0dada5ac16c511 100644 (file)
@@ -215,6 +215,7 @@ struct _Compose
        
        GtkTextTag *no_wrap_tag;
        GtkTextTag *no_join_tag;
+       GtkTextTag *signature_tag;
        GtkTextTag *quote0_tag;
        GtkTextTag *quote1_tag;
        GtkTextTag *quote2_tag;