From c39a5a1c6f599f177dc366f454d05a410591b378 Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Tue, 8 Feb 2000 09:03:51 +0000 Subject: [PATCH] guard widget access with ref/unref around signal emission. Tue Feb 8 09:38:29 2000 Tim Janik * gtk/gtkwidget.c: (gtk_widget_unrealize): guard widget access with ref/unref around signal emission. (gtk_widget_hide): same here, but also check its destroyed state before queueing a resize. --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-0 | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ ChangeLog.pre-2-2 | 8 ++++++++ ChangeLog.pre-2-4 | 8 ++++++++ ChangeLog.pre-2-6 | 8 ++++++++ ChangeLog.pre-2-8 | 8 ++++++++ gtk/gtkwidget.c | 6 +++++- 8 files changed, 61 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index 6f4a6df93e..f1dd2b2829 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Tue Feb 8 09:38:29 2000 Tim Janik + + * gtk/gtkwidget.c: + (gtk_widget_unrealize): guard widget access with ref/unref + around signal emission. + (gtk_widget_hide): same here, but also check its destroyed + state before queueing a resize. + Tue Feb 8 03:05:55 2000 Tim Janik * gtk/gtkstyle.c (gtk_style_new): use gtk_default_prelight_bg instead diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 6f4a6df93e..f1dd2b2829 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,11 @@ +Tue Feb 8 09:38:29 2000 Tim Janik + + * gtk/gtkwidget.c: + (gtk_widget_unrealize): guard widget access with ref/unref + around signal emission. + (gtk_widget_hide): same here, but also check its destroyed + state before queueing a resize. + Tue Feb 8 03:05:55 2000 Tim Janik * gtk/gtkstyle.c (gtk_style_new): use gtk_default_prelight_bg instead diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 6f4a6df93e..f1dd2b2829 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +Tue Feb 8 09:38:29 2000 Tim Janik + + * gtk/gtkwidget.c: + (gtk_widget_unrealize): guard widget access with ref/unref + around signal emission. + (gtk_widget_hide): same here, but also check its destroyed + state before queueing a resize. + Tue Feb 8 03:05:55 2000 Tim Janik * gtk/gtkstyle.c (gtk_style_new): use gtk_default_prelight_bg instead diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 6f4a6df93e..f1dd2b2829 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,11 @@ +Tue Feb 8 09:38:29 2000 Tim Janik + + * gtk/gtkwidget.c: + (gtk_widget_unrealize): guard widget access with ref/unref + around signal emission. + (gtk_widget_hide): same here, but also check its destroyed + state before queueing a resize. + Tue Feb 8 03:05:55 2000 Tim Janik * gtk/gtkstyle.c (gtk_style_new): use gtk_default_prelight_bg instead diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 6f4a6df93e..f1dd2b2829 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,11 @@ +Tue Feb 8 09:38:29 2000 Tim Janik + + * gtk/gtkwidget.c: + (gtk_widget_unrealize): guard widget access with ref/unref + around signal emission. + (gtk_widget_hide): same here, but also check its destroyed + state before queueing a resize. + Tue Feb 8 03:05:55 2000 Tim Janik * gtk/gtkstyle.c (gtk_style_new): use gtk_default_prelight_bg instead diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 6f4a6df93e..f1dd2b2829 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +Tue Feb 8 09:38:29 2000 Tim Janik + + * gtk/gtkwidget.c: + (gtk_widget_unrealize): guard widget access with ref/unref + around signal emission. + (gtk_widget_hide): same here, but also check its destroyed + state before queueing a resize. + Tue Feb 8 03:05:55 2000 Tim Janik * gtk/gtkstyle.c (gtk_style_new): use gtk_default_prelight_bg instead diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 6f4a6df93e..f1dd2b2829 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +Tue Feb 8 09:38:29 2000 Tim Janik + + * gtk/gtkwidget.c: + (gtk_widget_unrealize): guard widget access with ref/unref + around signal emission. + (gtk_widget_hide): same here, but also check its destroyed + state before queueing a resize. + Tue Feb 8 03:05:55 2000 Tim Janik * gtk/gtkstyle.c (gtk_style_new): use gtk_default_prelight_bg instead diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 4049826f5d..6407ab5045 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -1509,9 +1509,11 @@ gtk_widget_hide (GtkWidget *widget) if (GTK_WIDGET_VISIBLE (widget)) { + gtk_widget_ref (widget); gtk_signal_emit (GTK_OBJECT (widget), widget_signals[HIDE]); - if (!GTK_WIDGET_TOPLEVEL (widget)) + if (!GTK_WIDGET_TOPLEVEL (widget) && !GTK_OBJECT_DESTROYED (widget)) gtk_widget_queue_resize (widget); + gtk_widget_unref (widget); } } @@ -1694,8 +1696,10 @@ gtk_widget_unrealize (GtkWidget *widget) if (GTK_WIDGET_REALIZED (widget)) { + gtk_widget_ref (widget); gtk_signal_emit (GTK_OBJECT (widget), widget_signals[UNREALIZE]); GTK_WIDGET_UNSET_FLAGS (widget, GTK_REALIZED | GTK_MAPPED); + gtk_widget_unref (widget); } }