2007-11-15 Emmanuele Bassi <ebassi@openedhand.com>

* clutter/clutter-actor.[ch]: Massive API clean-ups. Initial
	fixes for bugs #614 and #628.

	* clutter/clutter-main.c:
	* clutter/clutter-stage.c: Update internal usage of the actor
	API.

	* tests/test-events.c: Update test suite.
This commit is contained in:
Emmanuele Bassi 2007-11-15 17:35:47 +00:00
parent d060b3bdd7
commit 75d186c3f9
10 changed files with 268 additions and 159 deletions

View File

@ -1,3 +1,14 @@
2007-11-15 Emmanuele Bassi <ebassi@openedhand.com>
* clutter/clutter-actor.[ch]: Massive API clean-ups. Initial
fixes for bugs #614 and #628.
* clutter/clutter-main.c:
* clutter/clutter-stage.c: Update internal usage of the actor
API.
* tests/test-events.c: Update test suite.
2007-11-15 Øyvind Kolås <pippin@o-hand.com>
* clutter/clutter-main.c: (generate_enter_leave_events),

View File

@ -794,6 +794,9 @@ clutter_actor_request_coords (ClutterActor *self,
ClutterActorClass *klass;
gboolean x_change, y_change, width_change, height_change;
g_return_if_fail (CLUTTER_IS_ACTOR (self));
g_return_if_fail (box != NULL);
klass = CLUTTER_ACTOR_GET_CLASS (self);
if (klass->request_coords)
@ -853,6 +856,9 @@ clutter_actor_query_coords (ClutterActor *self,
{
ClutterActorClass *klass;
g_return_if_fail (CLUTTER_IS_ACTOR (self));
g_return_if_fail (box != NULL);
klass = CLUTTER_ACTOR_GET_CLASS (self);
box->x1 = self->priv->coords.x1;
@ -892,24 +898,16 @@ clutter_actor_set_property (GObject *object,
switch (prop_id)
{
case PROP_X:
clutter_actor_set_position (actor,
g_value_get_int (value),
clutter_actor_get_y (actor));
clutter_actor_set_x (actor, g_value_get_int (value));
break;
case PROP_Y:
clutter_actor_set_position (actor,
clutter_actor_get_x (actor),
g_value_get_int (value));
clutter_actor_set_y (actor, g_value_get_int (value));
break;
case PROP_WIDTH:
clutter_actor_set_size (actor,
g_value_get_int (value),
clutter_actor_get_height (actor));
clutter_actor_set_width (actor, g_value_get_int (value));
break;
case PROP_HEIGHT:
clutter_actor_set_size (actor,
clutter_actor_get_width (actor),
g_value_get_int (value));
clutter_actor_set_height (actor, g_value_get_int (value));
break;
case PROP_DEPTH:
clutter_actor_set_depth (actor, g_value_get_int (value));
@ -948,10 +946,7 @@ clutter_actor_set_property (GObject *object,
}
break;
case PROP_REACTIVE:
if (g_value_get_boolean (value) == TRUE)
clutter_actor_set_reactive (actor);
else
clutter_actor_unset_reactive (actor);
clutter_actor_set_reactive (actor, g_value_get_boolean (value));
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
@ -1785,29 +1780,45 @@ clutter_actor_move_by (ClutterActor *self,
clutter_actor_request_coords (self, &box);
}
/* local inline version, without type checking to be used by
* set_width() and set_height(). if one of the dimensions is < 0
* it will not be changed
*/
static inline void
clutter_actor_set_size_internal (ClutterActor *self,
gint width,
gint height)
{
ClutterActorBox box;
clutter_actor_query_coords (self, &box);
if (width > 0)
box.x2 = box.x1 + CLUTTER_UNITS_FROM_INT (width);
if (height > 0)
box.y2 = box.y1 + CLUTTER_UNITS_FROM_INT (height);
clutter_actor_request_coords (self, &box);
}
/**
* clutter_actor_set_size
* @self: A #ClutterActor
* @width: New width of actor in pixels
* @height: New height of actor in pixels
* @width: New width of actor in pixels, or -1
* @height: New height of actor in pixels, or -1
*
* Sets the actors size in pixels.
* Sets the actors size in pixels. If @width and/or @height are -1 the
* actor will assume the same size of its bounding box.
*/
void
clutter_actor_set_size (ClutterActor *self,
gint width,
gint height)
{
ClutterActorBox box;
g_return_if_fail (CLUTTER_IS_ACTOR (self));
clutter_actor_query_coords (self, &box);
box.x2 = box.x1 + CLUTTER_UNITS_FROM_INT (width);
box.y2 = box.y1 + CLUTTER_UNITS_FROM_INT (height);
clutter_actor_request_coords (self, &box);
clutter_actor_set_size_internal (self, width, height);
}
/**
@ -1838,6 +1849,34 @@ clutter_actor_get_size (ClutterActor *self,
*height = CLUTTER_UNITS_TO_INT (box.y2 - box.y1);
}
/**
* clutter_actor_get_position:
* @self: a #ClutterActor
* @x: return location for the X coordinate, or %NULL
* @y: return location for the Y coordinate, or %NULL
*
* Retrieves the position of an actor.
*
* Since: 0.6
*/
void
clutter_actor_get_position (ClutterActor *self,
gint *x,
gint *y)
{
ClutterActorBox box = { 0, };
g_return_if_fail (CLUTTER_IS_ACTOR (self));
clutter_actor_query_coords (self, &box);
if (x)
*x = CLUTTER_UNITS_TO_INT (box.x1);
if (y)
*y = CLUTTER_UNITS_TO_INT (box.y1);
}
/*
* clutter_actor_get_abs_position_units
* @self: A #ClutterActor
@ -2021,11 +2060,12 @@ clutter_actor_get_height (ClutterActor *self)
* since: 2.0
**/
void
clutter_actor_set_width (ClutterActor *self, guint width)
clutter_actor_set_width (ClutterActor *self,
guint width)
{
clutter_actor_set_size (self,
width,
clutter_actor_get_height (self));
g_return_if_fail (CLUTTER_IS_ACTOR (self));
clutter_actor_set_size_internal (self, width, -1);
}
/**
@ -2038,13 +2078,53 @@ clutter_actor_set_width (ClutterActor *self, guint width)
* since: 2.0
**/
void
clutter_actor_set_height (ClutterActor *self, guint height)
clutter_actor_set_height (ClutterActor *self,
guint height)
{
clutter_actor_set_size (self,
clutter_actor_get_width (self),
height);
g_return_if_fail (CLUTTER_IS_ACTOR (self));
clutter_actor_set_size_internal (self, -1, height);
}
/**
* clutter_actor_set_x:
* @self: a #ClutterActor
* @x: the actors position on the X axis
*
* Sets the actor's x position relative to its parent.
*
* Since: 0.6
*/
void
clutter_actor_set_x (ClutterActor *self,
gint x)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
clutter_actor_set_position (self,
x,
clutter_actor_get_y (self));
}
/**
* clutter_actor_set_y:
* @self: a #ClutterActor
* @y: the actors position on the Y axis
*
* Sets the actor's y position relative to its parent.
*
* Since: 0.6
*/
void
clutter_actor_set_y (ClutterActor *self,
gint y)
{
g_return_if_fail (CLUTTER_IS_ACTOR (self));
clutter_actor_set_position (self,
clutter_actor_get_x (self),
y);
}
/**
* clutter_actor_get_x
@ -2779,6 +2859,47 @@ clutter_actor_has_clip (ClutterActor *self)
return self->priv->has_clip;
}
/**
* clutter_actor_get_clip:
* @self: a #ClutterActor
* @xoff: return location for the X offset of the clip rectangle, or %NULL
* @yoff: return location for the Y offset of the clip rectangle, or %NULL
* @width: return location for the width of the clip rectangle, or %NULL
* @height: return location for the height of the clip rectangle, or %NULL
*
* Gets the clip area for @self, in pixels.
*
* Since: 0.6
*/
void
clutter_actor_get_clip (ClutterActor *self,
gint *xoff,
gint *yoff,
gint *width,
gint *height)
{
ClutterActorPrivate *priv;
ClutterGeometry clip = { 0, };
g_return_if_fail (CLUTTER_IS_ACTOR (self));
priv = self->priv;
if (!priv->has_clip)
return;
clip = priv->clip;
if (xoff)
*xoff = clip.x;
if (yoff)
*yoff = clip.y;
if (width)
*width = clip.width;
if (height)
*height = clip.height;
}
/**
* clutter_actor_set_parent:
* @self: A #ClutterActor
@ -3161,37 +3282,29 @@ out:
/**
* clutter_actor_set_reactive:
* @actor: a #ClutterActor
* @reactive: whether the actor should be reactive to events
*
* Sets @actor as reactive. Reactive actors will receive events.
*
* Since: 0.6
*/
void
clutter_actor_set_reactive (ClutterActor *actor)
clutter_actor_set_reactive (ClutterActor *actor,
gboolean reactive)
{
g_return_if_fail (CLUTTER_IS_ACTOR (actor));
CLUTTER_ACTOR_SET_FLAGS (actor, CLUTTER_ACTOR_REACTIVE);
if (reactive == CLUTTER_ACTOR_IS_REACTIVE (actor))
return;
if (reactive)
CLUTTER_ACTOR_SET_FLAGS (actor, CLUTTER_ACTOR_REACTIVE);
else
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REACTIVE);
}
/**
* clutter_actor_unset_reactive:
* @actor: a #ClutterActor
*
* Sets @actor as not reactive.
*
* Since: 0.6
*/
void
clutter_actor_unset_reactive (ClutterActor *actor)
{
g_return_if_fail (CLUTTER_IS_ACTOR (actor));
CLUTTER_ACTOR_UNSET_FLAGS (actor, CLUTTER_ACTOR_REACTIVE);
}
/**
* clutter_actor_is_reactive:
* clutter_actor_get_reactive:
* @actor: a #ClutterActor
*
* Checks whether @actor is marked as reactive.
@ -3201,55 +3314,13 @@ clutter_actor_unset_reactive (ClutterActor *actor)
* Since: 0.6
*/
gboolean
clutter_actor_is_reactive (ClutterActor *actor)
clutter_actor_get_reactive (ClutterActor *actor)
{
g_return_val_if_fail (CLUTTER_IS_ACTOR (actor), FALSE);
return CLUTTER_ACTOR_IS_REACTIVE (actor);
}
/**
* clutter_actor_push_transform_child:
*
* Makes all the children follow the parent's transformation matrix
* until clutter_actor_pop_transform_child().
*
* This function should be used by every actor with children inside
* its paint function, in order to make its children transform (that is:
* rotate, scale, etc.) with its parent, like:
*
* <informalexample><programlisting>
* clutter_actor_push_transform_child (<!-- -->);
* for (l = my_actor-&gt;children; l != NULL; l = l-&gt;next)
* {
* ClutterActor *actor = l-&gt;data;
* clutter_actor_paint (child);
* }
* clutter_actor_pop_transform_child (<!-- -->);
* </programlisting></informalexample>
*
* Since: 0.6
*/
void
clutter_actor_push_transform_child (void)
{
cogl_push_matrix ();
}
/**
* clutter_actor_pop_transform_child:
*
* Cancels the effects of a previous clutter_actor_push_transform_child()
* call.
*
* Since: 0.6
*/
void
clutter_actor_pop_transform_child (void)
{
cogl_pop_matrix ();
}
/*
* ClutterGeometry
*/

View File

@ -222,6 +222,7 @@ struct _ClutterActorClass
};
GType clutter_actor_get_type (void) G_GNUC_CONST;
void clutter_actor_show (ClutterActor *self);
void clutter_actor_show_all (ClutterActor *self);
void clutter_actor_hide (ClutterActor *self);
@ -233,6 +234,7 @@ void clutter_actor_pick (ClutterActor *sel
const ClutterColor *color);
void clutter_actor_queue_redraw (ClutterActor *self);
void clutter_actor_destroy (ClutterActor *self);
void clutter_actor_request_coords (ClutterActor *self,
ClutterActorBox *box);
void clutter_actor_query_coords (ClutterActor *self,
@ -252,21 +254,25 @@ void clutter_actor_set_size (ClutterActor *sel
void clutter_actor_set_position (ClutterActor *self,
gint x,
gint y);
void clutter_actor_get_position (ClutterActor *self,
gint *x,
gint *y);
void clutter_actor_get_abs_position (ClutterActor *self,
gint *x,
gint *y);
guint clutter_actor_get_width (ClutterActor *self);
guint clutter_actor_get_height (ClutterActor *self);
void clutter_actor_set_width (ClutterActor *self,
guint width);
void clutter_actor_set_height (ClutterActor *self,
guint height);
void clutter_actor_set_width (ClutterActor *self,
guint width);
void clutter_actor_set_height (ClutterActor *self,
guint height);
gint clutter_actor_get_x (ClutterActor *self);
gint clutter_actor_get_y (ClutterActor *self);
void clutter_actor_set_x (ClutterActor *self,
gint x);
void clutter_actor_set_y (ClutterActor *self,
gint y);
void clutter_actor_rotate_x (ClutterActor *self,
gfloat angle,
gint y,
@ -297,6 +303,7 @@ gdouble clutter_actor_get_rzang (ClutterActor *sel
ClutterFixed clutter_actor_get_rxangx (ClutterActor *self);
ClutterFixed clutter_actor_get_ryangx (ClutterActor *self);
ClutterFixed clutter_actor_get_rzangx (ClutterActor *self);
void clutter_actor_set_opacity (ClutterActor *self,
guint8 opacity);
guint8 clutter_actor_get_opacity (ClutterActor *self);
@ -311,6 +318,11 @@ void clutter_actor_set_clip (ClutterActor *sel
gint height);
void clutter_actor_remove_clip (ClutterActor *self);
gboolean clutter_actor_has_clip (ClutterActor *self);
void clutter_actor_get_clip (ClutterActor *self,
gint *xoff,
gint *yoff,
gint *width,
gint *height);
void clutter_actor_set_parent (ClutterActor *self,
ClutterActor *parent);
ClutterActor * clutter_actor_get_parent (ClutterActor *self);
@ -326,6 +338,9 @@ void clutter_actor_lower_bottom (ClutterActor *sel
void clutter_actor_set_depth (ClutterActor *self,
gint depth);
gint clutter_actor_get_depth (ClutterActor *self);
void clutter_actor_set_reactive (ClutterActor *actor,
gboolean reactive);
gboolean clutter_actor_get_reactive (ClutterActor *actor);
void clutter_actor_set_scalex (ClutterActor *self,
ClutterFixed scale_x,
ClutterFixed scale_y);
@ -366,25 +381,10 @@ void clutter_actor_apply_transform_to_point (ClutterActor
ClutterVertex *point,
ClutterVertex *vertex);
void clutter_actor_push_transform_child (void);
void clutter_actor_pop_transform_child (void);
/* Per actor event handling - may change */
gboolean
clutter_actor_event (ClutterActor *actor,
ClutterEvent *event,
gboolean capture);
void
clutter_actor_set_reactive (ClutterActor *actor);
void
clutter_actor_unset_reactive (ClutterActor *actor);
gboolean
clutter_actor_is_reactive (ClutterActor *actor);
ClutterActor*
clutter_get_actor_by_id (guint32 id);
gboolean clutter_actor_event (ClutterActor *actor,
ClutterEvent *event,
gboolean capture);
ClutterActor * clutter_get_actor_by_gid (guint32 id);
G_END_DECLS

View File

@ -238,7 +238,7 @@ _clutter_do_pick (ClutterStage *stage,
/* Decode color back into an ID, taking into account fb depth */
id = pixel[2]>>(8-b) | pixel[1]<<b>>(8-g) | pixel[0]<<(g+b)>>(8-r);
return clutter_get_actor_by_id (id);
return clutter_get_actor_by_gid (id);
}
/**
@ -1176,7 +1176,7 @@ deliver_event (ClutterEvent *event)
/* Build 'tree' of events */
while (actor && n_tree_events < MAX_EVENT_DEPTH)
{
if (clutter_actor_is_reactive (actor) ||
if (clutter_actor_get_reactive (actor) ||
clutter_actor_get_parent (actor) == NULL)
event_tree[n_tree_events++] = g_object_ref (actor);
@ -1410,15 +1410,18 @@ clutter_do_event (ClutterEvent *event)
}
/**
* clutter_get_actor_by_id
* clutter_get_actor_by_gid
* @id: a #ClutterActor ID.
*
* FIXME.
* Retrieves the #ClutterActor with @id.
*
* Return value: the actor with the passed id or %NULL. The returned
* actor does not have its reference count increased.
*
* Since: 0.6
*/
ClutterActor*
clutter_get_actor_by_id (guint32 id)
clutter_get_actor_by_gid (guint32 id)
{
ClutterMainContext *context;

View File

@ -398,7 +398,7 @@ clutter_stage_init (ClutterStage *self)
priv->perspective.z_far = CLUTTER_FLOAT_TO_FIXED (100.0);
clutter_actor_set_size (CLUTTER_ACTOR (self), 640, 480);
clutter_actor_set_reactive (CLUTTER_ACTOR (self));
clutter_actor_set_reactive (CLUTTER_ACTOR (self), TRUE);
clutter_stage_set_key_focus (self, NULL);
}

View File

@ -1,3 +1,11 @@
2007-11-15 Emmanuele Bassi <ebassi@openedhand.com>
* Makefile.am: Ignore the OSX backend subdirectory and
scan the clutter-x11.h header
* clutter-docs.sgml:
* clutter-sections.txt: Update.
2007-11-15 Emmanuele Bassi <ebassi@openedhand.com>
* clutter-sections.txt: Add new ClutterTimeline API

View File

@ -42,7 +42,8 @@ FIXXREF_OPTIONS=
# Used for dependencies. The docs will be rebuilt if any of these change.
# e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h
# e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c
HFILE_GLOB=$(top_srcdir)/clutter/*.h $(top_srcdir)/clutter/glx/clutter-glx.h
HFILE_GLOB=$(top_srcdir)/clutter/*.h \
$(top_srcdir)/clutter/x11/clutter-x11.h
CFILE_GLOB=$(top_srcdir)/clutter/*.c
# Header files to ignore when scanning.
@ -62,6 +63,8 @@ IGNORE_HFILES=\
eglnative \
eglx \
glx \
osx \
x11 \
json \
pango \
sdl

View File

@ -169,7 +169,7 @@
</partintro>
<xi:include href="xml/clutter-backend.xml"/>
<xi:include href="xml/clutter-glx.xml"/>
<xi:include href="xml/clutter-x11.xml"/>
</part>

View File

@ -44,6 +44,8 @@ CLUTTER_UNITS_TO_INT
<SECTION>
<FILE>clutter-label</FILE>
<TITLE>ClutterLabel</TITLE>
ClutterLabel
ClutterLabelClass
clutter_label_new
clutter_label_new_with_text
clutter_label_new_full
@ -67,8 +69,6 @@ clutter_label_get_use_markup
clutter_label_set_alignment
clutter_label_get_alignment
<SUBSECTION Standard>
ClutterLabel
ClutterLabelClass
CLUTTER_LABEL
CLUTTER_IS_LABEL
CLUTTER_TYPE_LABEL
@ -307,9 +307,6 @@ clutter_actor_queue_redraw
clutter_actor_destroy
clutter_actor_request_coords
clutter_actor_query_coords
clutter_actor_set_reactive
clutter_actor_unset_reactive
clutter_actor_is_reactive
clutter_actor_event
<SUBSECTION>
@ -319,12 +316,15 @@ clutter_actor_get_coords
clutter_actor_set_size
clutter_actor_get_size
clutter_actor_set_position
clutter_actor_get_position
clutter_actor_get_abs_position
clutter_actor_set_width
clutter_actor_get_width
clutter_actor_set_height
clutter_actor_get_height
clutter_actor_set_x
clutter_actor_get_x
clutter_actor_set_y
clutter_actor_get_y
clutter_actor_move_by
clutter_actor_rotate_x
@ -334,10 +334,13 @@ clutter_actor_set_opacity
clutter_actor_get_opacity
clutter_actor_set_name
clutter_actor_get_name
clutter_actor_get_id
clutter_actor_get_gid
<SUBSECTION>
clutter_actor_set_clip
clutter_actor_remove_clip
clutter_actor_has_clip
clutter_actor_get_clip
<SUBSECTION>
clutter_actor_set_parent
@ -375,6 +378,10 @@ clutter_actor_rotate_zx
clutter_actor_set_scale_with_gravity
clutter_actor_set_scale_with_gravityx
<SUBSECTION>
clutter_actor_set_reactive
clutter_actor_get_reactive
<SUBSECTION Standard>
CLUTTER_TYPE_GEOMETRY
CLUTTER_TYPE_ACTOR_BOX
@ -396,6 +403,8 @@ clutter_vertex_get_type
<SECTION>
<FILE>clutter-texture</FILE>
<TITLE>ClutterTexture</TITLE>
ClutterTexture
ClutterTextureClass
ClutterTextureFlags
clutter_texture_new
clutter_texture_new_from_pixbuf
@ -414,15 +423,15 @@ clutter_texture_get_x_tile_detail
clutter_texture_get_y_tile_detail
clutter_texture_has_generated_tiles
clutter_texture_is_tiled
<SUBSECTION Standard>
ClutterTexture
ClutterTextureClass
CLUTTER_TEXTURE
CLUTTER_IS_TEXTURE
CLUTTER_TYPE_TEXTURE
CLUTTER_TEXTURE_CLASS
CLUTTER_IS_TEXTURE_CLASS
CLUTTER_TEXTURE_GET_CLASS
<SUBSECTION Private>
ClutterTexturePrivate
clutter_texture_error_quark
@ -502,7 +511,7 @@ ClutterTimelineDirection
clutter_timeline_set_direction
clutter_timeline_get_direction
<SUBSECTION
<SUBSECTION>
clutter_timeline_start
clutter_timeline_pause
clutter_timeline_stop
@ -883,7 +892,9 @@ clutter_main_level
clutter_get_debug_enabled
clutter_get_show_fps
clutter_get_timestamp
clutter_get_actor_by_id
clutter_get_actor_by_gid
clutter_get_default_frame_rate
clutter_set_default_frame_rate
clutter_get_motion_events_enabled
clutter_enable_motion_events
<SUBSECTION>
@ -904,22 +915,22 @@ clutter_redraw
</SECTION>
<SECTION>
<FILE>clutter-glx</FILE>
<TITLE>GLX Specific Support</TITLE>
clutter_glx_get_default_display
clutter_glx_get_default_screen
clutter_glx_get_root_window
clutter_glx_get_stage_visual
clutter_glx_get_stage_window
clutter_glx_set_stage_foreign
clutter_glx_trap_x_errors
clutter_glx_untrap_x_errors
<FILE>clutter-x11</FILE>
<TITLE>X11 Specific Support</TITLE>
clutter_x11_get_default_display
clutter_x11_get_default_screen
clutter_x11_get_root_window
clutter_x11_get_stage_visual
clutter_x11_get_stage_window
clutter_x11_set_stage_foreign
clutter_x11_trap_x_errors
clutter_x11_untrap_x_errors
<SUBSECTION>
ClutterGLXFilterFunc
ClutterGLXFilterReturn
clutter_glx_add_filter
clutter_glx_remove_filter
ClutterX11FilterFunc
ClutterX11FilterReturn
clutter_x11_add_filter
clutter_x11_remove_filter
</SECTION>
<SECTION>
@ -1192,6 +1203,7 @@ CLUTTER_IS_MODEL_CLASS
CLUTTER_MODEL_GET_CLASS
<SUBSECTION Private>
ClutterModelPrivate
clutter_model_get_type
</SECTION>
<SECTION>
@ -1220,6 +1232,7 @@ CLUTTER_IS_MODEL_ITER_CLASS
CLUTTER_MODEL_GET_CLASS
<SUBSECTION Private>
ClutterModelIterPrivate
clutter_model_iter_get_type
</SECTION>

View File

@ -183,7 +183,7 @@ main (int argc, char *argv[])
clutter_actor_set_size (actor, 100, 100);
clutter_actor_set_position (actor, 100, 100);
clutter_actor_set_reactive (actor);
clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
@ -200,7 +200,7 @@ main (int argc, char *argv[])
clutter_actor_set_size (actor, 100, 100);
clutter_actor_set_position (actor, 250, 100);
clutter_actor_set_reactive (actor);
clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER (stage), actor, NULL);
@ -214,7 +214,7 @@ main (int argc, char *argv[])
clutter_actor_set_size (actor, 100, 100);
clutter_actor_set_position (actor, 400, 100);
clutter_actor_set_reactive (actor);
clutter_actor_set_reactive (actor, TRUE);
clutter_container_add (CLUTTER_CONTAINER(stage), actor, NULL);