summaryrefslogtreecommitdiff
path: root/gtk/gtkselection.c
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-01-17 22:28:02 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-01-17 22:28:02 +0000
commitcf25093441d43b9225ae0a1a7eceaa31ef3a3d49 (patch)
tree9107311649f9b0b8a77c5a61e3a6e2effa907649 /gtk/gtkselection.c
parentc8698f924d4b0252082eb3eea05bdc2d83480c89 (diff)
downloadgtk+-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.c21
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;
}