struct weston_layer *layer;
struct weston_animation *animation, *next;
struct weston_frame_callback *cb, *cnext;
+ struct wl_list frame_callback_list;
pixman_region32_t opaque, new_damage, output_damage;
int32_t width, height;
/* Rebuild the surface list and update surface transforms up front. */
wl_list_init(&ec->surface_list);
+ wl_list_init(&frame_callback_list);
wl_list_for_each(layer, &ec->layer_list, link) {
wl_list_for_each(es, &layer->surface_list, layer_link) {
weston_surface_update_transform(es);
wl_list_insert(ec->surface_list.prev, &es->link);
+ if (es->output == output) {
+ wl_list_insert_list(&frame_callback_list,
+ &es->frame_callback_list);
+ wl_list_init(&es->frame_callback_list);
+ }
}
}
weston_compositor_repick(ec);
wl_event_loop_dispatch(ec->input_loop, 0);
- wl_list_for_each_safe(cb, cnext, &output->frame_callback_list, link) {
+ wl_list_for_each_safe(cb, cnext, &frame_callback_list, link) {
wl_callback_send_done(&cb->resource, msecs);
wl_resource_destroy(&cb->resource);
}
+ wl_list_init(&frame_callback_list);
wl_list_for_each_safe(animation, next, &output->animation_list, link) {
animation->frame(animation, output, msecs);
es->output = new_output;
weston_surface_update_output_mask(es, mask);
-
- if (!wl_list_empty(&es->frame_callback_list)) {
- wl_list_insert_list(new_output->frame_callback_list.prev,
- &es->frame_callback_list);
- wl_list_init(&es->frame_callback_list);
- }
}
static void
cb->resource.data = cb;
wl_client_add_resource(client, &cb->resource);
-
- if (es->output) {
- wl_list_insert(es->output->frame_callback_list.prev,
- &cb->link);
- } else {
- wl_list_insert(es->frame_callback_list.prev, &cb->link);
- }
+ wl_list_insert(es->frame_callback_list.prev, &cb->link);
}
static void
weston_output_damage(output);
wl_signal_init(&output->frame_signal);
- wl_list_init(&output->frame_callback_list);
wl_list_init(&output->animation_list);
wl_list_init(&output->resource_list);