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

Reply via email to