[evolution-data-server] Bug 316783 - Broken dragging of email addresses
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution-data-server] Bug 316783 - Broken dragging of email addresses
- Date: Tue, 22 Jun 2010 14:06:09 +0000 (UTC)
commit 4620be54fda5dfba45b90d8e14786541906c996c
Author: Matthew Barnes <mbarnes redhat com>
Date: Tue Jun 22 10:05:41 2010 -0400
Bug 316783 - Broken dragging of email addresses
configure.ac | 2 +-
libedataserverui/e-name-selector-entry.c | 63 +++++++++++++++++++++++++++++-
2 files changed, 63 insertions(+), 2 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index f8a1390..b5661d1 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1161,7 +1161,7 @@ AC_SUBST(E_DATA_SERVER_LIBS)
dnl ******************************
dnl libedataserverui
dnl ******************************
-E_DATA_SERVER_UI_DEPS="gtk+-2.0 libxml-2.0 gobject-2.0 gthread-2.0 gconf-2.0 $GNOME_KEYRING_REQUIREMENT"
+E_DATA_SERVER_UI_DEPS="gtk+-2.0 libxml-2.0 gobject-2.0 gthread-2.0 gconf-2.0 camel-1.2 $GNOME_KEYRING_REQUIREMENT"
EVO_SET_COMPILE_FLAGS(E_DATA_SERVER_UI, $E_DATA_SERVER_UI_DEPS, , )
AC_SUBST(E_DATA_SERVER_UI_CFLAGS)
diff --git a/libedataserverui/e-name-selector-entry.c b/libedataserverui/e-name-selector-entry.c
index 382f170..bfe053a 100644
--- a/libedataserverui/e-name-selector-entry.c
+++ b/libedataserverui/e-name-selector-entry.c
@@ -25,14 +25,17 @@
#include <string.h>
#include <glib/gi18n-lib.h>
+#include <camel/camel.h>
#include <libebook/e-book.h>
#include <libebook/e-contact.h>
#include <libebook/e-destination.h>
#include <libedataserverui/e-book-auth-util.h>
-#include "libedataserver/e-sexp.h"
+#include <libedataserver/e-sexp.h>
#include "e-name-selector-entry.h"
+#include "gtk-compat.h"
+
#define E_NAME_SELECTOR_ENTRY_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), E_TYPE_NAME_SELECTOR_ENTRY, ENameSelectorEntryPrivate))
@@ -136,6 +139,63 @@ name_selector_entry_realize (GtkWidget *widget)
}
static void
+name_selector_entry_drag_data_received (GtkWidget *widget,
+ GdkDragContext *context,
+ gint x,
+ gint y,
+ GtkSelectionData *selection_data,
+ guint info,
+ guint time)
+{
+ CamelInternetAddress *address;
+ gint n_addresses = 0;
+ gchar *text;
+
+ address = camel_internet_address_new ();
+ text = (gchar *) gtk_selection_data_get_text (selection_data);
+
+ /* See if Camel can parse a valid email address from the text. */
+ if (text != NULL && *text != '\0') {
+ camel_url_decode (text);
+ if (g_ascii_strncasecmp (text, "mailto:", 7) == 0)
+ n_addresses = camel_address_decode (
+ CAMEL_ADDRESS (address), text + 7);
+ else
+ n_addresses = camel_address_decode (
+ CAMEL_ADDRESS (address), text);
+ }
+
+ if (n_addresses > 0) {
+ GtkEditable *editable;
+ GdkDragAction action;
+ gboolean delete;
+ gint position;
+
+ editable = GTK_EDITABLE (widget);
+ gtk_editable_set_position (editable, -1);
+ position = gtk_editable_get_position (editable);
+
+ g_free (text);
+
+ text = camel_address_format (CAMEL_ADDRESS (address));
+ gtk_editable_insert_text (editable, text, -1, &position);
+
+ action = gdk_drag_context_get_selected_action (context);
+ delete = (action == GDK_ACTION_MOVE);
+ gtk_drag_finish (context, TRUE, delete, time);
+ }
+
+ g_object_unref (address);
+ g_free (text);
+
+ if (n_addresses <= 0)
+ /* Chain up to parent's drag_data_received() method. */
+ GTK_WIDGET_CLASS (e_name_selector_entry_parent_class)->
+ drag_data_received (widget, context, x, y,
+ selection_data, info, time);
+}
+
+static void
e_name_selector_entry_class_init (ENameSelectorEntryClass *class)
{
GObjectClass *object_class;
@@ -148,6 +208,7 @@ e_name_selector_entry_class_init (ENameSelectorEntryClass *class)
widget_class = GTK_WIDGET_CLASS (class);
widget_class->realize = name_selector_entry_realize;
+ widget_class->drag_data_received = name_selector_entry_drag_data_received;
signals[UPDATED] = g_signal_new (
"updated",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]