[gtk+/gtk-3-18] wayland: Don't ignore wl_keyboard.leave if surface is gone



commit cbc8d4a88a1717b8ad297772b8ab040c1072f5df
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Tue Oct 6 14:30:28 2015 +0800

    wayland: Don't ignore wl_keyboard.leave if surface is gone
    
    keyboard_handle_leave() might be called with a NULL surface resource
    (for example if the surface was destroyed after the event was sent). If
    so, we should still deal with the keyboard focus lost event, otherwise
    we will both leak (the keyboard_focus GdkWindow reference) and miss
    stopping the key repeat timer.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=755927

 gdk/wayland/gdkdevice-wayland.c |   11 +++++------
 1 files changed, 5 insertions(+), 6 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 9254885..b6e3fd0 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -1191,15 +1191,14 @@ keyboard_handle_leave (void               *data,
   GdkEvent *event;
   GdkWaylandDisplay *display = GDK_WAYLAND_DISPLAY (device->display);
 
-  if (!surface)
-    return;
-
-  if (!GDK_IS_WINDOW (wl_surface_get_user_data (surface)))
-    return;
-
   if (!device->keyboard_focus)
     return;
 
+  /* gdk_window_is_destroyed() might already return TRUE for
+   * device->keyboard_focus here, which would happen if we destroyed the
+   * window before loosing keyboard focus.
+   */
+
   stop_key_repeat (device);
 
   _gdk_wayland_display_update_serial (display, serial);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]