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
This commit is contained in:
Cody Russell
2007-06-13 14:17:53 +00:00
committed by Cody Russell
parent 87ae968f9e
commit 5c48e783d4
2 changed files with 20 additions and 23 deletions

View File

@ -1,3 +1,8 @@
2007-06-13 Cody Russell <bratsche@gnome.org>
* gtk/gtkwidget.c: Fix inconsistency in GTK_WIDGET_SAVED_STATE
(#435840, Xan Lopez)
2007-06-13 Kristian Rietveld <kris@imendio.com>
* gtk/gtk.symbols

View File

@ -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,