Fixes #59622.
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:
committed by
Hans Petter
parent
d0b89545c5
commit
ecb35cecb1
@ -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 ]
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user