[gtk+/wip/actor: 25/42] xxx: actor
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/actor: 25/42] xxx: actor
- Date: Tue, 18 Dec 2012 13:28:08 +0000 (UTC)
commit 012046963a2449530306f0e34a506ce36ebff784
Author: Benjamin Otte <otte redhat com>
Date: Sun Dec 16 16:44:51 2012 +0100
xxx: actor
gtk/actors/gtkactor.c | 123 +++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 119 insertions(+), 4 deletions(-)
---
diff --git a/gtk/actors/gtkactor.c b/gtk/actors/gtkactor.c
index 33de228..59dad98 100644
--- a/gtk/actors/gtkactor.c
+++ b/gtk/actors/gtkactor.c
@@ -35,6 +35,8 @@ struct _GtkActorPrivate {
GtkLayoutManager *layout_manager;
+ GtkWidget *widget;
+
cairo_matrix_t transform;
gfloat width;
gfloat height;
@@ -88,6 +90,7 @@ enum
PROP_TEXT_DIRECTION,
PROP_LAYOUT_MANAGER,
+ PROP_WIDGET,
PROP_FIRST_CHILD,
PROP_LAST_CHILD,
@@ -103,9 +106,16 @@ static void
gtk_actor_dispose (GObject *object)
{
GtkActor *self = GTK_ACTOR (object);
+ GtkActorPrivate *priv = self->priv;
_gtk_actor_set_layout_manager (self, NULL);
+ if (priv->widget)
+ {
+ g_object_remove_weak_pointer (G_OBJECT (priv->widget), (gpointer *) &priv->widget);
+ priv->widget = NULL;
+ }
+
G_OBJECT_CLASS (_gtk_actor_parent_class)->dispose (object);
}
@@ -127,7 +137,7 @@ gtk_actor_set_property (GObject *object,
GParamSpec *pspec)
{
GtkActor *actor = GTK_ACTOR (object);
- //GtkActorPrivate *priv = actor->priv;
+ GtkActorPrivate *priv = actor->priv;
switch (prop_id)
{
@@ -143,6 +153,12 @@ gtk_actor_set_property (GObject *object,
_gtk_actor_set_layout_manager (actor, g_value_get_object (value));
break;
+ case PROP_WIDGET:
+ priv->widget = g_value_get_object (value);
+ if (priv->widget)
+ g_object_add_weak_pointer (G_OBJECT (priv->widget), (gpointer *) &priv->widget);
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -188,6 +204,10 @@ gtk_actor_get_property (GObject *object,
g_value_set_object (value, _gtk_actor_get_layout_manager (actor));
break;
+ case PROP_WIDGET:
+ g_value_set_object (value, _gtk_actor_get_widget (actor));
+ break;
+
case PROP_FIRST_CHILD:
g_value_set_object (value, priv->first_child);
break;
@@ -224,7 +244,16 @@ gtk_actor_real_queue_relayout (GtkActor *self)
/* We need to go all the way up the hierarchy */
if (priv->parent != NULL)
- gtk_actor_queue_only_relayout (priv->parent);
+ {
+ gtk_actor_queue_only_relayout (priv->parent);
+ }
+ else
+ {
+ GtkWidget *widget = _gtk_actor_get_widget (self);
+
+ if (widget)
+ gtk_widget_queue_resize (widget);
+ }
}
static gboolean
@@ -501,6 +530,40 @@ _gtk_actor_class_init (GtkActorClass *klass)
GTK_PARAM_READABLE);
/**
+ * GtkActor:width:
+ *
+ * The width allocated to the #GtkActor. See _gtk_actor_allocate() for
+ * details.
+ *
+ * Since: 1.0
+ */
+ obj_props[PROP_WIDTH] =
+ g_param_spec_float ("width",
+ P_("Width"),
+ P_("Width of the actor"),
+ 0.0f,
+ G_MAXFLOAT,
+ 0.0f,
+ GTK_PARAM_READABLE);
+
+ /**
+ * GtkActor:height:
+ *
+ * The height allocated to the #GtkActor. See _gtk_actor_allocate() for
+ * details.
+ *
+ * Since: 1.0
+ */
+ obj_props[PROP_HEIGHT] =
+ g_param_spec_float ("height",
+ P_("Height"),
+ P_("Height of the actor"),
+ 0.0f,
+ G_MAXFLOAT,
+ 0.0f,
+ GTK_PARAM_READABLE);
+
+ /**
* GtkActor:text-direction:
*
* The direction of the text inside a #GtkActor.
@@ -531,6 +594,20 @@ _gtk_actor_class_init (GtkActorClass *klass)
GTK_PARAM_READWRITE);
/**
+ * GtkActor:widget:
+ *
+ * The widget this actor belongs to or %NULL if none.
+ *
+ * Since: 1.10
+ */
+ obj_props[PROP_WIDGET] =
+ g_param_spec_object ("widget",
+ P_("Widget"),
+ P_("The widget this actor belongs to"),
+ GTK_TYPE_WIDGET,
+ GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY);
+
+ /**
* GtkActor:first-child:
*
* The actor's first child.
@@ -558,6 +635,8 @@ _gtk_actor_class_init (GtkActorClass *klass)
GTK_TYPE_ACTOR,
GTK_PARAM_READABLE);
+ g_object_class_install_properties (object_class, PROP_LAST, obj_props);
+
g_type_class_add_private (klass, sizeof (GtkActorPrivate));
}
@@ -2439,8 +2518,44 @@ _gtk_actor_position (GtkActor *actor,
GdkScreen *
_gtk_actor_get_screen (GtkActor *self)
{
- g_warning ("FIXME: return a proper screen");
- return gdk_screen_get_default ();
+ GtkWidget *widget;
+
+ g_return_val_if_fail (GTK_IS_ACTOR (self), gdk_screen_get_default ());
+
+ widget = _gtk_actor_get_widget (self);
+ if (widget == NULL)
+ return gdk_screen_get_default ();
+
+ return gtk_widget_get_screen (widget);
+}
+
+/**
+ * _gtk_actor_get_widget:
+ * @self: a #GtkActor
+ *
+ * Get the widget that owns the actor. If the actor isn't owned by a widget,
+ * %NULL is returned.
+ *
+ * Returns: the widget owning the actor or %NULL
+ *
+ * Since: 1.2
+ **/
+GtkWidget *
+_gtk_actor_get_widget (GtkActor *self)
+{
+ GtkActor *iter;
+
+ g_return_val_if_fail (GTK_IS_ACTOR (self), NULL);
+
+ for (iter = self;
+ iter != NULL;
+ iter = _gtk_actor_get_parent (iter))
+ {
+ if (iter->priv->widget)
+ return iter->priv->widget;
+ }
+
+ return NULL;
}
/**
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]