From db7b9f3438522aa01fb37bf12275e697f22bf6f6 Mon Sep 17 00:00:00 2001 From: Pekka Paalanen Date: Mon, 16 Jan 2017 17:01:11 +0200 Subject: xwm: fix intermittent half-drawn decorations problem To reproduce the problem: - start weston (x11 backend worked, glamor in Xwayland makes no difference) - start xterm - very very slowly move the pointer in the xterm decorations onto or away from a button - the moment the decorations are updated, they will appear incomplete, e.g. completely without buttons and title text - if you cause just one more pointer motion event, the decorations will update to completely drawn appearance Another way to reproduce the problem is to have an xterm and change its window title. This is easy if you use a shell prompt that updates the terminal window title. When the title updates, decorations will be half-drawn until something happens in XWM. The fix: flush. Apparently the drawing commands did not get flushed to the X server until any other X11 action pushed them through. xcb_flush() is the real fix here. cairo_surface_flush() is added just for good measure, because documentation indicates it would be better used, however it was not strictly necessary to fix the problem in my experiments. Signed-off-by: Pekka Paalanen Reviewed-by: Daniel Stone Tested-by: Emmanuel Gil Peyrot Reviewed-by: Emmanuel Gil Peyrot --- xwayland/window-manager.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'xwayland') diff --git a/xwayland/window-manager.c b/xwayland/window-manager.c index 1dd8083f..832f824a 100644 --- a/xwayland/window-manager.c +++ b/xwayland/window-manager.c @@ -1148,6 +1148,8 @@ weston_wm_window_draw_decoration(void *data) } cairo_destroy(cr); + cairo_surface_flush(window->cairo_surface); + xcb_flush(window->wm->conn); if (window->surface) { pixman_region32_fini(&window->surface->pending.opaque); -- cgit v1.2.3