+
+static void renderer_area_changed(void *renderer, gint src_x, gint src_y, gint src_w, gint src_h)
+{
+ RendererClutter *rc = (RendererClutter *)renderer;
+ PixbufRenderer *pr = rc->pr;
+
+ RendererClutterAreaParam *par = g_new0(RendererClutterAreaParam, 1);
+ par->rc = rc;
+ par->x = src_x;
+ par->y = src_y;
+ par->w = src_w;
+ par->h = src_h;
+ rc->pending_updates = g_list_append(rc->pending_updates, par);
+ if (!rc->idle_update)
+ {
+ rc->idle_update = g_idle_add_full(G_PRIORITY_DEFAULT_IDLE, renderer_area_changed_cb, rc, NULL);
+ }
+}
+
+static void renderer_remove_pending_updates(RendererClutter *rc)
+{
+ if (rc->idle_update) g_idle_remove_by_data(rc);
+ rc->idle_update = 0;
+ while (rc->pending_updates)
+ {
+ RendererClutterAreaParam *par = rc->pending_updates->data;
+ rc->pending_updates = g_list_remove(rc->pending_updates, par);
+ g_free(par);
+ }