2004-06-22  Hans Petter Jansson  <hpj@ximian.com>

	Fixes #59622.

	* gui/widgets/e-minicard-view.c (e_minicard_view_init): Clear drag_list
	and canvas_drag_data_delete_id.
	(e_minicard_view_dispose): Clear drag_list. Disconnect drag_data_delete
	signal if connected.
	(e_minicard_view_drag_begin): Set up drag_data_delete signal if
	necessary. Clear old data before drag starts.
	(clear_drag_data): Implement.
	(e_minicard_view_drag_data_delete): Implement.
	(e_minicard_view_drag_data_get): Don't clear drag_list here.

svn path=/trunk/; revision=26459
This commit is contained in:
Hans Petter Jansson
2004-06-22 21:12:15 +00:00
committed by Hans Petter
parent d0b89545c5
commit ecb35cecb1
3 changed files with 62 additions and 0 deletions

View File

@ -1,3 +1,17 @@
2004-06-22 Hans Petter Jansson <hpj@ximian.com>
Fixes #59622.
* gui/widgets/e-minicard-view.c (e_minicard_view_init): Clear drag_list
and canvas_drag_data_delete_id.
(e_minicard_view_dispose): Clear drag_list. Disconnect drag_data_delete
signal if connected.
(e_minicard_view_drag_begin): Set up drag_data_delete signal if
necessary. Clear old data before drag starts.
(clear_drag_data): Implement.
(e_minicard_view_drag_data_delete): Implement.
(e_minicard_view_drag_data_get): Don't clear drag_list here.
2004-06-22 Chris Toshok <toshok@ximian.com>
[ should fix #60495, #58635 ]

View File

@ -93,7 +93,37 @@ e_minicard_view_drag_data_get(GtkWidget *widget,
break;
}
}
}
static void
e_minicard_view_drag_data_delete (GtkWidget *widget,
GdkDragContext *context,
EMinicardView *view)
{
EBook *book;
GList *l;
if (!E_IS_MINICARD_VIEW (view))
return;
if (!view->drag_list) {
g_warning ("e_minicard_view_drag_data_delete called without contact list");
return;
}
g_object_get (view->adapter, "book", &book, NULL);
for (l = view->drag_list; l; l = g_list_next (l)) {
EContact *contact = l->data;
/* XXX no callback */
e_book_async_remove_contact (book, contact, NULL, NULL);
}
}
static void
clear_drag_data (EMinicardView *view)
{
g_list_foreach (view->drag_list, (GFunc)g_object_unref, NULL);
g_list_free (view->drag_list);
view->drag_list = NULL;
@ -105,6 +135,8 @@ e_minicard_view_drag_begin (EAddressbookReflowAdapter *adapter, GdkEvent *event,
GdkDragContext *context;
GtkTargetList *target_list;
GdkDragAction actions = GDK_ACTION_MOVE | GDK_ACTION_COPY;
clear_drag_data (view);
view->drag_list = e_minicard_view_get_card_list (view);
@ -120,6 +152,11 @@ e_minicard_view_drag_begin (EAddressbookReflowAdapter *adapter, GdkEvent *event,
"drag_data_get",
G_CALLBACK (e_minicard_view_drag_data_get),
view);
if (!view->canvas_drag_data_delete_id)
view->canvas_drag_data_delete_id = g_signal_connect (GNOME_CANVAS_ITEM (view)->canvas,
"drag_data_delete",
G_CALLBACK (e_minicard_view_drag_data_delete),
view);
gtk_drag_set_icon_default (context);
@ -269,12 +306,20 @@ e_minicard_view_dispose (GObject *object)
{
EMinicardView *view = E_MINICARD_VIEW(object);
clear_drag_data (view);
if (view->canvas_drag_data_get_id) {
g_signal_handler_disconnect (GNOME_CANVAS_ITEM (view)->canvas,
view->canvas_drag_data_get_id);
view->canvas_drag_data_get_id = 0;
}
if (view->canvas_drag_data_delete_id) {
g_signal_handler_disconnect (GNOME_CANVAS_ITEM (view)->canvas,
view->canvas_drag_data_delete_id);
view->canvas_drag_data_delete_id = 0;
}
if (view->adapter) {
if (view->writable_status_id) {
EABModel *model;
@ -497,8 +542,10 @@ e_minicard_view_class_init (EMinicardViewClass *klass)
static void
e_minicard_view_init (EMinicardView *view)
{
view->drag_list = NULL;
view->adapter = NULL;
view->canvas_drag_data_get_id = 0;
view->canvas_drag_data_delete_id = 0;
view->writable_status_id = 0;
set_empty_message (view);

View File

@ -69,6 +69,7 @@ struct _EMinicardView
GList *drag_list;
guint canvas_drag_data_get_id;
guint canvas_drag_data_delete_id;
guint writable_status_id;
};