diff --git a/ChangeLog b/ChangeLog index 38697283d2..96db67abd9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Feb 2 13:38:21 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): Fix some reference + counting problems problems in last patch. + Fri Feb 2 13:20:12 2001 Owen Taylor * gtk/gtkmain.c (gtk_propagate_event): When a grab diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 38697283d2..96db67abd9 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,8 @@ +Fri Feb 2 13:38:21 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): Fix some reference + counting problems problems in last patch. + Fri Feb 2 13:20:12 2001 Owen Taylor * gtk/gtkmain.c (gtk_propagate_event): When a grab diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 38697283d2..96db67abd9 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,8 @@ +Fri Feb 2 13:38:21 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): Fix some reference + counting problems problems in last patch. + Fri Feb 2 13:20:12 2001 Owen Taylor * gtk/gtkmain.c (gtk_propagate_event): When a grab diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 38697283d2..96db67abd9 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,8 @@ +Fri Feb 2 13:38:21 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): Fix some reference + counting problems problems in last patch. + Fri Feb 2 13:20:12 2001 Owen Taylor * gtk/gtkmain.c (gtk_propagate_event): When a grab diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 38697283d2..96db67abd9 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,8 @@ +Fri Feb 2 13:38:21 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): Fix some reference + counting problems problems in last patch. + Fri Feb 2 13:20:12 2001 Owen Taylor * gtk/gtkmain.c (gtk_propagate_event): When a grab diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 38697283d2..96db67abd9 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,8 @@ +Fri Feb 2 13:38:21 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): Fix some reference + counting problems problems in last patch. + Fri Feb 2 13:20:12 2001 Owen Taylor * gtk/gtkmain.c (gtk_propagate_event): When a grab diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 38697283d2..96db67abd9 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,8 @@ +Fri Feb 2 13:38:21 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): Fix some reference + counting problems problems in last patch. + Fri Feb 2 13:20:12 2001 Owen Taylor * gtk/gtkmain.c (gtk_propagate_event): When a grab diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index d4efdd43d3..c31f5e3102 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1281,6 +1281,8 @@ gtk_propagate_event (GtkWidget *widget, handled_event = FALSE; + gtk_widget_ref (widget); + if ((event->type == GDK_KEY_PRESS) || (event->type == GDK_KEY_RELEASE)) { @@ -1297,14 +1299,11 @@ gtk_propagate_event (GtkWidget *widget, * a first crack at the key event */ if (widget != window && GTK_WIDGET_HAS_GRAB (widget)) - { - gtk_widget_ref (widget); - handled_event = gtk_widget_event (widget, event); - gtk_widget_unref (widget); - } + handled_event = gtk_widget_event (widget, event); if (!handled_event) { + window = gtk_widget_get_ancestor (widget, GTK_TYPE_WINDOW); if (window) { if (GTK_WIDGET_IS_SENSITIVE (window)) @@ -1319,16 +1318,26 @@ gtk_propagate_event (GtkWidget *widget, * so that parents can see the button and motion * events of the children. */ - while (!handled_event && widget) + if (!handled_event) { - GtkWidget *tmp; + while (TRUE) + { + GtkWidget *tmp; + + handled_event = !GTK_WIDGET_IS_SENSITIVE (widget) || gtk_widget_event (widget, event); + tmp = widget->parent; + gtk_widget_unref (widget); - gtk_widget_ref (widget); - handled_event = !GTK_WIDGET_IS_SENSITIVE (widget) || gtk_widget_event (widget, event); - tmp = widget->parent; - gtk_widget_unref (widget); - widget = tmp; + widget = tmp; + + if (!handled_event && widget) + gtk_widget_ref (widget); + else + break; + } } + else + gtk_widget_unref (widget); } #if 0