This fixes the problem where animations will wait to play until input is recieved. In general, it also makes the backend far more responsive.
Signed-off-by: Jason Ekstrand <ja...@jlekstrand.net> --- src/compositor-wayland.c | 43 +++++++++++++++++++++++-------------------- 1 file changed, 23 insertions(+), 20 deletions(-) diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c index 54c51a4..5c01a35 100644 --- a/src/compositor-wayland.c +++ b/src/compositor-wayland.c @@ -212,65 +212,67 @@ wayland_output_update_gl_border(struct wayland_output *output) fheight = frame_height(output->frame); frame_interior(output->frame, &ix, &iy, &iwidth, &iheight); - if (!output->border.top) - output->border.top = + if (!output->gl.border.top) + output->gl.border.top = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, fwidth, iy); - cr = cairo_create(output->border.top); + cr = cairo_create(output->gl.border.top); frame_repaint(output->frame, cr); cairo_destroy(cr); gl_renderer->output_set_border(&output->base, GL_RENDERER_BORDER_TOP, fwidth, iy, - cairo_image_surface_get_stride(output->border.top) / 4, - cairo_image_surface_get_data(output->border.top)); + cairo_image_surface_get_stride(output->gl.border.top) / 4, + cairo_image_surface_get_data(output->gl.border.top)); - if (!output->border.left) - output->border.left = + if (!output->gl.border.left) + output->gl.border.left = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, ix, 1); - cr = cairo_create(output->border.left); + cr = cairo_create(output->gl.border.left); cairo_translate(cr, 0, -iy); frame_repaint(output->frame, cr); cairo_destroy(cr); gl_renderer->output_set_border(&output->base, GL_RENDERER_BORDER_LEFT, ix, 1, - cairo_image_surface_get_stride(output->border.left) / 4, - cairo_image_surface_get_data(output->border.left)); + cairo_image_surface_get_stride(output->gl.border.left) / 4, + cairo_image_surface_get_data(output->gl.border.left)); - if (!output->border.right) - output->border.right = + if (!output->gl.border.right) + output->gl.border.right = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, fwidth - (ix + iwidth), 1); - cr = cairo_create(output->border.right); + cr = cairo_create(output->gl.border.right); cairo_translate(cr, -(iwidth + ix), -iy); frame_repaint(output->frame, cr); cairo_destroy(cr); gl_renderer->output_set_border(&output->base, GL_RENDERER_BORDER_RIGHT, fwidth - (ix + iwidth), 1, - cairo_image_surface_get_stride(output->border.right) / 4, - cairo_image_surface_get_data(output->border.right)); + cairo_image_surface_get_stride(output->gl.border.right) / 4, + cairo_image_surface_get_data(output->gl.border.right)); - if (!output->border.bottom) - output->border.bottom = + if (!output->gl.border.bottom) + output->gl.border.bottom = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, fwidth, fheight - (iy + iheight)); - cr = cairo_create(output->border.bottom); + cr = cairo_create(output->gl.border.bottom); cairo_translate(cr, 0, -(iy + iheight)); frame_repaint(output->frame, cr); cairo_destroy(cr); gl_renderer->output_set_border(&output->base, GL_RENDERER_BORDER_BOTTOM, fwidth, fheight - (iy + iheight), - cairo_image_surface_get_stride(output->border.bottom) / 4, - cairo_image_surface_get_data(output->border.bottom)); + cairo_image_surface_get_stride(output->gl.border.bottom) / 4, + cairo_image_surface_get_data(output->gl.border.bottom)); } static void wayland_output_start_repaint_loop(struct weston_output *output_base) { struct wayland_output *output = (struct wayland_output *) output_base; + struct wayland_compositor *wc = + (struct wayland_compositor *)output->base.compositor; struct wl_callback *callback; /* If this is the initial frame, we need to attach a buffer so that @@ -287,6 +289,7 @@ wayland_output_start_repaint_loop(struct weston_output *output_base) callback = wl_surface_frame(output->parent.surface); wl_callback_add_listener(callback, &frame_listener, output); wl_surface_commit(output->parent.surface); + wl_display_flush(wc->parent.wl_display); } static void -- 1.8.3.1 _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel