widget: Add a base actor

Use that actor for tracking the realized, visible and mapped states.
This commit is contained in:
Benjamin Otte
2012-12-16 18:38:45 +01:00
parent 17cb423a71
commit fe956e983c

View File

@@ -63,6 +63,7 @@
#include "gtkplug.h"
#include "gtktypebuiltins.h"
#include "a11y/gtkwidgetaccessible.h"
#include "actors/gtkwidgetactorprivate.h"
/**
* SECTION:gtkwidget
@@ -321,9 +322,6 @@ struct _GtkWidgetPrivate
guint anchored : 1;
guint composite_child : 1;
guint no_window : 1;
guint realized : 1;
guint mapped : 1;
guint visible : 1;
guint sensitive : 1;
guint can_focus : 1;
guint has_focus : 1;
@@ -357,6 +355,9 @@ struct _GtkWidgetPrivate
/* SizeGroup related flags */
guint have_size_groups : 1;
/* The base actor for the widget. */
GtkActor *actor;
/* The widget's name. If the widget does not have a name
* (the name is NULL), then its name (as returned by
* "gtk_widget_get_name") is its class's name.
@@ -3655,6 +3656,10 @@ gtk_widget_init (GtkWidget *widget)
GtkWidgetPrivate);
priv = widget->priv;
priv->actor = g_object_new (GTK_TYPE_WIDGET_ACTOR,
"widget", widget,
"visible", FALSE, NULL);
priv->child_visible = TRUE;
priv->name = NULL;
priv->allocation.x = -1;
@@ -7494,7 +7499,17 @@ void
_gtk_widget_set_visible_flag (GtkWidget *widget,
gboolean visible)
{
widget->priv->visible = visible;
gboolean was_mapped = gtk_widget_get_mapped (widget);
gboolean was_realized = gtk_widget_get_realized (widget);
if (visible)
_gtk_widget_actor_show (widget->priv->actor);
else
_gtk_widget_actor_hide (widget->priv->actor);
g_assert (_gtk_actor_get_visible (widget->priv->actor) == visible);
g_assert (was_mapped == gtk_widget_get_mapped (widget));
g_assert (was_realized == gtk_widget_get_realized (widget));
}
/**
@@ -7518,7 +7533,7 @@ gtk_widget_get_visible (GtkWidget *widget)
{
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
return widget->priv->visible;
return _gtk_actor_get_visible (widget->priv->actor);
}
/**
@@ -7662,7 +7677,7 @@ gtk_widget_get_realized (GtkWidget *widget)
{
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
return widget->priv->realized;
return _gtk_actor_get_realized (widget->priv->actor);
}
/**
@@ -7681,9 +7696,21 @@ void
gtk_widget_set_realized (GtkWidget *widget,
gboolean realized)
{
gboolean was_visible, was_mapped;
g_return_if_fail (GTK_IS_WIDGET (widget));
widget->priv->realized = realized;
was_visible = gtk_widget_get_visible (widget);
was_mapped = gtk_widget_get_mapped (widget);
if (realized)
_gtk_widget_actor_realize (widget->priv->actor);
else
_gtk_widget_actor_unrealize (widget->priv->actor);
g_assert (_gtk_actor_get_realized (widget->priv->actor) == realized);
g_assert (was_visible == gtk_widget_get_visible (widget));
g_assert (was_mapped == gtk_widget_get_mapped (widget));
}
/**
@@ -7701,7 +7728,7 @@ gtk_widget_get_mapped (GtkWidget *widget)
{
g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE);
return widget->priv->mapped;
return _gtk_actor_get_mapped (widget->priv->actor);
}
/**
@@ -7720,9 +7747,21 @@ void
gtk_widget_set_mapped (GtkWidget *widget,
gboolean mapped)
{
gboolean was_visible, was_realized;
g_return_if_fail (GTK_IS_WIDGET (widget));
widget->priv->mapped = mapped;
was_visible = gtk_widget_get_visible (widget);
was_realized = gtk_widget_get_realized (widget);
if (mapped)
_gtk_widget_actor_map (widget->priv->actor);
else
_gtk_widget_actor_unmap (widget->priv->actor);
g_assert (_gtk_actor_get_mapped (widget->priv->actor) == mapped);
g_assert (was_visible == gtk_widget_get_visible (widget));
g_assert (was_realized == gtk_widget_get_realized (widget));
}
/**
@@ -10329,7 +10368,7 @@ gtk_widget_dispose (GObject *object)
else if (gtk_widget_get_visible (widget))
gtk_widget_hide (widget);
priv->visible = FALSE;
_gtk_widget_actor_hide (priv->actor);
if (gtk_widget_get_realized (widget))
gtk_widget_unrealize (widget);
@@ -10388,6 +10427,9 @@ gtk_widget_finalize (GObject *object)
gtk_grab_remove (widget);
g_object_unref (priv->actor);
priv->actor = NULL;
g_object_unref (priv->style);
priv->style = NULL;