aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2008-06-09 19:09:01 +0800
committerMilan Crha <mcrha@src.gnome.org>2008-06-09 19:09:01 +0800
commit22dc0c949c909394889c9b56d63240ad271eb3f8 (patch)
treec66112101dc8756973eba70b241218e4ca590c47 /mail
parentf1cfc8c031380ebd6f4c5fcd681ba1cc4e77f967 (diff)
downloadgsoc2013-evolution-22dc0c949c909394889c9b56d63240ad271eb3f8.tar.gz
gsoc2013-evolution-22dc0c949c909394889c9b56d63240ad271eb3f8.tar.zst
gsoc2013-evolution-22dc0c949c909394889c9b56d63240ad271eb3f8.zip
** Fix for bug #535791
2008-06-09 Milan Crha <mcrha@redhat.com> ** Fix for bug #535791 * mail-config.glade: * em-composer-prefs.c: (em_composer_prefs_construct): New UI option to let uset choose whether start typing at the bottom of the document or not on replying. * em-utils.h: (em_utils_message_to_html): * em-utils.c: (em_utils_message_to_html): * em-composer-utils.c: (forward_non_attached), (composer_set_body): Take care of /apps/evolution/mail/composer/reply_start_bottom. svn path=/trunk/; revision=35621
Diffstat (limited to 'mail')
-rw-r--r--mail/ChangeLog13
-rw-r--r--mail/em-composer-prefs.c6
-rw-r--r--mail/em-composer-utils.c26
-rw-r--r--mail/em-utils.c6
-rw-r--r--mail/em-utils.h2
-rw-r--r--mail/mail-config.glade19
6 files changed, 66 insertions, 6 deletions
diff --git a/mail/ChangeLog b/mail/ChangeLog
index 5a1331c77c..88ebea6dc9 100644
--- a/mail/ChangeLog
+++ b/mail/ChangeLog
@@ -1,5 +1,18 @@
2008-06-09 Milan Crha <mcrha@redhat.com>
+ ** Fix for bug #535791
+
+ * mail-config.glade:
+ * em-composer-prefs.c: (em_composer_prefs_construct):
+ New UI option to let uset choose whether start typing at the bottom
+ of the document or not on replying.
+ * em-utils.h: (em_utils_message_to_html):
+ * em-utils.c: (em_utils_message_to_html):
+ * em-composer-utils.c: (forward_non_attached), (composer_set_body):
+ Take care of /apps/evolution/mail/composer/reply_start_bottom.
+
+2008-06-09 Milan Crha <mcrha@redhat.com>
+
** Fix for bug #201011
* em-filter-editor.c: (em_filter_editor_construct):
diff --git a/mail/em-composer-prefs.c b/mail/em-composer-prefs.c
index 41975589ef..87cdd0d4de 100644
--- a/mail/em-composer-prefs.c
+++ b/mail/em-composer-prefs.c
@@ -939,6 +939,12 @@ em_composer_prefs_construct (EMComposerPrefs *prefs)
gtk_widget_set_sensitive (widget, FALSE);
gconf_bridge_bind_property (bridge, key, G_OBJECT (widget), "active");
+ key = "/apps/evolution/mail/composer/reply_start_bottom";
+ widget = glade_xml_get_widget (gui, "chkReplyStartBottom");
+ if (!gconf_client_key_is_writable (client, key, NULL))
+ gtk_widget_set_sensitive (widget, FALSE);
+ gconf_bridge_bind_property (bridge, key, G_OBJECT (widget), "active");
+
key = "/apps/evolution/mail/composer/top_signature";
widget = glade_xml_get_widget (gui, "chkTopSignature");
if (!gconf_client_key_is_writable (client, key, NULL))
diff --git a/mail/em-composer-utils.c b/mail/em-composer-utils.c
index 90b2b579be..ef72fd6e4a 100644
--- a/mail/em-composer-utils.c
+++ b/mail/em-composer-utils.c
@@ -1005,7 +1005,7 @@ forward_non_attached (CamelFolder *folder, GPtrArray *uids, GPtrArray *messages,
message = messages->pdata[i];
subject = mail_tool_generate_forward_subject (message);
- text = em_utils_message_to_html (message, _("-------- Forwarded Message --------"), flags, &len, NULL);
+ text = em_utils_message_to_html (message, _("-------- Forwarded Message --------"), flags, &len, NULL, NULL);
if (text) {
composer = create_new_composer (subject, fromuri, !uids || !uids->pdata [i]);
@@ -1990,9 +1990,11 @@ composer_set_body (EMsgComposer *composer, CamelMimeMessage *message, EMFormat *
char *text, *credits;
CamelMimePart *part;
GConfClient *gconf;
- ssize_t len;
+ ssize_t len = 0;
+ gboolean start_bottom;
gconf = mail_config_get_gconf_client ();
+ start_bottom = gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/reply_start_bottom", NULL);
switch (gconf_client_get_int (gconf, "/apps/evolution/mail/format/reply_style", NULL)) {
case MAIL_CONFIG_REPLY_DO_NOT_QUOTE:
@@ -2005,7 +2007,7 @@ composer_set_body (EMsgComposer *composer, CamelMimeMessage *message, EMFormat *
camel_object_unref (part);
break;
case MAIL_CONFIG_REPLY_OUTLOOK:
- text = em_utils_message_to_html(message, _("-----Original Message-----"), EM_FORMAT_QUOTE_HEADERS, &len, source);
+ text = em_utils_message_to_html (message, _("-----Original Message-----"), EM_FORMAT_QUOTE_HEADERS, &len, source, start_bottom ? "<BR>" : NULL);
e_msg_composer_set_body_text(composer, text, len);
g_free (text);
break;
@@ -2014,12 +2016,28 @@ composer_set_body (EMsgComposer *composer, CamelMimeMessage *message, EMFormat *
default:
/* do what any sane user would want when replying... */
credits = attribution_format (ATTRIBUTION, message);
- text = em_utils_message_to_html(message, credits, EM_FORMAT_QUOTE_CITE, &len, source);
+ text = em_utils_message_to_html (message, credits, EM_FORMAT_QUOTE_CITE, &len, source, start_bottom ? "<BR>" : NULL);
g_free (credits);
e_msg_composer_set_body_text(composer, text, len);
g_free (text);
break;
}
+
+ if (len > 0 && start_bottom) {
+ GtkhtmlEditor *editor = GTKHTML_EDITOR (composer);
+
+ /* If we are placing signature on top, then move cursor to the end,
+ otherwise try to find the signature place and place cursor just
+ before the signature. We added there an empty line already. */
+ gtkhtml_editor_run_command (editor, "block-selection");
+ gtkhtml_editor_run_command (editor, "cursor-bod");
+ if (gconf_client_get_bool (gconf, "/apps/evolution/mail/composer/top_signature", NULL)
+ || !gtkhtml_editor_search_by_data (editor, 1, "ClueFlow", "signature", "1"))
+ gtkhtml_editor_run_command (editor, "cursor-eod");
+ else
+ gtkhtml_editor_run_command (editor, "selection-move-left");
+ gtkhtml_editor_run_command (editor, "unblock-selection");
+ }
}
struct _reply_data {
diff --git a/mail/em-utils.c b/mail/em-utils.c
index 799ff9c339..50b56aa453 100644
--- a/mail/em-utils.c
+++ b/mail/em-utils.c
@@ -1645,6 +1645,7 @@ em_utils_part_to_html(CamelMimePart *part, ssize_t *len, EMFormat *source)
* @flags: EMFormatQuote flags
* @len:
* @source:
+ * @append: Text to append, can be NULL.
*
* Convert a message to html, quoting if the @credits attribution
* string is given.
@@ -1652,7 +1653,7 @@ em_utils_part_to_html(CamelMimePart *part, ssize_t *len, EMFormat *source)
* Return value: The html version.
**/
char *
-em_utils_message_to_html(CamelMimeMessage *message, const char *credits, guint32 flags, ssize_t *len, EMFormat *source)
+em_utils_message_to_html(CamelMimeMessage *message, const char *credits, guint32 flags, ssize_t *len, EMFormat *source, const char *append)
{
EMFormatQuote *emfq;
CamelStreamMem *mem;
@@ -1682,6 +1683,9 @@ em_utils_message_to_html(CamelMimeMessage *message, const char *credits, guint32
em_format_format_clone((EMFormat *)emfq, NULL, NULL, message, source);
g_object_unref (emfq);
+ if (append && *append)
+ camel_stream_write ((CamelStream*)mem, append, strlen (append));
+
camel_stream_write((CamelStream *)mem, "", 1);
camel_object_unref(mem);
diff --git a/mail/em-utils.h b/mail/em-utils.h
index 8f2cc83985..6e5733eaef 100644
--- a/mail/em-utils.h
+++ b/mail/em-utils.h
@@ -91,7 +91,7 @@ char *em_utils_get_proxy_uri(void);
/* FIXME: should this have an override charset? */
char *em_utils_part_to_html(struct _CamelMimePart *part, ssize_t *len, struct _EMFormat *source);
-char *em_utils_message_to_html(struct _CamelMimeMessage *msg, const char *credits, guint32 flags, ssize_t *len, struct _EMFormat *source);
+char *em_utils_message_to_html(struct _CamelMimeMessage *msg, const char *credits, guint32 flags, ssize_t *len, struct _EMFormat *source, const char *append);
void em_utils_expunge_folder (struct _GtkWidget *parent, struct _CamelFolder *folder);
void em_utils_empty_trash (struct _GtkWidget *parent);
diff --git a/mail/mail-config.glade b/mail/mail-config.glade
index f73eaae09c..867f786f9f 100644
--- a/mail/mail-config.glade
+++ b/mail/mail-config.glade
@@ -7105,6 +7105,25 @@ For example: &quot;Work&quot; or &quot;Personal&quot;</property>
</child>
<child>
+ <widget class="GtkCheckButton" id="chkReplyStartBottom">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="label" translatable="yes">Start _typing at the bottom on replying</property>
+ <property name="use_underline">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="active">False</property>
+ <property name="inconsistent">False</property>
+ <property name="draw_indicator">True</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
+
+ <child>
<widget class="GtkTable" id="tableForwardsReplies">
<property name="visible">True</property>
<property name="n_rows">3</property>