[evolution] Bug 750414 - Fails to drag&drop contacts between address books



commit d7e67ff96409a5878cf4c8e65558113a11570678
Author: Milan Crha <mcrha redhat com>
Date:   Fri Jun 5 15:01:46 2015 +0200

    Bug 750414 - Fails to drag&drop contacts between address books

 addressbook/gui/widgets/e-addressbook-selector.c |   25 ++++++++++++++++++---
 addressbook/gui/widgets/e-minicard-view.c        |    4 +--
 e-util/e-selection.c                             |    6 ++--
 3 files changed, 25 insertions(+), 10 deletions(-)
---
diff --git a/addressbook/gui/widgets/e-addressbook-selector.c 
b/addressbook/gui/widgets/e-addressbook-selector.c
index 5d4eb93..e4c18ff 100644
--- a/addressbook/gui/widgets/e-addressbook-selector.c
+++ b/addressbook/gui/widgets/e-addressbook-selector.c
@@ -57,7 +57,7 @@ enum {
 };
 
 static GtkTargetEntry drag_types[] = {
-       { (gchar *) "text/x-source-vcard", 0, 0 }
+       { (gchar *) "text/x-source-vcard", 0, 1 }
 };
 
 G_DEFINE_TYPE (
@@ -297,6 +297,7 @@ addressbook_selector_data_dropped (ESourceSelector *selector,
        MergeContext *merge_context;
        EAddressbookModel *model;
        EBookClient *source_client;
+       ESource *source_source = NULL;
        ESourceRegistry *registry;
        GSList *list;
        const gchar *string;
@@ -310,16 +311,32 @@ addressbook_selector_data_dropped (ESourceSelector *selector,
 
        registry = e_source_selector_get_registry (selector);
 
-       eab_source_and_contact_list_from_string (
-               registry, string, NULL, &list);
+       if (info == drag_types[0].info)
+               eab_source_and_contact_list_from_string (
+                       registry, string, &source_source, &list);
+       else
+               list = eab_contact_list_from_string (string);
 
-       if (list == NULL)
+       if (list == NULL) {
+               g_clear_object (&source_source);
                return FALSE;
+       }
 
        model = e_addressbook_view_get_model (priv->current_view);
        source_client = e_addressbook_model_get_client (model);
        g_return_val_if_fail (E_IS_BOOK_CLIENT (source_client), FALSE);
 
+       if (remove_from_source && source_source &&
+           !e_source_equal (source_source, e_client_get_source (E_CLIENT (source_client)))) {
+               g_warning ("%s: Source book '%s' doesn't match the view client '%s', skipping drop",
+                       G_STRFUNC, e_source_get_uid (source_source),
+                       e_source_get_uid (e_client_get_source (E_CLIENT (source_client))));
+               g_clear_object (&source_source);
+               return FALSE;
+       }
+
+       g_clear_object (&source_source);
+
        merge_context = merge_context_new (
                registry, g_object_ref (source_client), NULL, list);
        merge_context->remove_from_source = remove_from_source;
diff --git a/addressbook/gui/widgets/e-minicard-view.c b/addressbook/gui/widgets/e-minicard-view.c
index 023c71d..7f2160f 100644
--- a/addressbook/gui/widgets/e-minicard-view.c
+++ b/addressbook/gui/widgets/e-minicard-view.c
@@ -106,7 +106,7 @@ e_minicard_view_drag_data_get (GtkWidget *widget,
                EBookClient *book_client = NULL;
                gchar *value;
 
-               g_object_get (view->adapter, "book_client", &book_client, NULL);
+               g_object_get (view->adapter, "client", &book_client, NULL);
                value = eab_book_and_contact_list_to_string (book_client, view->drag_list);
 
                gtk_selection_data_set (
@@ -140,8 +140,6 @@ e_minicard_view_drag_begin (EAddressbookReflowAdapter *adapter,
 
        view->drag_list = e_minicard_view_get_card_list (view);
 
-       g_print ("dragging %d card(s)\n", g_slist_length (view->drag_list));
-
        target_list = gtk_target_list_new (drag_types, G_N_ELEMENTS (drag_types));
 
        context = gtk_drag_begin (
diff --git a/e-util/e-selection.c b/e-util/e-selection.c
index 13d3e06..c789c73 100644
--- a/e-util/e-selection.c
+++ b/e-util/e-selection.c
@@ -807,7 +807,7 @@ e_drag_dest_add_calendar_targets (GtkWidget *widget)
 
        g_return_if_fail (GTK_IS_WIDGET (widget));
 
-       target_list = gtk_drag_source_get_target_list (widget);
+       target_list = gtk_drag_dest_get_target_list (widget);
        if (target_list != NULL)
                gtk_target_list_ref (target_list);
        else
@@ -824,7 +824,7 @@ e_drag_dest_add_directory_targets (GtkWidget *widget)
 
        g_return_if_fail (GTK_IS_WIDGET (widget));
 
-       target_list = gtk_drag_source_get_target_list (widget);
+       target_list = gtk_drag_dest_get_target_list (widget);
        if (target_list != NULL)
                gtk_target_list_ref (target_list);
        else
@@ -841,7 +841,7 @@ e_drag_dest_add_html_targets (GtkWidget *widget)
 
        g_return_if_fail (GTK_IS_WIDGET (widget));
 
-       target_list = gtk_drag_source_get_target_list (widget);
+       target_list = gtk_drag_dest_get_target_list (widget);
        if (target_list != NULL)
                gtk_target_list_ref (target_list);
        else


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]