aboutsummaryrefslogtreecommitdiffstats
path: root/composer/e-msg-composer.c
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2009-04-27 17:52:30 +0800
committerMilan Crha <mcrha@redhat.com>2009-04-27 17:52:30 +0800
commitc8938bd337a03f1d4221cabfff76add54af9aa76 (patch)
tree3ede0f2b6f4c106fe62187d64fcb888d96dd66ed /composer/e-msg-composer.c
parent0f7060ee7dcceac8d10aaa9100c919712de491ff (diff)
downloadgsoc2013-evolution-c8938bd337a03f1d4221cabfff76add54af9aa76.tar.gz
gsoc2013-evolution-c8938bd337a03f1d4221cabfff76add54af9aa76.tar.zst
gsoc2013-evolution-c8938bd337a03f1d4221cabfff76add54af9aa76.zip
Do not delete text lines on signature set in composer
** Fix for bug #553535 * e-msg-composer.c: (is_top_signature), (get_signature_html), (set_editor_text), (e_msg_composer_show_sig_file): Do not eat lines of text when changing signature at top of the message. Add one extra empty line between the signature and the body of the mail when placing signature to the bottom.
Diffstat (limited to 'composer/e-msg-composer.c')
-rw-r--r--composer/e-msg-composer.c72
1 files changed, 37 insertions, 35 deletions
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index b509a97ce8..d39a212e88 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -1279,7 +1279,25 @@ add_signature_delim (void)
return res;
}
+static gboolean
+is_top_signature (void)
+{
+ GConfClient *gconf;
+ gboolean res = FALSE;
+
+ gconf = gconf_client_get_default ();
+
+ res = gconf_client_get_bool (gconf, COMPOSER_GCONF_TOP_SIGNATURE_KEY, NULL);
+
+ g_object_unref (gconf);
+
+ return res;
+}
+
#define CONVERT_SPACES CAMEL_MIME_FILTER_TOHTML_CONVERT_SPACES
+#define NO_SIGNATURE_TEXT \
+ "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature\" value=\"1\">-->" \
+ "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature_name\" value=\"uid:Noname\">--><BR>"
static gchar *
get_signature_html (EMsgComposer *composer)
@@ -1353,14 +1371,15 @@ get_signature_html (EMsgComposer *composer)
*/
html = g_strdup_printf ("<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature\" value=\"1\">-->"
"<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature_name\" value=\"uid:%s\">-->"
- "<TABLE WIDTH=\"100%%\" CELLSPACING=\"0\" CELLPADDING=\"0\"><TR><TD>"
+ "<TABLE WIDTH=\"100%%\" CELLSPACING=\"0\" CELLPADDING=\"0\"><TR><TD><BR>"
"%s%s%s%s"
- "</TD></TR></TABLE>",
+ "%s</TD></TR></TABLE>",
encoded_uid ? encoded_uid : "",
format_html ? "" : "<PRE>\n",
format_html || !add_delim || (!strncmp ("-- \n", text, 4) || strstr (text, "\n-- \n")) ? "" : "-- \n",
text,
- format_html ? "" : "</PRE>\n");
+ format_html ? "" : "</PRE>\n",
+ is_top_signature () ? "<BR>" : "");
g_free (text);
g_free (encoded_uid);
text = html;
@@ -1374,15 +1393,11 @@ set_editor_text (EMsgComposer *composer,
const gchar *text,
gboolean set_signature)
{
- gboolean reply_signature_on_top;
- gchar *body = NULL, *html = NULL;
- GConfClient *gconf;
+ gchar *body = NULL;
g_return_if_fail (E_IS_MSG_COMPOSER (composer));
g_return_if_fail (text != NULL);
- gconf = gconf_client_get_default ();
-
/*
Keeping Signatures in the beginning of composer
@@ -1397,38 +1412,17 @@ set_editor_text (EMsgComposer *composer,
*/
- reply_signature_on_top = gconf_client_get_bool (gconf, COMPOSER_GCONF_TOP_SIGNATURE_KEY, NULL);
-
- g_object_unref (gconf);
-
- 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 = add_signature_delim () ? strstr (tmp, "-- \n") : NULL;
- if (html) {
- /* That two consecutive - symbols followed by a space */
- *(html+1) = ' ';
- body = g_strdup_printf ("</br>%s</br>%s", tmp, text);
- } else {
- /* HTML Signature. Make it as part of body */
- body = g_strdup_printf ("</br>%s</br>%s", tmp, text);
- }
- g_free (tmp);
- } else {
- /* No signature set */
- body = g_strdup_printf ("<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature\" value=\"1\">-->"
- "<!--+GtkHTML:<DATA class=\"ClueFlow\" key=\"signature_name\" value=\"uid:Noname\">-->"
- "<TABLE WIDTH=\"100%%\" CELLSPACING=\"0\" CELLPADDING=\"0\"><TR><TD> </TD></TR></TABLE>%s", text);
- }
+ if (is_top_signature ()) {
+ /* put marker to the top */
+ body = g_strdup_printf ("<BR>" NO_SIGNATURE_TEXT "%s", text);
} else {
- body = g_strdup (text);
+ /* no marker => to the bottom */
+ body = g_strdup_printf ("%s<BR>", text);
}
gtkhtml_editor_set_text_html (GTKHTML_EDITOR (composer), body, -1);
- if (set_signature && !reply_signature_on_top)
+ if (set_signature)
e_msg_composer_show_sig_file (composer);
}
@@ -4504,6 +4498,7 @@ e_msg_composer_show_sig_file (EMsgComposer *composer)
GtkhtmlEditor *editor;
GtkHTML *html;
gchar *html_text;
+ gboolean top_signature;
g_return_if_fail (E_IS_MSG_COMPOSER (composer));
@@ -4530,6 +4525,8 @@ e_msg_composer_show_sig_file (EMsgComposer *composer)
}
gtkhtml_editor_run_command (editor, "unblock-selection");
+ top_signature = is_top_signature ();
+
html_text = get_signature_html (composer);
if (html_text) {
gtkhtml_editor_run_command (editor, "insert-paragraph");
@@ -4537,11 +4534,16 @@ e_msg_composer_show_sig_file (EMsgComposer *composer)
gtkhtml_editor_run_command (editor, "insert-paragraph");
else
gtkhtml_editor_run_command (editor, "cursor-forward");
+
gtkhtml_editor_set_paragraph_data (editor, "orig", "0");
gtkhtml_editor_run_command (editor, "indent-zero");
gtkhtml_editor_run_command (editor, "style-normal");
gtkhtml_editor_insert_html (editor, html_text);
g_free (html_text);
+ } else if (top_signature) {
+ /* 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);