From 0089449444abbbf5379cbacaeb85e4b0cd804249 Mon Sep 17 00:00:00 2001 From: Milan Crha Date: Tue, 29 Sep 2009 12:21:06 +0200 Subject: Bug #582745 - Place signature at bottom when Edit As New Message --- composer/e-composer-private.c | 2 ++ composer/e-composer-private.h | 1 + composer/e-msg-composer.c | 71 ++++++++++++++++++++++--------------------- 3 files changed, 39 insertions(+), 35 deletions(-) diff --git a/composer/e-composer-private.c b/composer/e-composer-private.c index dfff72a5a8..88a9454f45 100644 --- a/composer/e-composer-private.c +++ b/composer/e-composer-private.c @@ -128,6 +128,8 @@ e_composer_private_init (EMsgComposer *composer) priv->charset = e_composer_get_default_charset (); + priv->is_from_message = FALSE; + e_composer_actions_init (composer); filename = e_composer_find_data_file ("evolution-composer.ui"); diff --git a/composer/e-composer-private.h b/composer/e-composer-private.h index 1d0c19f366..97164e3513 100644 --- a/composer/e-composer-private.h +++ b/composer/e-composer-private.h @@ -116,6 +116,7 @@ struct _EMsgComposerPrivate { CamelMimeMessage *redirect; gboolean send_invoked; + gboolean is_from_message; }; void e_composer_private_init (EMsgComposer *composer); diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c index 02e5db7acd..353b930a0e 100644 --- a/composer/e-msg-composer.c +++ b/composer/e-msg-composer.c @@ -1106,6 +1106,27 @@ decode_signature_name (const gchar *name) return dname; } +static gboolean +is_top_signature (EMsgComposer *composer) +{ + EShell *shell; + EShellSettings *shell_settings; + EMsgComposerPrivate *priv = E_MSG_COMPOSER_GET_PRIVATE (composer); + + g_return_val_if_fail (priv != NULL, FALSE); + + /* The composer had been created from a stored message, thus the signature + placement is either there already, or pt it at the bottom regardless + of a preferences (which is for reply anyway, not for Edit as new) */ + if (priv->is_from_message) + return FALSE; + + shell = e_shell_get_default (); + shell_settings = e_shell_get_shell_settings (shell); + + return e_shell_settings_get_boolean (shell_settings, "composer-top-signature"); +} + #define CONVERT_SPACES CAMEL_MIME_FILTER_TOHTML_CONVERT_SPACES #define NO_SIGNATURE_TEXT \ "" \ @@ -1184,12 +1205,13 @@ get_signature_html (EMsgComposer *composer) "" "

" "%s%s%s%s" - "
", + "%s", encoded_uid ? encoded_uid : "", format_html ? "" : "
\n",
 					format_html || (!strncmp ("-- \n", text, 4) || strstr (text, "\n-- \n")) ? "" : "-- \n",
 					text,
-					format_html ? "" : "
\n"); + format_html ? "" : "\n", + is_top_signature (composer) ? "
" : ""); g_free (text); g_free (encoded_uid); text = html; @@ -1203,17 +1225,11 @@ set_editor_text (EMsgComposer *composer, const gchar *text, gboolean set_signature) { - EShell *shell; - EShellSettings *shell_settings; - gboolean reply_signature_on_top; - gchar *body = NULL, *html = NULL; + gchar *body = NULL; g_return_if_fail (E_IS_MSG_COMPOSER (composer)); g_return_if_fail (text != NULL); - shell = e_shell_get_default (); - shell_settings = e_shell_get_shell_settings (shell); - /* Keeping Signatures in the beginning of composer @@ -1228,30 +1244,9 @@ set_editor_text (EMsgComposer *composer, */ - reply_signature_on_top = e_shell_settings_get_boolean ( - shell_settings, "composer-top-signature"); - - if (set_signature && reply_signature_on_top) { - gchar *tmp = NULL; - tmp = get_signature_html (composer); - if (tmp) { - /* Minimizing the damage. Make it just a part of the body instead of a signature */ - html = strstr (tmp, "-- \n"); - if (html) { - /* That two consecutive - symbols followed by a space */ - *(html+1) = ' '; - body = g_strdup_printf ("
%s
%s", tmp, text); - } else { - /* HTML Signature. Make it as part of body */ - body = g_strdup_printf ("
%s
%s", tmp, text); - } - g_free (tmp); - } else { - /* No signature set */ - body = g_strdup_printf ("" - "" - "
%s", text); - } + if (is_top_signature (composer)) { + /* put marker to the top */ + body = g_strdup_printf ("
" NO_SIGNATURE_TEXT "%s", text); } else { /* no marker => to the bottom */ body = g_strdup_printf ("%s
", text); @@ -2676,6 +2671,7 @@ e_msg_composer_new_with_message (CamelMimeMessage *message) EAccount *account = NULL; gchar *account_name; EMsgComposer *composer; + EMsgComposerPrivate *priv; EComposerHeaderTable *table; GtkToggleAction *action; struct _camel_header_raw *xev; @@ -2687,6 +2683,7 @@ e_msg_composer_new_with_message (CamelMimeMessage *message) } composer = e_msg_composer_new (); + priv = E_MSG_COMPOSER_GET_PRIVATE (composer); table = e_msg_composer_get_header_table (composer); if (postto) { @@ -2846,8 +2843,6 @@ e_msg_composer_new_with_message (CamelMimeMessage *message) flags = g_strsplit (format, ", ", 0); for (i=0;flags[i];i++) { - printf ("restoring draft flag '%s'\n", flags[i]); - if (g_ascii_strcasecmp (flags[i], "text/html") == 0) gtkhtml_editor_set_html_mode ( GTKHTML_EDITOR (composer), TRUE); @@ -2932,6 +2927,8 @@ e_msg_composer_new_with_message (CamelMimeMessage *message) e_msg_composer_set_pending_body (composer, html, length); } + priv->is_from_message = TRUE; + /* We wait until now to set the body text because we need to * ensure that the attachment bar has all the attachments before * we request them. */ @@ -3783,6 +3780,10 @@ e_msg_composer_show_sig_file (EMsgComposer *composer) gtkhtml_editor_run_command (editor, "style-normal"); gtkhtml_editor_insert_html (editor, html_text); g_free (html_text); + } else if (is_top_signature (composer)) { + /* insert paragraph after the signature ClueFlow things */ + gtkhtml_editor_run_command (editor, "cursor-forward"); + gtkhtml_editor_run_command (editor, "insert-paragraph"); } gtkhtml_editor_undo_end (editor); -- cgit