{
struct wlsc_compositor *ec = data;
struct wlsc_output *output;
+ int repainted_all_outputs = 1;
- if (!ec->repaint_needed) {
- ec->repaint_on_timeout = 0;
- return;
- }
+ wl_list_for_each(output, &ec->output_list, link) {
+ if (!output->repaint_needed)
+ continue;
+
+ if (!output->finished) {
+ repainted_all_outputs = 0;
+ continue;
+ }
- wl_list_for_each(output, &ec->output_list, link)
wlsc_output_repaint(output);
- output->present(output);
-
+ output->finished = 0;
+ output->repaint_needed = 0;
++ output->present(output);
+ }
- ec->repaint_needed = 0;
- ec->present(ec);
+ if (repainted_all_outputs)
+ ec->repaint_on_timeout = 0;
+ else
+ wl_event_source_timer_update(ec->timer_source, 1);
}
void
void
wlsc_compositor_schedule_repaint(struct wlsc_compositor *compositor);
+struct wlsc_binding;
+typedef void (*wlsc_binding_handler_t)(struct wlsc_input_device *device,
+ uint32_t time, uint32_t key,
+ uint32_t state, void *data);
+struct wlsc_binding *
+wlsc_compositor_add_binding(struct wlsc_compositor *compositor,
+ uint32_t key, uint32_t modifier,
+ wlsc_binding_handler_t binding, void *data);
+void
+wlsc_binding_destroy(struct wlsc_binding *binding);
+
+
void
+ wlsc_surface_assign_output(struct wlsc_surface *surface);
+
+ void
wlsc_surface_damage(struct wlsc_surface *surface);
void