diff options
author | Cody Russell <bratsche@gnome.org> | 2007-06-13 14:17:53 +0000 |
---|---|---|
committer | Cody Russell <bratsche@src.gnome.org> | 2007-06-13 14:17:53 +0000 |
commit | 5c48e783d463b07fb3dfe2d8a16d3ab3b6180763 (patch) | |
tree | 413814cb42f374d55a0831b7c5763f02059c79fa /gtk | |
parent | 87ae968f9efa882721ebbd0934c592d71dd7e9b6 (diff) | |
download | gtk+-5c48e783d463b07fb3dfe2d8a16d3ab3b6180763.tar.gz |
Fix inconsistency in GTK_WIDGET_SAVED_STATE (#435840, Xan Lopez)
2007-06-13 Cody Russell <bratsche@gnome.org>
* gtk/gtkwidget.c: Fix inconsistency in GTK_WIDGET_SAVED_STATE
(#435840, Xan Lopez)
svn path=/trunk/; revision=18122
Diffstat (limited to 'gtk')
-rw-r--r-- | gtk/gtkwidget.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 480b3ce2e0..e6741e45de 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -7561,36 +7561,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) @@ -7610,19 +7602,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, |