[evolution] Bug 750414 - Fails to drag&drop contacts between address books
- From: Milan Crha <mcrha src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution] Bug 750414 - Fails to drag&drop contacts between address books
- Date: Fri, 5 Jun 2015 13:04:45 +0000 (UTC)
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]