[clutter/wip/clutter-gtk-wayland] stash: Check input listener and surface user data
- From: Rob Bradford <rbradford src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter/wip/clutter-gtk-wayland] stash: Check input listener and surface user data
- Date: Thu, 1 Aug 2013 14:28:41 +0000 (UTC)
commit ca4b5bd72a075db48a2e761f1626c965aa07c089
Author: Rob Bradford <rob linux intel com>
Date: Thu Aug 1 15:27:05 2013 +0100
stash: Check input listener and surface user data
clutter/wayland/clutter-input-device-wayland.c | 61 ++++++++++++++++++++++-
1 files changed, 58 insertions(+), 3 deletions(-)
---
diff --git a/clutter/wayland/clutter-input-device-wayland.c b/clutter/wayland/clutter-input-device-wayland.c
index 9e91eae..dbb277f 100644
--- a/clutter/wayland/clutter-input-device-wayland.c
+++ b/clutter/wayland/clutter-input-device-wayland.c
@@ -57,6 +57,9 @@ G_DEFINE_TYPE (ClutterInputDeviceWayland,
clutter_input_device_wayland,
CLUTTER_TYPE_INPUT_DEVICE);
+static gpointer pointer_listener_addr;
+static gpointer keyboard_listener_addr;
+
/* This gives us a fake time source for higher level abstractions to have an
* understanding of when an event happens. All that matters are that this is a
* monotonic increasing millisecond accurate time for events to be compared with.
@@ -74,9 +77,16 @@ clutter_wayland_handle_motion (void *data,
wl_fixed_t x, wl_fixed_t y)
{
ClutterInputDeviceWayland *device = data;
- ClutterStageCogl *stage_cogl = device->pointer_focus;
+ ClutterStageCogl *stage_cogl;
ClutterEvent *event;
+ if (wl_proxy_get_listener(pointer) != pointer_listener_addr)
+ return;
+ if (!device->pointer_focus)
+ return;
+
+ stage_cogl = device->pointer_focus;
+
event = clutter_event_new (CLUTTER_MOTION);
event->motion.stage = stage_cogl->wrapper;
event->motion.device = CLUTTER_INPUT_DEVICE (device);
@@ -98,10 +108,17 @@ clutter_wayland_handle_button (void *data,
uint32_t button, uint32_t state)
{
ClutterInputDeviceWayland *device = data;
- ClutterStageCogl *stage_cogl = device->pointer_focus;
+ ClutterStageCogl *stage_cogl;
ClutterEvent *event;
ClutterEventType type;
+ if (wl_proxy_get_listener(pointer) != pointer_listener_addr)
+ return;
+ if (!device->pointer_focus)
+ return;
+
+ stage_cogl = device->pointer_focus;
+
if (state)
type = CLUTTER_BUTTON_PRESS;
else
@@ -140,10 +157,16 @@ clutter_wayland_handle_axis (void *data,
wl_fixed_t value)
{
ClutterInputDeviceWayland *device = data;
- ClutterStageCogl *stage_cogl = device->pointer_focus;
+ ClutterStageCogl *stage_cogl;
ClutterEvent *event;
gdouble delta_x, delta_y;
+ if (wl_proxy_get_listener(pointer) != pointer_listener_addr)
+ return;
+ if (!device->pointer_focus)
+ return;
+
+ stage_cogl = device->pointer_focus;
event = clutter_event_new (CLUTTER_SCROLL);
event->scroll.time = _clutter_wayland_get_time();
event->scroll.stage = stage_cogl->wrapper;
@@ -181,6 +204,9 @@ clutter_wayland_handle_keymap (void *data,
struct xkb_keymap *keymap;
char *map_str;
+ if (wl_proxy_get_listener(keyboard) != keyboard_listener_addr)
+ return;
+
if (device->xkb)
{
xkb_state_unref (device->xkb);
@@ -272,6 +298,8 @@ clutter_wayland_handle_key (void *data,
ClutterStageCogl *stage_cogl = device->keyboard_focus;
ClutterEvent *event;
+ if (wl_proxy_get_listener(keyboard) != keyboard_listener_addr)
+ return;
if (!device->xkb)
return;
@@ -315,6 +343,8 @@ clutter_wayland_handle_modifiers (void *data,
{
ClutterInputDeviceWayland *device = data;
+ if (wl_proxy_get_listener(keyboard) != keyboard_listener_addr)
+ return;
if (!device->xkb)
return;
@@ -340,6 +370,12 @@ clutter_wayland_handle_pointer_enter (void *data,
ClutterBackend *backend;
ClutterBackendWayland *backend_wayland;
+ if (wl_proxy_get_listener(pointer) != pointer_listener_addr)
+ return;
+
+ 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;
@@ -391,6 +427,11 @@ clutter_wayland_handle_pointer_leave (void *data,
ClutterStageCogl *stage_cogl;
ClutterEvent *event;
+ if (wl_proxy_get_listener(pointer) != pointer_listener_addr)
+ return;
+ 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);
@@ -418,6 +459,11 @@ clutter_wayland_handle_keyboard_enter (void *data,
ClutterInputDeviceWayland *device = data;
ClutterStageCogl *stage_cogl;
+ if (wl_proxy_get_listener(keyboard) != keyboard_listener_addr)
+ 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 == NULL);
device->keyboard_focus = stage_cogl;
@@ -436,6 +482,13 @@ clutter_wayland_handle_keyboard_leave (void *data,
ClutterInputDeviceWayland *device = data;
ClutterStageCogl *stage_cogl;
+ if (wl_proxy_get_listener(keyboard) != keyboard_listener_addr)
+ return;
+ 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);
@@ -487,6 +540,7 @@ clutter_wayland_handle_seat (void *data,
wl_pointer_add_listener (pointer,
&_clutter_pointer_wayland_listener,
device);
+ pointer_listener_addr = &_clutter_pointer_wayland_listener;
wl_pointer_set_user_data (pointer, device);
device->has_pointer = 1;
}
@@ -502,6 +556,7 @@ clutter_wayland_handle_seat (void *data,
wl_keyboard_add_listener (keyboard,
&_clutter_keyboard_wayland_listener,
device);
+ keyboard_listener_addr =&_clutter_keyboard_wayland_listener;
wl_keyboard_set_user_data (keyboard, device);
device->has_keyboard = 1;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]