widget: Don't change sensitive state with insensitve parent

This way child.set_sensitive(True) with an insensitive parent doesn't
cause child to become sensitive.
This commit is contained in:
Benjamin Otte
2011-12-15 20:32:54 +01:00
parent 1377ff08c0
commit 94f00eb04d

View File

@@ -7663,7 +7663,6 @@ gtk_widget_set_sensitive (GtkWidget *widget,
gboolean sensitive)
{
GtkWidgetPrivate *priv;
GtkStateData data;
g_return_if_fail (GTK_IS_WIDGET (widget));
@@ -7674,24 +7673,30 @@ gtk_widget_set_sensitive (GtkWidget *widget,
if (priv->sensitive == sensitive)
return;
data.flags = GTK_STATE_FLAG_INSENSITIVE;
if (sensitive)
if (priv->parent == NULL
|| gtk_widget_is_sensitive (priv->parent))
{
priv->sensitive = TRUE;
data.operation = STATE_CHANGE_UNSET;
GtkStateData data;
data.flags = GTK_STATE_FLAG_INSENSITIVE;
if (sensitive)
{
priv->sensitive = TRUE;
data.operation = STATE_CHANGE_UNSET;
}
else
{
priv->sensitive = FALSE;
data.operation = STATE_CHANGE_SET;
}
data.use_forall = TRUE;
gtk_widget_propagate_state (widget, &data);
gtk_widget_queue_resize (widget);
}
else
{
priv->sensitive = FALSE;
data.operation = STATE_CHANGE_SET;
}
data.use_forall = TRUE;
gtk_widget_propagate_state (widget, &data);
gtk_widget_queue_resize (widget);
g_object_notify (G_OBJECT (widget), "sensitive");
}