mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-12-27 22:20:24 +00:00
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.
This commit is contained in:
parent
9be7e3e2d8
commit
b495ce5446
@ -4817,6 +4817,12 @@ gtk_widget_size_allocate (GtkWidget *widget,
|
|||||||
|
|
||||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||||
|
|
||||||
|
if (!priv->visible)
|
||||||
|
{
|
||||||
|
g_print ("woot, invisible widget allocated!\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
gtk_widget_push_verify_invariants (widget);
|
gtk_widget_push_verify_invariants (widget);
|
||||||
|
|
||||||
#ifdef G_ENABLE_DEBUG
|
#ifdef G_ENABLE_DEBUG
|
||||||
@ -7494,7 +7500,17 @@ void
|
|||||||
_gtk_widget_set_visible_flag (GtkWidget *widget,
|
_gtk_widget_set_visible_flag (GtkWidget *widget,
|
||||||
gboolean visible)
|
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;
|
GtkWidgetPrivate *priv;
|
||||||
|
|
||||||
g_return_if_fail (GTK_IS_WIDGET (widget));
|
g_return_if_fail (GTK_IS_WIDGET (widget));
|
||||||
|
g_return_if_fail (gtk_widget_get_visible (widget));
|
||||||
g_return_if_fail (allocation != NULL);
|
g_return_if_fail (allocation != NULL);
|
||||||
|
|
||||||
priv = widget->priv;
|
priv = widget->priv;
|
||||||
|
Loading…
Reference in New Issue
Block a user