From 9808da7efed1ef96f3b0d8bdbd07c82da7fddffd Mon Sep 17 00:00:00 2001 From: Rob Bradford Date: Sun, 4 Aug 2013 15:38:40 +0100 Subject: [PATCH] wayland: Only process enter and leave events Clutter created surfaces When combining with GTK we will receive enter and leave events for surfaces from both toolkits therefore we must filter our events appropriately. --- clutter/wayland/clutter-input-device-wayland.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/clutter/wayland/clutter-input-device-wayland.c b/clutter/wayland/clutter-input-device-wayland.c index 25b611c67..c547bda0a 100644 --- a/clutter/wayland/clutter-input-device-wayland.c +++ b/clutter/wayland/clutter-input-device-wayland.c @@ -356,6 +356,9 @@ clutter_wayland_handle_pointer_enter (void *data, ClutterBackend *backend; ClutterBackendWayland *backend_wayland; + if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface))) + return; + stage_cogl = wl_surface_get_user_data (surface); device->pointer_focus = stage_cogl; @@ -407,6 +410,9 @@ clutter_wayland_handle_pointer_leave (void *data, ClutterStageCogl *stage_cogl; ClutterEvent *event; + if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface))) + return; + stage_cogl = wl_surface_get_user_data (surface); g_assert (device->pointer_focus == stage_cogl); @@ -434,6 +440,9 @@ clutter_wayland_handle_keyboard_enter (void *data, ClutterInputDeviceWayland *device = data; ClutterStageCogl *stage_cogl; + if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface))) + return; + stage_cogl = wl_surface_get_user_data (surface); g_assert (device->keyboard_focus == NULL); device->keyboard_focus = stage_cogl; @@ -452,6 +461,11 @@ clutter_wayland_handle_keyboard_leave (void *data, ClutterInputDeviceWayland *device = data; ClutterStageCogl *stage_cogl; + if (!surface) + return; + if (!CLUTTER_IS_STAGE_COGL (wl_surface_get_user_data (surface))) + return; + stage_cogl = wl_surface_get_user_data (surface); g_assert (device->keyboard_focus == stage_cogl);