[evolution/wip/webkit-composer] Add support for Drag&Drop of base64 encoded images
- From: Tomas Popela <tpopela src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/webkit-composer] Add support for Drag&Drop of base64 encoded images
- Date: Thu, 6 Feb 2014 09:33:38 +0000 (UTC)
commit ef5cf1eacc440c5e8fcc7a708bf3a3f4e174d384
Author: Tomas Popela <tpopela redhat com>
Date: Thu Feb 6 10:30:08 2014 +0100
Add support for Drag&Drop of base64 encoded images
These images can be found in the attachments below the received message.
composer/e-composer-private.c | 31 ++++++++++++++++++++++++++++++-
composer/e-composer-private.h | 3 +++
composer/e-msg-composer.c | 20 +++++++++++++++++++-
3 files changed, 52 insertions(+), 2 deletions(-)
---
diff --git a/composer/e-composer-private.c b/composer/e-composer-private.c
index 172321c..a9246b3 100644
--- a/composer/e-composer-private.c
+++ b/composer/e-composer-private.c
@@ -633,6 +633,35 @@ e_composer_paste_uris (EMsgComposer *composer,
}
gboolean
+e_composer_selection_is_base64_uris (EMsgComposer *composer,
+ GtkSelectionData *selection)
+{
+ gboolean all_base64_uris = TRUE;
+ gchar **uris;
+ guint ii;
+
+ g_return_val_if_fail (E_IS_MSG_COMPOSER (composer), FALSE);
+ g_return_val_if_fail (selection != NULL, FALSE);
+
+ uris = gtk_selection_data_get_uris (selection);
+
+ if (!uris)
+ return FALSE;
+
+ for (ii = 0; uris[ii] != NULL; ii++) {
+ if (!((g_str_has_prefix (uris[ii], "data:") || strstr (uris[ii], ";data:"))
+ && strstr (uris[ii], ";base64,"))) {
+ all_base64_uris = FALSE;
+ break;
+ }
+ }
+
+ g_strfreev (uris);
+
+ return all_base64_uris;
+}
+
+gboolean
e_composer_selection_is_image_uris (EMsgComposer *composer,
GtkSelectionData *selection)
{
@@ -645,7 +674,7 @@ e_composer_selection_is_image_uris (EMsgComposer *composer,
uris = gtk_selection_data_get_uris (selection);
- if (uris == NULL)
+ if (!uris)
return FALSE;
for (ii = 0; uris[ii] != NULL; ii++) {
diff --git a/composer/e-composer-private.h b/composer/e-composer-private.h
index 5cd405f..9216133 100644
--- a/composer/e-composer-private.h
+++ b/composer/e-composer-private.h
@@ -116,6 +116,9 @@ gboolean e_composer_paste_text (EMsgComposer *composer,
GtkClipboard *clipboard);
gboolean e_composer_paste_uris (EMsgComposer *composer,
GtkClipboard *clipboard);
+gboolean e_composer_selection_is_base64_uris
+ (EMsgComposer *composer,
+ GtkSelectionData *selection);
gboolean e_composer_selection_is_image_uris
(EMsgComposer *composer,
GtkSelectionData *selection);
diff --git a/composer/e-msg-composer.c b/composer/e-msg-composer.c
index 93d766f..f261179 100644
--- a/composer/e-msg-composer.c
+++ b/composer/e-msg-composer.c
@@ -1836,7 +1836,25 @@ msg_composer_drag_data_received_cb (GtkWidget *widget,
} while (list_len);
}
- /* FIXME CID images */
+ if (e_composer_selection_is_base64_uris (composer, selection)) {
+ const guchar *data;
+ gint length;
+ gint list_len, len;
+ gchar *uri;
+
+ data = gtk_selection_data_get_data (selection);
+ length = gtk_selection_data_get_length (selection);
+
+ if (!data || length < 0)
+ return;
+
+ list_len = length;
+ do {
+ uri = next_uri ((guchar **) &data, &len, &list_len);
+
+ e_editor_selection_insert_image (editor_selection, uri);
+ } while (list_len);
+ }
} else {
view = e_msg_composer_get_attachment_view (composer);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]