Use the new wl_callback interface
diff --git a/compositor/compositor-wayland.c b/compositor/compositor-wayland.c
index df63daf..fad04aa 100644
--- a/compositor/compositor-wayland.c
+++ b/compositor/compositor-wayland.c
@@ -157,14 +157,6 @@
return 0;
}
-static void
-frame_callback(struct wl_surface *surface, void *data, uint32_t time)
-{
- struct wlsc_output *output = data;
-
- wlsc_output_finish_frame(output, time);
-}
-
static int
wayland_output_prepare_render(struct wlsc_output *output_base)
{
@@ -180,20 +172,32 @@
return 0;
}
+static void
+frame_done(void *data, struct wl_callback *wl_callback, uint32_t time)
+{
+ struct wlsc_output *output = data;
+
+ wlsc_output_finish_frame(output, time);
+}
+
+static const struct wl_callback_listener frame_listener = {
+ frame_done
+};
+
static int
wayland_output_present(struct wlsc_output *output_base)
{
struct wayland_output *output = (struct wayland_output *) output_base;
struct wayland_compositor *c =
(struct wayland_compositor *) output->base.compositor;
+ struct wl_callback *callback;
if (wayland_output_prepare_render(&output->base))
return -1;
eglSwapBuffers(c->base.display, output->egl_surface);
- wl_display_frame_callback(c->parent.display,
- output->parent.surface,
- frame_callback, &output->base);
+ callback = wl_surface_frame(output->parent.surface);
+ wl_callback_add_listener(callback, &frame_listener, output);
return 0;
}