Index: clutter/clutter-actor.c =================================================================== --- clutter/clutter-actor.c (revision 3352) +++ clutter/clutter-actor.c (working copy) @@ -3459,6 +3459,7 @@ * not moved. */ + if (!priv->needs_allocation && !absolute_origin_changed && !child_moved && @@ -3469,6 +3470,7 @@ return; } + /* When absolute_origin_changed is passed in to * clutter_actor_allocate(), it indicates whether the parent has its * absolute origin moved; when passed in to ClutterActor::allocate() Index: clutter/clutter-id-pool.c =================================================================== --- clutter/clutter-id-pool.c (revision 3352) +++ clutter/clutter-id-pool.c (working copy) @@ -121,3 +121,16 @@ return array[id]; } + +gboolean +clutter_id_pool_contains (ClutterIDPool *id_pool, + guint32 id) +{ + gpointer *array; + + g_return_val_if_fail (id_pool != NULL, FALSE); + g_return_val_if_fail (id_pool->array != NULL, FALSE); + g_return_val_if_fail (id < id_pool->array->len, FALSE); + + return TRUE; +} Index: clutter/clutter-id-pool.h =================================================================== --- clutter/clutter-id-pool.h (revision 3352) +++ clutter/clutter-id-pool.h (working copy) @@ -47,6 +47,10 @@ guint32 id); +gboolean clutter_id_pool_contains (ClutterIDPool *id_pool, + guint32 id); + + G_END_DECLS #endif /* __CLUTTER_ID_POOL_H__ */ Index: clutter/clutter-main.c =================================================================== --- clutter/clutter-main.c (revision 3352) +++ clutter/clutter-main.c (working copy) @@ -342,6 +342,58 @@ return id; } +#include +static void +dump_pick (const gchar *debug_pick_path) +{ + static gint dump_no = 0; + + guchar *pixels; + guchar *pixels_inverted; + GdkPixbuf *pixbuf; + GLint viewport[4]; + gint x, y, width, height; + gint rowstride; + gchar *png_path; + + if (debug_pick_path == NULL) + return; + + png_path = g_malloc (strlen (debug_pick_path) + 16); + + glGetIntegerv(GL_VIEWPORT, viewport); + + x = viewport[0]; + y = viewport[1]; + width = viewport[2] - x; + height = viewport[3] - y; + rowstride = width * 4; + + g_sprintf (png_path, "%s/%04i.png", debug_pick_path, dump_no ++); + + pixels_inverted = g_malloc (width * height * 4); + pixels = g_malloc (width * height * 4); + glReadPixels (x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels_inverted); + + /* Flip the buffer vertically */ + for (y=0; yid_pool, id)) + { + dump_pick ("/tmp"); + } + return clutter_get_actor_by_gid (id); }