diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 8f50575983..25c2e8c55c 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -11254,19 +11254,21 @@ gtk_widget_propagate_state (GtkWidget *widget, if (GTK_IS_CONTAINER (widget)) { - data->parent_sensitive = gtk_widget_is_sensitive (widget); + GtkStateData child_data = *data; + + child_data.parent_sensitive = gtk_widget_is_sensitive (widget); /* Do not propagate focused state further */ - data->flags &= ~GTK_STATE_FLAG_FOCUSED; + child_data.flags &= ~GTK_STATE_FLAG_FOCUSED; - if (data->use_forall) + if (child_data.use_forall) gtk_container_forall (GTK_CONTAINER (widget), (GtkCallback) gtk_widget_propagate_state, - data); + &child_data); else gtk_container_foreach (GTK_CONTAINER (widget), (GtkCallback) gtk_widget_propagate_state, - data); + &child_data); } /* Trigger state change transitions for the widget */