diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c index baad6ebf29..d038b311ec 100644 --- a/gtk/gtkbutton.c +++ b/gtk/gtkbutton.c @@ -2298,7 +2298,7 @@ static void gtk_button_update_state (GtkButton *button) { GtkButtonPrivate *priv = button->priv; - GtkStateFlags new_state = 0; + GtkStateFlags new_state; gboolean depressed; if (priv->activate_timeout) @@ -2306,6 +2306,9 @@ gtk_button_update_state (GtkButton *button) else depressed = priv->in_button && priv->button_down; + new_state = gtk_widget_get_state_flags (GTK_WIDGET (button)) & + ~(GTK_STATE_FLAG_PRELIGHT | GTK_STATE_FLAG_ACTIVE); + if (priv->in_button) new_state |= GTK_STATE_FLAG_PRELIGHT; diff --git a/gtk/gtktogglebutton.c b/gtk/gtktogglebutton.c index 43dbd49a9e..a05d98a9a8 100644 --- a/gtk/gtktogglebutton.c +++ b/gtk/gtktogglebutton.c @@ -563,6 +563,11 @@ gtk_toggle_button_update_state (GtkButton *button) "gtk-touchscreen-mode", &touchscreen, NULL); + new_state = gtk_widget_get_state_flags (GTK_WIDGET (button)) & + ~(GTK_STATE_FLAG_INCONSISTENT | + GTK_STATE_FLAG_PRELIGHT | + GTK_STATE_FLAG_ACTIVE); + if (priv->inconsistent) new_state |= GTK_STATE_FLAG_INCONSISTENT;