[evolution/wip/mcrha/webkit-jsc-api] Replace/remove redundant functions
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/mcrha/webkit-jsc-api] Replace/remove redundant functions
- Date: Tue, 1 Oct 2019 08:09:06 +0000 (UTC)
commit 4ea58e68af63df5f634254669f525e35b4958b8d
Author: Milan Crha <mcrha redhat com>
Date: Tue Oct 1 10:09:27 2019 +0200
Replace/remove redundant functions
src/e-util/e-web-view.c | 231 +-------------------------------
src/e-util/e-web-view.h | 26 ----
src/mail/e-mail-display.c | 84 ------------
src/mail/e-mail-display.h | 9 --
src/mail/e-mail-reader-utils.c | 148 ++++++++++++++++----
src/plugins/mail-to-task/mail-to-task.c | 92 ++++++++-----
6 files changed, 184 insertions(+), 406 deletions(-)
---
diff --git a/src/e-util/e-web-view.c b/src/e-util/e-web-view.c
index d79f765c93..76dcfa566a 100644
--- a/src/e-util/e-web-view.c
+++ b/src/e-util/e-web-view.c
@@ -229,18 +229,19 @@ e_web_view_search_web_get_selection_cb (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
- gchar *text;
+ GSList *texts;
GError *local_error = NULL;
g_return_if_fail (E_IS_WEB_VIEW (source));
- text = e_web_view_get_selection_content_text_finish (E_WEB_VIEW (source), result, &local_error);
+ e_web_view_jsc_get_selection_finish (WEBKIT_WEB_VIEW (source), result, &texts, &local_error);
if (local_error &&
!g_error_matches (local_error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
e_alert_submit (E_ALERT_SINK (source), "widgets:get-selected-text-failed",
local_error->message, NULL);
- } else if (!local_error) {
+ } else if (!texts) {
GSettings *settings;
+ gchar *text = texts->data;
gchar *uri_prefix;
gchar *escaped;
gchar *uri;
@@ -270,14 +271,14 @@ e_web_view_search_web_get_selection_cb (GObject *source,
}
g_clear_error (&local_error);
- g_free (text);
+ g_slist_free_full (texts, g_free);
}
static void
action_search_web_cb (GtkAction *action,
EWebView *web_view)
{
- e_web_view_get_selection_content_text (web_view, web_view->priv->load_cancellable,
+ e_web_view_jsc_get_selection (WEBKIT_WEB_VIEW (web_view), E_TEXT_FORMAT_PLAIN,
web_view->priv->load_cancellable,
e_web_view_search_web_get_selection_cb, NULL);
}
@@ -3284,226 +3285,6 @@ e_web_view_update_actions (EWebView *web_view)
g_signal_emit (web_view, signals[UPDATE_ACTIONS], 0);
}
-static void
-get_selection_content_html_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GDBusProxy *web_extension;
- GTask *task = user_data;
- GVariant *result_variant;
- gchar *html_content = NULL;
- GError *error = NULL;
-
- g_return_if_fail (G_IS_DBUS_PROXY (source_object));
- g_return_if_fail (G_IS_TASK (task));
-
- web_extension = G_DBUS_PROXY (source_object);
-
- result_variant = g_dbus_proxy_call_finish (web_extension, result, &error);
- if (result_variant)
- g_variant_get (result_variant, "(s)", &html_content);
- g_variant_unref (result_variant);
-
- g_task_return_pointer (task, html_content, g_free);
- g_object_unref (task);
-
- if (error)
- g_dbus_error_strip_remote_error (error);
-
- e_util_claim_dbus_proxy_call_error (web_extension, "GetSelectionContentHTML", error);
- g_clear_error (&error);
-}
-
-void
-e_web_view_get_selection_content_html (EWebView *web_view,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDBusProxy *web_extension;
- GTask *task;
-
- g_return_if_fail (E_IS_WEB_VIEW (web_view));
-
- task = g_task_new (web_view, cancellable, callback, user_data);
-
- web_extension = e_web_view_get_web_extension_proxy (web_view);
- if (web_extension) {
- g_dbus_proxy_call (
- web_extension,
- "GetSelectionContentHTML",
- g_variant_new (
- "(t)",
- webkit_web_view_get_page_id (
- WEBKIT_WEB_VIEW (web_view))),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cancellable,
- get_selection_content_html_cb,
- g_object_ref (task));
- } else
- g_task_return_pointer (task, NULL, NULL);
-}
-
-gchar *
-e_web_view_get_selection_content_html_finish (EWebView *web_view,
- GAsyncResult *result,
- GError **error)
-{
- g_return_val_if_fail (E_IS_WEB_VIEW (web_view), NULL);
- g_return_val_if_fail (g_task_is_valid (result, web_view), FALSE);
-
- return g_task_propagate_pointer (G_TASK (result), error);
-}
-
-gchar *
-e_web_view_get_selection_content_html_sync (EWebView *web_view,
- GCancellable *cancellable,
- GError **error)
-{
- GDBusProxy *web_extension;
-
- g_return_val_if_fail (E_IS_WEB_VIEW (web_view), NULL);
-
- web_extension = e_web_view_get_web_extension_proxy (web_view);
- if (web_extension) {
- GVariant *result;
-
- result = e_util_invoke_g_dbus_proxy_call_sync_wrapper_full (
- web_extension,
- "GetSelectionContentHTML",
- g_variant_new (
- "(t)",
- webkit_web_view_get_page_id (
- WEBKIT_WEB_VIEW (web_view))),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cancellable,
- error);
-
- if (result) {
- gchar *html_content = NULL;
-
- g_variant_get (result, "(s)", &html_content);
- g_variant_unref (result);
- return html_content;
- }
- }
-
- return NULL;
-}
-
-static void
-get_selection_content_text_cb (GObject *source_object,
- GAsyncResult *result,
- gpointer user_data)
-{
- GDBusProxy *web_extension;
- GTask *task = user_data;
- GVariant *result_variant;
- gchar *text_content = NULL;
- GError *error = NULL;
-
- g_return_if_fail (G_IS_DBUS_PROXY (source_object));
- g_return_if_fail (G_IS_TASK (task));
-
- web_extension = G_DBUS_PROXY (source_object);
-
- result_variant = g_dbus_proxy_call_finish (web_extension, result, &error);
- if (result_variant)
- g_variant_get (result_variant, "(s)", &text_content);
- g_variant_unref (result_variant);
-
- g_task_return_pointer (task, text_content, g_free);
- g_object_unref (task);
-
- if (error)
- g_dbus_error_strip_remote_error (error);
-
- e_util_claim_dbus_proxy_call_error (web_extension, "GetSelectionContentText", error);
- g_clear_error (&error);
-}
-
-void
-e_web_view_get_selection_content_text (EWebView *web_view,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data)
-{
- GDBusProxy *web_extension;
- GTask *task;
-
- g_return_if_fail (E_IS_WEB_VIEW (web_view));
-
- task = g_task_new (web_view, cancellable, callback, user_data);
-
- web_extension = e_web_view_get_web_extension_proxy (web_view);
- if (web_extension) {
- g_dbus_proxy_call (
- web_extension,
- "GetSelectionContentText",
- g_variant_new (
- "(t)",
- webkit_web_view_get_page_id (
- WEBKIT_WEB_VIEW (web_view))),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cancellable,
- get_selection_content_text_cb,
- g_object_ref (task));
- } else
- g_task_return_pointer (task, NULL, NULL);
-}
-
-gchar *
-e_web_view_get_selection_content_text_finish (EWebView *web_view,
- GAsyncResult *result,
- GError **error)
-{
- g_return_val_if_fail (E_IS_WEB_VIEW (web_view), NULL);
- g_return_val_if_fail (g_task_is_valid (result, web_view), FALSE);
-
- return g_task_propagate_pointer (G_TASK (result), error);
-}
-
-gchar *
-e_web_view_get_selection_content_text_sync (EWebView *web_view,
- GCancellable *cancellable,
- GError **error)
-{
- GDBusProxy *web_extension;
-
- g_return_val_if_fail (E_IS_WEB_VIEW (web_view), NULL);
-
- web_extension = e_web_view_get_web_extension_proxy (web_view);
- if (web_extension) {
- GVariant *result;
-
- result = e_util_invoke_g_dbus_proxy_call_sync_wrapper_full (
- web_extension,
- "GetSelectionContentText",
- g_variant_new (
- "(t)",
- webkit_web_view_get_page_id (
- WEBKIT_WEB_VIEW (web_view))),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cancellable,
- error);
-
- if (result) {
- gchar *text_content = NULL;
-
- g_variant_get (result, "(s)", &text_content);
- g_variant_unref (result);
- return text_content;
- }
- }
-
- return NULL;
-}
-
const gchar *
e_web_view_get_citation_color_for_level (gint level)
{
diff --git a/src/e-util/e-web-view.h b/src/e-util/e-web-view.h
index de1ec6c123..e0cc5cd45a 100644
--- a/src/e-util/e-web-view.h
+++ b/src/e-util/e-web-view.h
@@ -215,32 +215,6 @@ void e_web_view_status_message (EWebView *web_view,
const gchar *status_message);
void e_web_view_stop_loading (EWebView *web_view);
void e_web_view_update_actions (EWebView *web_view);
-void e_web_view_get_selection_content_html
- (EWebView *web_view,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gchar * e_web_view_get_selection_content_html_finish
- (EWebView *web_view,
- GAsyncResult *result,
- GError **error);
-gchar * e_web_view_get_selection_content_html_sync
- (EWebView *web_view,
- GCancellable *cancellable,
- GError **error);
-void e_web_view_get_selection_content_text
- (EWebView *web_view,
- GCancellable *cancellable,
- GAsyncReadyCallback callback,
- gpointer user_data);
-gchar * e_web_view_get_selection_content_text_finish
- (EWebView *web_view,
- GAsyncResult *result,
- GError **error);
-gchar * e_web_view_get_selection_content_text_sync
- (EWebView *web_view,
- GCancellable *cancellable,
- GError **error);
void e_web_view_update_fonts (EWebView *web_view);
void e_web_view_cursor_image_copy (EWebView *web_view);
void e_web_view_cursor_image_save (EWebView *web_view);
diff --git a/src/mail/e-mail-display.c b/src/mail/e-mail-display.c
index 9257d9fd61..b0c4a365bc 100644
--- a/src/mail/e-mail-display.c
+++ b/src/mail/e-mail-display.c
@@ -2766,90 +2766,6 @@ e_mail_display_set_status (EMailDisplay *display,
g_free (str);
}
-gchar *
-e_mail_display_get_selection_content_multipart_sync (EMailDisplay *display,
- gboolean *is_html,
- GCancellable *cancellable,
- GError **error)
-{
- GDBusProxy *web_extension;
-
- g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL);
-
- if (!e_web_view_has_selection (E_WEB_VIEW (display)))
- return NULL;
-
- web_extension = e_web_view_get_web_extension_proxy (E_WEB_VIEW (display));
- if (web_extension) {
- GVariant *result;
-
- result = e_util_invoke_g_dbus_proxy_call_sync_wrapper_full (
- web_extension,
- "GetSelectionContentMultipart",
- g_variant_new (
- "(t)",
- webkit_web_view_get_page_id (
- WEBKIT_WEB_VIEW (display))),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cancellable,
- error);
-
- if (result) {
- gchar *content = NULL;
- gboolean text_html = FALSE;
-
- g_variant_get (result, "(sb)", &content, &text_html);
- g_variant_unref (result);
- if (is_html)
- *is_html = text_html;
- return content;
- }
- }
-
- return NULL;
-}
-
-gchar *
-e_mail_display_get_selection_plain_text_sync (EMailDisplay *display,
- GCancellable *cancellable,
- GError **error)
-{
- GDBusProxy *web_extension;
-
- g_return_val_if_fail (E_IS_MAIL_DISPLAY (display), NULL);
-
- if (!e_web_view_has_selection (E_WEB_VIEW (display)))
- return NULL;
-
- web_extension = e_web_view_get_web_extension_proxy (E_WEB_VIEW (display));
- if (web_extension) {
- GVariant *result;
-
- result = e_util_invoke_g_dbus_proxy_call_sync_wrapper_full (
- web_extension,
- "GetSelectionContentText",
- g_variant_new (
- "(t)",
- webkit_web_view_get_page_id (
- WEBKIT_WEB_VIEW (display))),
- G_DBUS_CALL_FLAGS_NONE,
- -1,
- cancellable,
- error);
-
- if (result) {
- gchar *text;
-
- g_variant_get (result, "(s)", &text);
- g_variant_unref (result);
- return text;
- }
- }
-
- return NULL;
-}
-
void
e_mail_display_load_images (EMailDisplay *display)
{
diff --git a/src/mail/e-mail-display.h b/src/mail/e-mail-display.h
index ed02f189e5..cacf64e2d5 100644
--- a/src/mail/e-mail-display.h
+++ b/src/mail/e-mail-display.h
@@ -94,15 +94,6 @@ GtkAction * e_mail_display_get_action (EMailDisplay *display,
const gchar *action_name);
void e_mail_display_set_status (EMailDisplay *display,
const gchar *status);
-gchar * e_mail_display_get_selection_content_multipart_sync
- (EMailDisplay *display,
- gboolean *is_html,
- GCancellable *cancellable,
- GError **error);
-gchar * e_mail_display_get_selection_plain_text_sync
- (EMailDisplay *display,
- GCancellable *cancellable,
- GError **error);
void e_mail_display_load_images (EMailDisplay *display);
void e_mail_display_set_force_load_images
(EMailDisplay *display,
diff --git a/src/mail/e-mail-reader-utils.c b/src/mail/e-mail-reader-utils.c
index 5fe3b12ce7..b8bf1e86f8 100644
--- a/src/mail/e-mail-reader-utils.c
+++ b/src/mail/e-mail-reader-utils.c
@@ -2615,10 +2615,12 @@ mail_reader_reply_to_message_composer_created_cb (GObject *source_object,
create_composer_data_free (ccd);
}
-void
-e_mail_reader_reply_to_message (EMailReader *reader,
- CamelMimeMessage *src_message,
- EMailReplyType reply_type)
+static void
+e_mail_reader_reply_to_message_with_selection (EMailReader *reader,
+ CamelMimeMessage *src_message,
+ EMailReplyType reply_type,
+ const gchar *selection,
+ gboolean selection_is_html)
{
EShell *shell;
EMailBackend *backend;
@@ -2626,17 +2628,14 @@ e_mail_reader_reply_to_message (EMailReader *reader,
EMailDisplay *display;
EMailPartList *part_list = NULL;
GtkWidget *message_list;
- CamelContentType *content_type;
CamelMimeMessage *new_message;
CamelInternetAddress *address = NULL;
CamelFolder *folder;
EMailReplyStyle reply_style;
EWebView *web_view;
- gboolean src_is_text_html = FALSE;
const CamelNameValueArray *headers;
guint ii, len;
const gchar *uid;
- gchar *selection = NULL;
gint length;
gchar *mail_uri;
CamelObjectBag *registry;
@@ -2737,31 +2736,14 @@ e_mail_reader_reply_to_message (EMailReader *reader,
if (!e_web_view_has_selection (web_view))
goto whole_message;
- content_type = camel_mime_part_get_content_type (CAMEL_MIME_PART (src_message));
-
- if (camel_content_type_is (content_type, "text", "plain")) {
- selection = e_mail_display_get_selection_plain_text_sync (display, NULL, NULL);
- src_is_text_html = FALSE;
- } else if (camel_content_type_is (content_type, "text", "html")) {
- selection = e_web_view_get_selection_content_html_sync (E_WEB_VIEW (display), NULL, NULL);
- src_is_text_html = TRUE;
- } else {
- selection = e_mail_display_get_selection_content_multipart_sync (display, &src_is_text_html,
NULL, NULL);
- }
-
if (selection == NULL || *selection == '\0')
goto whole_message;
length = strlen (selection);
- if ((src_is_text_html && !html_contains_nonwhitespace (selection, length)) ||
- (!src_is_text_html && !plaintext_contains_nonwhitespace (selection, length)))
+ if ((selection_is_html && !html_contains_nonwhitespace (selection, length)) ||
+ (!selection_is_html && !plaintext_contains_nonwhitespace (selection, length)))
goto whole_message;
- if (!src_is_text_html) {
- maybe_mangle_plaintext_signature_delimiter (&selection);
- length = strlen (selection);
- }
-
new_message = camel_mime_message_new ();
/* Filter out "content-*" headers. */
@@ -2789,7 +2771,7 @@ e_mail_reader_reply_to_message (EMailReader *reader,
CAMEL_MIME_PART (new_message),
selection,
length,
- src_is_text_html ? "text/html; charset=utf-8" : "text/plain; charset=utf-8");
+ selection_is_html ? "text/html; charset=utf-8" : "text/plain; charset=utf-8");
ccd = g_new0 (CreateComposerData, 1);
ccd->reader = g_object_ref (reader);
@@ -2853,11 +2835,121 @@ whole_message:
}
exit:
- g_free (selection);
g_clear_object (&address);
g_clear_object (&folder);
}
+typedef struct _GetSelectionData {
+ EMailReader *reader;
+ CamelMimeMessage *src_message;
+ EMailReplyType reply_type;
+ gboolean selection_is_html;
+} GetSelectionData;
+
+static void
+reply_got_message_selection_jsc_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
+{
+ GetSelectionData *gsd = user_data;
+ gchar *selection;
+ GSList *texts = NULL;
+ GError *error = NULL;
+
+ g_return_if_fail (gsd != NULL);
+ g_return_if_fail (E_IS_WEB_VIEW (source_object));
+
+ if (!e_web_view_jsc_get_selection_finish (WEBKIT_WEB_VIEW (source_object), result, &texts, &error)) {
+ texts = NULL;
+ g_warning ("%s: Failed to get view selection: %s", G_STRFUNC, error ? error->message :
"Unknown error");
+ }
+
+ selection = texts ? texts->data : NULL;
+
+ if (selection && !gsd->selection_is_html) {
+ maybe_mangle_plaintext_signature_delimiter (&selection);
+ texts->data = selection;
+ }
+
+ e_mail_reader_reply_to_message_with_selection (gsd->reader, gsd->src_message, gsd->reply_type,
selection, gsd->selection_is_html);
+
+ g_slist_free_full (texts, g_free);
+ g_clear_error (&error);
+ g_clear_object (&gsd->reader);
+ g_clear_object (&gsd->src_message);
+ g_free (gsd);
+}
+
+void
+e_mail_reader_reply_to_message (EMailReader *reader,
+ CamelMimeMessage *src_message,
+ EMailReplyType reply_type)
+{
+ CamelContentType *ct;
+ GetSelectionData *gsd;
+ EMailDisplay *mail_display;
+ EMailPartList *part_list = NULL;
+ EWebView *web_view;
+
+ g_return_if_fail (E_IS_MAIL_READER (reader));
+
+ mail_display = e_mail_reader_get_mail_display (reader);
+ g_return_if_fail (E_IS_MAIL_DISPLAY (mail_display));
+
+ web_view = E_WEB_VIEW (mail_display);
+
+ if (!gtk_widget_get_visible (GTK_WIDGET (web_view)) ||
+ !e_web_view_has_selection (web_view)) {
+ e_mail_reader_reply_to_message_with_selection (reader, src_message, reply_type, NULL, FALSE);
+ return;
+ }
+
+ if (!src_message) {
+ CamelFolder *folder;
+ GtkWidget *message_list;
+ const gchar *uid;
+ gchar *mail_uri;
+
+ message_list = e_mail_reader_get_message_list (reader);
+
+ uid = MESSAGE_LIST (message_list)->cursor_uid;
+ g_return_if_fail (uid != NULL);
+
+ folder = e_mail_reader_ref_folder (reader);
+ mail_uri = e_mail_part_build_uri (folder, uid, NULL, NULL);
+ part_list = camel_object_bag_get (e_mail_part_list_get_registry (), mail_uri);
+ g_clear_object (&folder);
+ g_free (mail_uri);
+
+ src_message = part_list ? e_mail_part_list_get_message (part_list) : NULL;
+
+ if (!src_message) {
+ e_mail_reader_reply_to_message_with_selection (reader, src_message, reply_type, NULL,
FALSE);
+ g_clear_object (&part_list);
+ return;
+ }
+ }
+
+ gsd = g_slice_new0 (GetSelectionData);
+ gsd->reader = g_object_ref (reader);
+ gsd->src_message = src_message ? g_object_ref (src_message) : NULL;
+ gsd->reply_type = reply_type;
+
+ ct = camel_mime_part_get_content_type (CAMEL_MIME_PART (src_message));
+
+ if (camel_content_type_is (ct, "text", "plain")) {
+ gsd->selection_is_html = FALSE;
+ e_web_view_jsc_get_selection (WEBKIT_WEB_VIEW (web_view), E_TEXT_FORMAT_PLAIN, NULL,
+ reply_got_message_selection_jsc_cb, gsd);
+ } else {
+ gsd->selection_is_html = TRUE;
+ e_web_view_jsc_get_selection (WEBKIT_WEB_VIEW (web_view), E_TEXT_FORMAT_HTML, NULL,
+ reply_got_message_selection_jsc_cb, gsd);
+ }
+
+ g_clear_object (&part_list);
+}
+
static void
mail_reader_save_messages_cb (GObject *source_object,
GAsyncResult *result,
diff --git a/src/plugins/mail-to-task/mail-to-task.c b/src/plugins/mail-to-task/mail-to-task.c
index 6d9f6eac8f..ca443dcda5 100644
--- a/src/plugins/mail-to-task/mail-to-task.c
+++ b/src/plugins/mail-to-task/mail-to-task.c
@@ -1091,43 +1091,71 @@ text_contains_nonwhitespace (const gchar *text,
return p - text < len - 1 && c != 0;
}
-static gchar *
-get_selected_text (EMailReader *reader)
+static void
+get_charsets (EMailReader *reader,
+ gchar **default_charset,
+ gchar **forced_charset)
{
EMailDisplay *display;
- gchar *text = NULL;
+ EMailFormatter *formatter;
display = e_mail_reader_get_mail_display (reader);
+ formatter = e_mail_display_get_formatter (display);
- if (!e_web_view_has_selection (E_WEB_VIEW (display)))
- return NULL;
+ *default_charset = e_mail_formatter_dup_default_charset (formatter);
+ *forced_charset = e_mail_formatter_dup_charset (formatter);
+}
- text = e_mail_display_get_selection_plain_text_sync (display, NULL, NULL);
+static void
+start_mail_to_event_thread (AsyncData *data)
+{
+ GThread *thread = NULL;
+ GError *error = NULL;
- if (!text)
- return NULL;
+ thread = g_thread_try_new (NULL, (GThreadFunc) do_mail_to_event, data, &error);
- if (!text_contains_nonwhitespace (text, strlen (text))) {
- g_free (text);
- return NULL;
+ if (error != NULL) {
+ g_warning (G_STRLOC ": %s", error->message);
+ g_error_free (error);
+ } else {
+ g_thread_unref (thread);
}
-
- return text;
}
static void
-get_charsets (EMailReader *reader,
- gchar **default_charset,
- gchar **forced_charset)
+mail_to_task_got_selection_jsc_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- EMailDisplay *display;
- EMailFormatter *formatter;
+ AsyncData *data = user_data;
+ GSList *texts = NULL;
+ gchar *text;
+ GError *error = NULL;
- display = e_mail_reader_get_mail_display (reader);
- formatter = e_mail_display_get_formatter (display);
+ g_return_if_fail (data != NULL);
+ g_return_if_fail (E_IS_WEB_VIEW (source_object));
- *default_charset = e_mail_formatter_dup_default_charset (formatter);
- *forced_charset = e_mail_formatter_dup_charset (formatter);
+ if (!e_web_view_jsc_get_selection_finish (WEBKIT_WEB_VIEW (source_object), result, &texts, &error)) {
+ texts = NULL;
+ g_warning ("%s: Failed to get view selection: %s", G_STRFUNC, error ? error->message :
"Unknown error");
+ }
+
+ text = texts ? texts->data : NULL;
+
+ if (text && !text_contains_nonwhitespace (text, strlen (text))) {
+ text = NULL;
+ } else {
+ /* Steal the pointer */
+ if (texts)
+ texts->data = NULL;
+ }
+
+ data->selected_text = text;
+
+ start_mail_to_event_thread (data);
+
+ g_slist_free_full (texts, g_free);
+ g_clear_error (&error);
}
static void
@@ -1227,8 +1255,7 @@ mail_to_event (ECalClientSourceType source_type,
if (source) {
/* if a source has been selected, perform the mail2event operation */
AsyncData *data = NULL;
- GThread *thread = NULL;
- GError *error = NULL;
+ EMailDisplay *mail_display;
/* Fill the elements in AsynData */
data = g_new0 (AsyncData, 1);
@@ -1241,18 +1268,15 @@ mail_to_event (ECalClientSourceType source_type,
data->with_attendees = with_attendees;
get_charsets (reader, &data->default_charset, &data->forced_charset);
- if (uids->len == 1)
- data->selected_text = get_selected_text (reader);
- else
- data->selected_text = NULL;
+ mail_display = e_mail_reader_get_mail_display (reader);
- thread = g_thread_try_new (
- NULL, (GThreadFunc) do_mail_to_event, data, &error);
- if (error != NULL) {
- g_warning (G_STRLOC ": %s", error->message);
- g_error_free (error);
+ if (uids->len == 1 && e_web_view_has_selection (E_WEB_VIEW (mail_display))) {
+ e_web_view_jsc_get_selection (WEBKIT_WEB_VIEW (mail_display), E_TEXT_FORMAT_PLAIN,
NULL,
+ mail_to_task_got_selection_jsc_cb, data);
} else {
- g_thread_unref (thread);
+ data->selected_text = NULL;
+
+ start_mail_to_event_thread (data);
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]