xwayland: restrict present cleanup to presenting and top parent window

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.

Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Roman Gilg <subdiff@gmail.com>
This commit is contained in:
Roman Gilg 2018-04-20 17:07:42 +02:00 committed by Adam Jackson
parent 975d3a5096
commit a843c61456

View File

@ -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