diff options
author | Cody Russell <bratsche@gnome.org> | 2007-06-13 14:19:36 +0000 |
---|---|---|
committer | Cody Russell <bratsche@src.gnome.org> | 2007-06-13 14:19:36 +0000 |
commit | 9b4507b03c70f9cd16146e04198a121a87413ce2 (patch) | |
tree | 6a342bfbcb807f143c28e8026dec3e525289569c | |
parent | 72b21754016078fcbe74df0b8229102be93b52c5 (diff) | |
download | gdk-pixbuf-9b4507b03c70f9cd16146e04198a121a87413ce2.tar.gz |
Merge from trunk:
2007-06-13 Cody Russell <bratsche@gnome.org>
Merge from trunk:
* gtk/gtkwidget.c: Fix inconsistency in GTK_WIDGET_SAVED_STATE
(#435840, Xan Lopez)
svn path=/branches/gtk-2-10/; revision=18123
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | gtk/gtkwidget.c | 38 |
2 files changed, 22 insertions, 23 deletions
@@ -1,3 +1,10 @@ +2007-06-13 Cody Russell <bratsche@gnome.org> + + Merge from trunk: + + * gtk/gtkwidget.c: Fix inconsistency in GTK_WIDGET_SAVED_STATE + (#435840, Xan Lopez) + 2007-06-12 Matthias Clasen <mclasen@redhat.com> * configure.in: Bump version diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index ba9dca7ba..dcc1eb236 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -7075,36 +7075,28 @@ static void gtk_widget_propagate_state (GtkWidget *widget, GtkStateData *data) { - guint8 old_state; + guint8 old_state = GTK_WIDGET_STATE (widget); + guint8 old_saved_state = GTK_WIDGET_SAVED_STATE (widget); /* don't call this function with state==GTK_STATE_INSENSITIVE, * parent_sensitive==TRUE on a sensitive widget */ - old_state = GTK_WIDGET_STATE (widget); if (data->parent_sensitive) - { - GTK_WIDGET_SET_FLAGS (widget, GTK_PARENT_SENSITIVE); + GTK_WIDGET_SET_FLAGS (widget, GTK_PARENT_SENSITIVE); + else + GTK_WIDGET_UNSET_FLAGS (widget, GTK_PARENT_SENSITIVE); - if (GTK_WIDGET_IS_SENSITIVE (widget)) - { - if (data->state_restoration) - GTK_WIDGET_STATE (widget) = GTK_WIDGET_SAVED_STATE (widget); - else - GTK_WIDGET_STATE (widget) = data->state; - } + if (GTK_WIDGET_IS_SENSITIVE (widget)) + { + if (data->state_restoration) + GTK_WIDGET_STATE (widget) = GTK_WIDGET_SAVED_STATE (widget); else - { - GTK_WIDGET_STATE (widget) = GTK_STATE_INSENSITIVE; - if (!data->state_restoration && - data->state != GTK_STATE_INSENSITIVE) - GTK_WIDGET_SAVED_STATE (widget) = data->state; - } + GTK_WIDGET_STATE (widget) = data->state; } else { - GTK_WIDGET_UNSET_FLAGS (widget, GTK_PARENT_SENSITIVE); if (!data->state_restoration) { if (data->state != GTK_STATE_INSENSITIVE) @@ -7124,19 +7116,19 @@ gtk_widget_propagate_state (GtkWidget *widget, gtk_window_set_focus (GTK_WINDOW (window), NULL); } - if (old_state != GTK_WIDGET_STATE (widget)) + if (old_state != GTK_WIDGET_STATE (widget) || + old_saved_state != GTK_WIDGET_SAVED_STATE (widget)) { g_object_ref (widget); - + if (!GTK_WIDGET_IS_SENSITIVE (widget) && GTK_WIDGET_HAS_GRAB (widget)) gtk_grab_remove (widget); - + g_signal_emit (widget, widget_signals[STATE_CHANGED], 0, old_state); - + if (GTK_IS_CONTAINER (widget)) { data->parent_sensitive = (GTK_WIDGET_IS_SENSITIVE (widget) != FALSE); - data->state = GTK_WIDGET_STATE (widget); if (data->use_forall) gtk_container_forall (GTK_CONTAINER (widget), (GtkCallback) gtk_widget_propagate_state, |