Commit b495ce54 authored by Benjamin Otte's avatar Benjamin Otte

widget: Give some meaning to "visible"

GtkWidget::visible is required for the widget to:
- have a preferred size other than 0/0
- have a size allocated
- return other values than { -1, -1, 1, 1 } from get_allocation()

This is an experimental patch aiming to make concepts and behaviors
inside GTK more concreate. GtkWidget::visible is now essentially what
CSS does for "display: none".

Note that if you want the effect of CSS's "visibility: hidden", you'll
have to use a GtkNotebook with an empty page as the concept of reserving
space but not drawing anything isn't supported natively in GTK.
parent 9be7e3e2
......@@ -4817,6 +4817,12 @@ gtk_widget_size_allocate (GtkWidget *widget,
g_return_if_fail (GTK_IS_WIDGET (widget));
if (!priv->visible)
g_print ("woot, invisible widget allocated!\n");
gtk_widget_push_verify_invariants (widget);
......@@ -7494,7 +7500,17 @@ void
_gtk_widget_set_visible_flag (GtkWidget *widget,
gboolean visible)
widget->priv->visible = visible;
GtkWidgetPrivate *priv = widget->priv;
priv->visible = visible;
if (!visible)
priv->allocation.x = -1;
priv->allocation.y = -1;
priv->allocation.width = 1;
priv->allocation.height = 1;
......@@ -13513,6 +13529,7 @@ gtk_widget_set_allocation (GtkWidget *widget,
GtkWidgetPrivate *priv;
g_return_if_fail (GTK_IS_WIDGET (widget));
g_return_if_fail (gtk_widget_get_visible (widget));
g_return_if_fail (allocation != NULL);
priv = widget->priv;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment