diff options
author | Owen Taylor <otaylor@redhat.com> | 2002-01-17 22:28:02 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2002-01-17 22:28:02 +0000 |
commit | cf25093441d43b9225ae0a1a7eceaa31ef3a3d49 (patch) | |
tree | 9107311649f9b0b8a77c5a61e3a6e2effa907649 /gtk/gtkselection.c | |
parent | c8698f924d4b0252082eb3eea05bdc2d83480c89 (diff) | |
download | gtk+-cf25093441d43b9225ae0a1a7eceaa31ef3a3d49.tar.gz |
Call gtk_selection_remove_all() here, not in destroy/ finalize. (#66636,
Thu Jan 17 17:02:38 2002 Owen Taylor <otaylor@redhat.com>
* gtk/gtkwidget.c (gtk_widget_real_unrealize): Call
gtk_selection_remove_all() here, not in destroy/
finalize. (#66636, Sergey Vlasov)
* gtk/gtkselection.c (gtk_selection_request): Fix
reentrancy problem with multiple conversions.
* gtk/gtkselection.c (gtk_selection_remove_all):
Don't remove incrs, we don't need the widget for
maintain the incr.
* gtk/gtkselection.c (struct _GtkIncrInfo): Remove
the widget field from here, we don't need it.
Diffstat (limited to 'gtk/gtkselection.c')
-rw-r--r-- | gtk/gtkselection.c | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/gtk/gtkselection.c b/gtk/gtkselection.c index d7638787ec..d973e73741 100644 --- a/gtk/gtkselection.c +++ b/gtk/gtkselection.c @@ -102,7 +102,6 @@ struct _GtkIncrConversion struct _GtkIncrInfo { - GtkWidget *widget; /* Selection owner */ GdkWindow *requestor; /* Requestor window - we create a GdkWindow so we can receive events */ GdkAtom selection; /* Selection we're sending */ @@ -547,19 +546,6 @@ gtk_selection_remove_all (GtkWidget *widget) /* Remove pending requests/incrs for this widget */ - tmp_list = current_incrs; - while (tmp_list) - { - next = tmp_list->next; - if (((GtkIncrInfo *)tmp_list->data)->widget == widget) - { - current_incrs = g_list_remove_link (current_incrs, tmp_list); - /* structure will be freed in timeout */ - g_list_free (tmp_list); - } - tmp_list = next; - } - tmp_list = current_retrievals; while (tmp_list) { @@ -1056,8 +1042,9 @@ gtk_selection_request (GtkWidget *widget, return FALSE; info = g_new (GtkIncrInfo, 1); + + g_object_ref (widget); - info->widget = widget; info->selection = event->selection; info->num_incrs = 0; @@ -1211,12 +1198,14 @@ gtk_selection_request (GtkWidget *widget, gdk_selection_send_notify (event->requestor, event->selection, event->target, event->property, event->time); } - + if (info->num_incrs == 0) { g_free (info->conversions); g_free (info); } + + g_object_unref (widget); return TRUE; } |