summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorCody Russell <bratsche@gnome.org>2007-06-13 14:17:53 +0000
committerCody Russell <bratsche@src.gnome.org>2007-06-13 14:17:53 +0000
commit5c48e783d463b07fb3dfe2d8a16d3ab3b6180763 (patch)
tree413814cb42f374d55a0831b7c5763f02059c79fa /gtk
parent87ae968f9efa882721ebbd0934c592d71dd7e9b6 (diff)
downloadgtk+-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.c38
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,