guint mapped : 1;
guint visible : 1;
guint sensitive : 1;
- guint parent_sensitive : 1;
guint can_focus : 1;
guint has_focus : 1;
guint can_default : 1;
{
guint flags : 6;
guint operation : 2;
- guint parent_sensitive : 1;
guint use_forall : 1;
};
priv->parent = NULL;
priv->sensitive = TRUE;
- priv->parent_sensitive = TRUE;
priv->composite_child = composite_child_stack != 0;
priv->double_buffered = TRUE;
priv->redraw_on_alloc = TRUE;
data.operation = operation;
data.use_forall = FALSE;
- if (priv->parent)
- data.parent_sensitive = (gtk_widget_is_sensitive (priv->parent) != FALSE);
- else
- data.parent_sensitive = TRUE;
-
gtk_widget_propagate_state (widget, &data);
gtk_widget_queue_resize (widget);
flags = widget->priv->state_flags;
- if (!gtk_widget_is_sensitive (widget))
- flags |= GTK_STATE_FLAG_INSENSITIVE;
-
if (gtk_widget_has_focus (widget))
flags |= GTK_STATE_FLAG_FOCUSED;
data.use_forall = TRUE;
- if (priv->parent)
- data.parent_sensitive = gtk_widget_is_sensitive (priv->parent);
- else
- data.parent_sensitive = TRUE;
-
gtk_widget_propagate_state (widget, &data);
gtk_widget_queue_resize (widget);
{
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
- return widget->priv->sensitive && widget->priv->parent_sensitive;
+ return !(widget->priv->state_flags & GTK_STATE_FLAG_INSENSITIVE);
}
static void
data.flags |= priv->state_flags;
data.operation = STATE_CHANGE_REPLACE;
- data.parent_sensitive = (gtk_widget_is_sensitive (parent) != FALSE);
data.use_forall = gtk_widget_is_sensitive (parent) != gtk_widget_is_sensitive (widget);
gtk_widget_propagate_state (widget, &data);
old_state = gtk_widget_get_state (widget);
- if (!priv->parent_sensitive)
- old_flags |= GTK_STATE_FLAG_INSENSITIVE;
-
- priv->parent_sensitive = data->parent_sensitive;
-
switch (data->operation)
{
case STATE_CHANGE_REPLACE:
break;
}
+ /* make insensitivity unoverridable */
+ if (!priv->sensitive)
+ priv->state_flags |= GTK_STATE_FLAG_INSENSITIVE;
+
if (gtk_widget_is_focus (widget) && !gtk_widget_is_sensitive (widget))
{
GtkWidget *window;
gtk_window_set_focus (GTK_WINDOW (window), NULL);
}
- new_flags = gtk_widget_get_state_flags (widget);
+ new_flags = priv->state_flags;
if (old_flags != new_flags)
{
{
GtkStateData child_data = *data;
- child_data.parent_sensitive = gtk_widget_is_sensitive (widget);
-
/* Do not propagate focused state further */
child_data.flags &= ~GTK_STATE_FLAG_FOCUSED;