diff options
author | Rob Bradford <rob@linux.intel.com> | 2013-08-04 15:38:40 +0100 |
---|---|---|
committer | Rob Bradford <rob@linux.intel.com> | 2013-08-04 15:38:40 +0100 |
commit | 9808da7efed1ef96f3b0d8bdbd07c82da7fddffd (patch) | |
tree | 0eed777a660ac21078c599f4e0c02a91be8cbd6d | |
parent | 66044b665f9fee364c112e0611200c23e604992f (diff) | |
download | clutter-9808da7efed1ef96f3b0d8bdbd07c82da7fddffd.tar.gz |
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.
-rw-r--r-- | clutter/wayland/clutter-input-device-wayland.c | 14 |
1 files changed, 14 insertions, 0 deletions
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); |