Clean up only if the request points to the presenting window or its top parent window.
Since in this case all events are removed unconditionally, always stop the timer. Signed-off-by: Roman Gilg <subd...@gmail.com> --- hw/xwayland/xwayland-present.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c index c41a8a2..5112950 100644 --- a/hw/xwayland/xwayland-present.c +++ b/hw/xwayland/xwayland-present.c @@ -77,13 +77,14 @@ xwl_present_cleanup(struct xwl_window *xwl_window, WindowPtr window) { struct xwl_present_event *event, *tmp; - if (xwl_window->present_window == window || xwl_window->window == window) { - if (xwl_window->present_frame_callback) { - wl_callback_destroy(xwl_window->present_frame_callback); - xwl_window->present_frame_callback = NULL; - } - xwl_window->present_window = NULL; + if (xwl_window->present_window != window && xwl_window->window != window) + return; + + if (xwl_window->present_frame_callback) { + wl_callback_destroy(xwl_window->present_frame_callback); + xwl_window->present_frame_callback = NULL; } + xwl_window->present_window = NULL; /* Clear remaining events */ xorg_list_for_each_entry_safe(event, tmp, &xwl_window->present_event_list, list) { @@ -98,8 +99,7 @@ xwl_present_cleanup(struct xwl_window *xwl_window, WindowPtr window) } /* Clear timer */ - if (!xwl_present_has_events(xwl_window)) - xwl_present_free_timer(xwl_window); + xwl_present_free_timer(xwl_window); } static void -- 2.7.4 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel