[geary] Use selected text in quotes when available
- From: Robert Schroll <rschroll src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary] Use selected text in quotes when available
- Date: Wed, 8 Oct 2014 22:12:59 +0000 (UTC)
commit fac79c7fed98994287db844f9e7698f692bdd6dd
Author: Robert Schroll <rschroll gmail com>
Date: Sun Aug 24 19:52:12 2014 -0400
Use selected text in quotes when available
https://bugzilla.gnome.org/show_bug.cgi?id=712912
src/client/application/geary-controller.vala | 29 +++++++++++--------
src/client/composer/composer-widget.vala | 6 ++--
.../conversation-viewer/conversation-viewer.vala | 18 +++++++++---
src/engine/rfc822/rfc822-utils.vala | 26 ++++++++---------
4 files changed, 46 insertions(+), 33 deletions(-)
---
diff --git a/src/client/application/geary-controller.vala b/src/client/application/geary-controller.vala
index bb4b73d..38795af 100644
--- a/src/client/application/geary-controller.vala
+++ b/src/client/application/geary-controller.vala
@@ -1409,7 +1409,7 @@ public class GearyController : Geary.BaseObject {
}
private void on_edit_draft(Geary.Email draft) {
- create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE, draft, null, true);
+ create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE, draft, null, null, true);
}
private void on_special_folder_type_changed(Geary.Folder folder, Geary.SpecialFolderType old_type,
@@ -2062,12 +2062,14 @@ public class GearyController : Geary.BaseObject {
}
private void create_compose_widget(ComposerWidget.ComposeType compose_type,
- Geary.Email? referred = null, string? mailto = null, bool is_draft = false) {
- create_compose_widget_async.begin(compose_type, referred, mailto, is_draft);
+ Geary.Email? referred = null, string? quote = null, string? mailto = null,
+ bool is_draft = false) {
+ create_compose_widget_async.begin(compose_type, referred, quote, mailto, is_draft);
}
private async void create_compose_widget_async(ComposerWidget.ComposeType compose_type,
- Geary.Email? referred = null, string? mailto = null, bool is_draft = false) {
+ Geary.Email? referred = null, string? quote = null, string? mailto = null,
+ bool is_draft = false) {
if (current_account == null)
return;
@@ -2090,7 +2092,7 @@ public class GearyController : Geary.BaseObject {
}
}
- widget = new ComposerWidget(current_account, compose_type, full, is_draft);
+ widget = new ComposerWidget(current_account, compose_type, full, quote, is_draft);
}
widget.show_all();
@@ -2195,9 +2197,10 @@ public class GearyController : Geary.BaseObject {
}
private void on_reply_to_message_action() {
- Geary.Email? message = main_window.conversation_viewer.get_selected_message();
+ string? quote;
+ Geary.Email? message = main_window.conversation_viewer.get_selected_message(out quote);
if (message != null)
- on_reply_to_message(message);
+ create_compose_widget(ComposerWidget.ComposeType.REPLY, message, quote);
}
private void on_reply_all_message(Geary.Email message) {
@@ -2205,9 +2208,10 @@ public class GearyController : Geary.BaseObject {
}
private void on_reply_all_message_action() {
- Geary.Email? message = main_window.conversation_viewer.get_selected_message();
+ string? quote;
+ Geary.Email? message = main_window.conversation_viewer.get_selected_message(out quote);
if (message != null)
- on_reply_all_message(message);
+ create_compose_widget(ComposerWidget.ComposeType.REPLY_ALL, message, quote);
}
private void on_forward_message(Geary.Email message) {
@@ -2215,9 +2219,10 @@ public class GearyController : Geary.BaseObject {
}
private void on_forward_message_action() {
- Geary.Email? message = main_window.conversation_viewer.get_selected_message();
+ string? quote;
+ Geary.Email? message = main_window.conversation_viewer.get_selected_message(out quote);
if (message != null)
- on_forward_message(message);
+ create_compose_widget(ComposerWidget.ComposeType.FORWARD, message, quote);
}
private void on_find_in_conversation_action() {
@@ -2463,7 +2468,7 @@ public class GearyController : Geary.BaseObject {
return;
}
- create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE, null, mailto);
+ create_compose_widget(ComposerWidget.ComposeType.NEW_MESSAGE, null, null, mailto);
}
// Returns a list of composer windows for an account, or null if none.
diff --git a/src/client/composer/composer-widget.vala b/src/client/composer/composer-widget.vala
index 52308d0..b3c8f88 100644
--- a/src/client/composer/composer-widget.vala
+++ b/src/client/composer/composer-widget.vala
@@ -233,7 +233,7 @@ public class ComposerWidget : Gtk.EventBox {
}
public ComposerWidget(Geary.Account account, ComposeType compose_type,
- Geary.Email? referred = null, bool is_referred_draft = false) {
+ Geary.Email? referred = null, string? quote = null, bool is_referred_draft = false) {
this.account = account;
this.compose_type = compose_type;
if (compose_type == ComposeType.NEW_MESSAGE)
@@ -428,13 +428,13 @@ public class ComposerWidget : Gtk.EventBox {
subject = reply_subject;
in_reply_to = reply_message_id;
references = Geary.RFC822.Utils.reply_references(referred);
- body_html = "\n\n" + Geary.RFC822.Utils.quote_email_for_reply(referred, true);
+ body_html = "\n\n" + Geary.RFC822.Utils.quote_email_for_reply(referred, quote, true);
pending_attachments = referred.attachments;
break;
case ComposeType.FORWARD:
subject = forward_subject;
- body_html = "\n\n" + Geary.RFC822.Utils.quote_email_for_forward(referred, true);
+ body_html = "\n\n" + Geary.RFC822.Utils.quote_email_for_forward(referred, quote, true);
add_attachments(referred.attachments);
pending_attachments = referred.attachments;
break;
diff --git a/src/client/conversation-viewer/conversation-viewer.vala
b/src/client/conversation-viewer/conversation-viewer.vala
index 8146e69..66bf8e8 100644
--- a/src/client/conversation-viewer/conversation-viewer.vala
+++ b/src/client/conversation-viewer/conversation-viewer.vala
@@ -211,8 +211,10 @@ public class ConversationViewer : Gtk.Box {
return messages.is_empty ? null : messages.last();
}
- public Geary.Email? get_selected_message() {
- WebKit.DOM.DOMSelection selection = web_view.get_dom_document().default_view.get_selection();
+ public Geary.Email? get_selected_message(out string? quote) {
+ quote = null;
+ WebKit.DOM.Document document = web_view.get_dom_document();
+ WebKit.DOM.DOMSelection selection = document.default_view.get_selection();
if (selection.is_collapsed)
return get_last_message();
@@ -230,8 +232,16 @@ public class ConversationViewer : Gtk.Box {
if (focus_element != null)
focus_email = get_email_from_element(focus_element);
- if (anchor_email != null && anchor_email == focus_email)
- return anchor_email;
+ if (anchor_email != null && anchor_email == focus_email) {
+ try {
+ WebKit.DOM.HTMLElement dummy = (WebKit.DOM.HTMLElement) document.create_element("div");
+ dummy.append_child(selection.get_range_at(0).clone_contents());
+ quote = dummy.get_inner_html();
+ return anchor_email;
+ } catch (Error error) {
+ debug("Problem getting selected text: %s", error.message);
+ }
+ }
return get_last_message();
}
diff --git a/src/engine/rfc822/rfc822-utils.vala b/src/engine/rfc822/rfc822-utils.vala
index 7d94d83..208bb10 100644
--- a/src/engine/rfc822/rfc822-utils.vala
+++ b/src/engine/rfc822/rfc822-utils.vala
@@ -148,14 +148,14 @@ public string email_addresses_for_reply(Geary.RFC822.MailboxAddresses? addresses
/**
* Returns a quoted text string needed for a reply.
*
- * If there's no message body in the supplied email, this function will
- * return the empty string.
+ * If there's no message body in the supplied email or quote text, this
+ * function will return the empty string.
*
* If html_format is true, the message will be quoted in HTML format.
* Otherwise it will be in plain text.
*/
-public string quote_email_for_reply(Geary.Email email, bool html_format) {
- if (email.body == null)
+public string quote_email_for_reply(Geary.Email email, string? quote, bool html_format) {
+ if (email.body == null && quote == null)
return "";
string quoted = "<br /><br />";
@@ -187,8 +187,7 @@ public string quote_email_for_reply(Geary.Email email, bool html_format) {
quoted += "<br />";
- if (email.body != null)
- quoted += "\n" + quote_body(email, true, html_format);
+ quoted += "\n" + quote_body(email, quote, true, html_format);
return quoted;
}
@@ -196,14 +195,14 @@ public string quote_email_for_reply(Geary.Email email, bool html_format) {
/**
* Returns a quoted text string needed for a forward.
*
- * If there's no message body in the supplied email, this function will
- * return the empty string.
+ * If there's no message body in the supplied email or quote text, this
+ * function will return the empty string.
*
* If html_format is true, the message will be quoted in HTML format.
* Otherwise it will be in plain text.
*/
-public string quote_email_for_forward(Geary.Email email, bool html_format) {
- if (email.body == null)
+public string quote_email_for_forward(Geary.Email email, string? quote, bool html_format) {
+ if (email.body == null && quote == null)
return "";
string quoted = "\n\n";
@@ -225,17 +224,16 @@ public string quote_email_for_forward(Geary.Email email, bool html_format) {
quoted = quoted.replace("\n", "<br />");
- if (email.body != null)
- quoted += quote_body(email, false, html_format);
+ quoted += quote_body(email, quote, false, html_format);
return quoted;
}
-private string quote_body(Geary.Email email, bool use_quotes, bool html_format) {
+private string quote_body(Geary.Email email, string? quote, bool use_quotes, bool html_format) {
string? body_text = "";
try {
- body_text = email.get_message().get_body(html_format);
+ body_text = quote ?? email.get_message().get_body(html_format);
} catch (Error error) {
debug("Could not get message text. %s", error.message);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]