struct ds_allocator *allocator;
struct ds_swapchain *swapchain;
- struct wl_event_source *idle_redraw;
-
struct wl_listener output_destroy;
struct wl_listener output_frame;
static void output_handle_destroy(struct wl_listener *listener, void *data);
static void output_handle_frame(struct wl_listener *listener, void *data);
static void output_damage(struct tinyds_output *output);
-static void output_schedule_idle_redraw(struct tinyds_output *output);
-static void output_handle_idle_redraw(void *data);
+static void output_redraw(struct tinyds_output *output);
static void keyboard_handle_device_destroy(struct wl_listener *listener,
void *data);
static void keyboard_handle_key(struct wl_listener *listener, void *data);
server->changes.seat_caps = false;
ds_seat_set_capabilities(server->seat, server->seat_caps);
}
+
+ if (server->output && server->output->damaged)
+ output_redraw(server->output);
}
static void
output->drawable = true;
if (output->damaged)
- output_schedule_idle_redraw(output);
+ server_schedule_idle_task(output->server);
}
static void
output_damage(struct tinyds_output *output)
{
output->damaged = true;
- output_schedule_idle_redraw(output);
+ server_schedule_idle_task(output->server);
}
static void
-output_schedule_idle_redraw(struct tinyds_output *output)
+output_redraw(struct tinyds_output *output)
{
- struct tinyds_server *server = output->server;
-
- if (output->idle_redraw)
- return;
-
- output->idle_redraw =
- wl_event_loop_add_idle(wl_display_get_event_loop(server->display),
- output_handle_idle_redraw, output);
-}
-
-static void
-output_handle_idle_redraw(void *data)
-{
- struct tinyds_output *output = data;
struct ds_buffer *output_buffer;
pixman_image_t *output_image;
struct tinyds_view *view;
- output->idle_redraw = NULL;
-
if (!output->drawable || !output->damaged)
return;