2006-10-30 [wwp] 2.5.6cvs11
authorTristan Chabredier <wwp@claws-mail.org>
Mon, 30 Oct 2006 16:06:45 +0000 (16:06 +0000)
committerTristan Chabredier <wwp@claws-mail.org>
Mon, 30 Oct 2006 16:06:45 +0000 (16:06 +0000)
* src/prefs_common.c
* src/prefs_common.h
* src/compose.c
fix broken storage of quote format template when it contains \-escape
sequences. The application of such sequences is also fixed now (\t
in quote format will be a real tab instead of a 't', for instance).

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

index 4d2dcbf0bdac8e7fc8bce4e8ceab32da02b0d2b6..7adefc60f5af5c99de54c64c3fee1328d38f3813 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2006-10-30 [wwp]       2.5.6cvs11
+
+       * src/prefs_common.c
+       * src/prefs_common.h
+       * src/compose.c
+               fix broken storage of quote format template when it contains \-escape
+               sequences. The application of such sequences is also fixed now (\t
+               in quote format will be a real tab instead of a 't', for instance).
+
 2006-10-27 [colin]     2.5.6cvs10
 
        * src/compose.c
index 773c5bf1555d549b18acd43e777f32a59560fb9e..1494744561d4f280acf0d9a8b2f637d52febb634 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.213.2.122 -r 1.213.2.123 src/folder.c;  cvs diff -u -r 1.179.2.134 -r 1.179.2.135 src/imap.c;  ) > 2.5.6cvs8.patchset
 ( cvs diff -u -r 1.654.2.2065 -r 1.654.2.2066 configure.ac;  ) > 2.5.6cvs9.patchset
 ( cvs diff -u -r 1.382.2.318 -r 1.382.2.319 src/compose.c;  ) > 2.5.6cvs10.patchset
+( cvs diff -u -r 1.204.2.106 -r 1.204.2.107 src/prefs_common.c;  cvs diff -u -r 1.103.2.64 -r 1.103.2.65 src/prefs_common.h;  cvs diff -u -r 1.382.2.319 -r 1.382.2.320 src/compose.c;  ) > 2.5.6cvs11.patchset
index 806b9a918d718899d008a46e936214340770ce3a..b4c0f12e599e3eb7289d56bc5e7f495ecf00cdd2 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=5
 MICRO_VERSION=6
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=10
+EXTRA_VERSION=11
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 671a8b9c7bde4f51d4f817c145f56262ea066c13..80a26cd9cbe23f6033b7c8b64a723dd9bde85516 100644 (file)
@@ -2427,13 +2427,20 @@ static gchar *compose_quote_fmt(Compose *compose, MsgInfo *msginfo,
        }
 
        if (fmt && *fmt != '\0') {
+               gchar *tmp = NULL;
+
                while (trimmed_body && strlen(trimmed_body) > 1
                        && trimmed_body[0]=='\n')
                        *trimmed_body++;
 
+               /* decode \-escape sequences in the internal representation of the quote format */
+               tmp = malloc(strlen(fmt)+1);
+               pref_get_unescaped_pref(tmp, fmt);
+
                quote_fmt_init(msginfo, quote_str, trimmed_body, FALSE, compose->account);
-               quote_fmt_scan_string(fmt);
+               quote_fmt_scan_string(tmp);
                quote_fmt_parse();
+               g_free(tmp);
 
                buf = quote_fmt_get_buffer();
                if (buf == NULL) {
index d560ba9f614a3b0603af5187598f7477fbbd962c..7764716105ecb0aa7d0085724a96d39e458ff783 100644 (file)
@@ -923,30 +923,58 @@ void prefs_common_write_config(void)
                prefs_common.summary_quicksearch_history);
 }
 
-void pref_set_textview_from_pref(GtkTextView *textview, gchar *txt)
+/* make a copy of string 'in' into buffer 'out'. un-escape \ sequences.
+   both 'in' and 'out' must be non-NULL.
+   'out' must be a pointer to a buffer whose size is at least equal
+   to strlen(txt)+1, this buffer will get cleared. */
+void pref_get_unescaped_pref(gchar *out, const gchar *in)
 {
-       GtkTextBuffer *buffer = gtk_text_view_get_buffer(textview);
-       gchar *o_out, *out = malloc(txt?(strlen(txt)+1):1);
-       gchar *t = txt;
-       memset(out, 0, strlen(txt)+1);
-       o_out = out;
-       while (*t != '\0') {
-               if (*t == '\\' && *(t+1) == 'n') {
-                       *out++ = '\n';
-                       t++;
-               } else if (*t == '\\') {
-                       t++;
+       gchar *o, *i;
+
+       g_return_if_fail( in != NULL );
+       g_return_if_fail( out != NULL );
+
+       i = in;
+       o = out;
+       memset(out, 0, strlen(in)+1);
+       while (*i != '\0') {
+               if (*i == '\\' && *(i+1) == 'n') {
+                       *o++ = '\n';
+                       i++;
+               } else if (*i == '\\' && *(i+1) == 't') {
+                       *o++ = '\t';
+                       i++;
+               } else if (*i == '\\' && *(i+1) == '\\') {
+                       *o++ = '\\';
+                       i++;
                } else {
-                       *out++ = *t;
+                       *o++ = *i;
                }
-               t++;
+               i++;
        }
-       *out='\0';
+       *o='\0';
+}
 
-       gtk_text_buffer_set_text(buffer, o_out?o_out:"", -1);
-       g_free(o_out);
+/* set the contents of a textview widget from the internal \-escaped
+  representation of a pref string */
+void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt)
+{
+       GtkTextBuffer *out_buffer;
+       gchar *out = NULL;
+
+       g_return_if_fail( txt != NULL );
+
+       out_buffer = gtk_text_view_get_buffer(textview);
+       out = malloc(txt?(strlen(txt)+1):1);
+
+       pref_get_unescaped_pref(out, txt);
+
+       gtk_text_buffer_set_text(out_buffer, out?out:"", -1);
+       g_free(out);
 }
 
+/* get the \-escaped internal representation of a pref from the contents of
+   a textview widget */
 gchar *pref_get_pref_from_textview(GtkTextView *textview) 
 {
        GtkTextBuffer *buffer;
@@ -964,6 +992,9 @@ gchar *pref_get_pref_from_textview(GtkTextView *textview)
                if (*t == '\n') {
                        *out++ = '\\';
                        *out++ = 'n';
+               } else if (*t == '\t') {
+                       *out++ = '\\';
+                       *out++ = 't';
                } else if (*t == '\\') {
                        *out++ = '\\';
                        *out++ = '\\';
index 5a6b6a28ac6d1ab1df7d93d2e1724e8520462df6..e04c43d9f6dc7b565ec07ff985ef68d7aff1a590 100644 (file)
@@ -406,7 +406,8 @@ void prefs_common_read_config       (void);
 void prefs_common_write_config (void);
 void prefs_common_open         (void);
 PrefsCommon *prefs_common_get  (void);
-void pref_set_textview_from_pref(GtkTextView *textview, gchar *txt);
+void pref_get_unescaped_pref(gchar *out, const gchar *in);
+void pref_set_textview_from_pref(GtkTextView *textview, const gchar *txt);
 gchar *pref_get_pref_from_textview(GtkTextView *textview);
 
 #endif /* __PREFS_COMMON_H__ */