From c259b85c5d13726ca1c0e204e751e310943d2048 Mon Sep 17 00:00:00 2001 From: Christopher James Lahey Date: Sat, 6 Oct 2001 15:47:29 +0000 Subject: Use g_dataset_set_data_full to find out when the context is destroyed. 2001-10-06 Christopher James Lahey * e-tree.c (context_destroyed), e-table.c (context_destroyed): Use g_dataset_set_data_full to find out when the context is destroyed. Fixes Ximian bug #8502 and Ximian bug #11691. svn path=/trunk/; revision=13482 --- widgets/table/e-table.c | 22 ++++++++++++++++++++++ widgets/table/e-tree.c | 23 +++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/widgets/table/e-table.c b/widgets/table/e-table.c index 9f250da2c2..0d148459b7 100644 --- a/widgets/table/e-table.c +++ b/widgets/table/e-table.c @@ -2078,6 +2078,27 @@ scroll_off (ETable *et) } } +static void +context_destroyed (gpointer data) +{ + ETable *et = data; + et->last_drop_x = 0; + et->last_drop_y = 0; + et->last_drop_time = 0; + et->last_drop_context = NULL; + scroll_off (et); + gtk_object_unref (GTK_OBJECT (et)); +} + +static void +context_connect (ETable *et, GdkDragContext *context) +{ + if (g_dataset_get_data (context, "e-table") == NULL) { + gtk_object_ref (GTK_OBJECT (et)); + g_dataset_set_data_full (context, "e-table", et, context_destroyed); + } +} + static void et_drag_leave(GtkWidget *widget, GdkDragContext *context, @@ -2110,6 +2131,7 @@ et_drag_motion(GtkWidget *widget, et->last_drop_y = y; et->last_drop_time = time; et->last_drop_context = context; + context_connect (et, context); ret_val = do_drag_motion (et, context, diff --git a/widgets/table/e-tree.c b/widgets/table/e-tree.c index acd841d085..9bb71f6c92 100644 --- a/widgets/table/e-tree.c +++ b/widgets/table/e-tree.c @@ -2210,6 +2210,28 @@ hover_off (ETree *et) } } +static void +context_destroyed (gpointer data) +{ + ETree *et = data; + et->priv->last_drop_x = 0; + et->priv->last_drop_y = 0; + et->priv->last_drop_time = 0; + et->priv->last_drop_context = NULL; + scroll_off (et); + hover_off (et); + gtk_object_unref (GTK_OBJECT (et)); +} + +static void +context_connect (ETree *et, GdkDragContext *context) +{ + if (g_dataset_get_data (context, "e-tree") == NULL) { + gtk_object_ref (GTK_OBJECT (et)); + g_dataset_set_data_full (context, "e-tree", et, context_destroyed); + } +} + static void et_drag_leave(GtkWidget *widget, GdkDragContext *context, @@ -2244,6 +2266,7 @@ et_drag_motion(GtkWidget *widget, et->priv->last_drop_y = y; et->priv->last_drop_time = time; et->priv->last_drop_context = context; + context_connect (et, context); if (et->priv->hover_idle_id != 0) { if (abs (et->priv->hover_x - x) > 3 || -- cgit v1.2.3