From 4b7d77864a866e56cf46d7cfe73c12b7658392c3 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Thu, 17 Apr 2014 17:52:11 -0400 Subject: [PATCH] seat: Move update_pointer to MetaWaylandPointer --- src/wayland/meta-wayland-pointer.c | 95 ++++++++++++++++++++++-------- src/wayland/meta-wayland-pointer.h | 4 ++ src/wayland/meta-wayland-seat.c | 49 +-------------- 3 files changed, 77 insertions(+), 71 deletions(-) diff --git a/src/wayland/meta-wayland-pointer.c b/src/wayland/meta-wayland-pointer.c index d805877a7..f3ec9876b 100644 --- a/src/wayland/meta-wayland-pointer.c +++ b/src/wayland/meta-wayland-pointer.c @@ -329,6 +329,76 @@ meta_wayland_pointer_release (MetaWaylandPointer *pointer) set_cursor_surface (pointer, NULL); } +static int +count_buttons (const ClutterEvent *event) +{ + static gint maskmap[5] = + { + CLUTTER_BUTTON1_MASK, CLUTTER_BUTTON2_MASK, CLUTTER_BUTTON3_MASK, + CLUTTER_BUTTON4_MASK, CLUTTER_BUTTON5_MASK + }; + ClutterModifierType mod_mask; + int i, count; + + mod_mask = clutter_event_get_state (event); + count = 0; + for (i = 0; i < 5; i++) + { + if (mod_mask & maskmap[i]) + count++; + } + + return count; +} + +void +meta_wayland_pointer_update (MetaWaylandPointer *pointer, + const ClutterEvent *event) +{ + float x, y; + + clutter_event_get_coords (event, &x, &y); + pointer->x = wl_fixed_from_double (x); + pointer->y = wl_fixed_from_double (y); + + pointer->button_count = count_buttons (event); + + if (pointer->cursor_tracker) + { + meta_cursor_tracker_update_position (pointer->cursor_tracker, + wl_fixed_to_int (pointer->x), + wl_fixed_to_int (pointer->y)); + + if (pointer->current == NULL) + meta_cursor_tracker_unset_window_cursor (pointer->cursor_tracker); + } +} + +static void +pointer_set_cursor (struct wl_client *client, + struct wl_resource *resource, + uint32_t serial, + struct wl_resource *surface_resource, + int32_t x, int32_t y) +{ + MetaWaylandPointer *pointer = wl_resource_get_user_data (resource); + MetaWaylandSurface *surface; + + surface = (surface_resource ? wl_resource_get_user_data (surface_resource) : NULL); + + if (pointer->focus_surface == NULL) + return; + if (wl_resource_get_client (pointer->focus_surface->resource) != client) + return; + if (pointer->focus_serial - serial > G_MAXUINT32 / 2) + return; + + pointer->hotspot_x = x; + pointer->hotspot_y = y; + set_cursor_surface (pointer, surface); + meta_wayland_pointer_update_cursor_surface (pointer); +} + static void move_resources (struct wl_list *destination, struct wl_list *source) { @@ -664,31 +734,6 @@ meta_wayland_pointer_update_cursor_surface (MetaWaylandPointer *pointer) meta_cursor_reference_unref (cursor); } -static void -pointer_set_cursor (struct wl_client *client, - struct wl_resource *resource, - uint32_t serial, - struct wl_resource *surface_resource, - int32_t x, int32_t y) -{ - MetaWaylandPointer *pointer = wl_resource_get_user_data (resource); - MetaWaylandSurface *surface; - - surface = (surface_resource ? wl_resource_get_user_data (surface_resource) : NULL); - - if (pointer->focus_surface == NULL) - return; - if (wl_resource_get_client (pointer->focus_surface->resource) != client) - return; - if (pointer->focus_serial - serial > G_MAXUINT32 / 2) - return; - - pointer->hotspot_x = x; - pointer->hotspot_y = y; - set_cursor_surface (pointer, surface); - meta_wayland_pointer_update_cursor_surface (pointer); -} - static void pointer_release (struct wl_client *client, struct wl_resource *resource) diff --git a/src/wayland/meta-wayland-pointer.h b/src/wayland/meta-wayland-pointer.h index 281d4d921..4c9d92732 100644 --- a/src/wayland/meta-wayland-pointer.h +++ b/src/wayland/meta-wayland-pointer.h @@ -79,6 +79,10 @@ meta_wayland_pointer_init (MetaWaylandPointer *pointer); void meta_wayland_pointer_release (MetaWaylandPointer *pointer); +void +meta_wayland_pointer_update (MetaWaylandPointer *pointer, + const ClutterEvent *event); + void meta_wayland_pointer_set_focus (MetaWaylandPointer *pointer, MetaWaylandSurface *surface); diff --git a/src/wayland/meta-wayland-seat.c b/src/wayland/meta-wayland-seat.c index b734cef5c..9fbe582b5 100644 --- a/src/wayland/meta-wayland-seat.c +++ b/src/wayland/meta-wayland-seat.c @@ -162,51 +162,6 @@ meta_wayland_seat_free (MetaWaylandSeat *seat) g_slice_free (MetaWaylandSeat, seat); } -static int -count_buttons (const ClutterEvent *event) -{ - static gint maskmap[5] = - { - CLUTTER_BUTTON1_MASK, CLUTTER_BUTTON2_MASK, CLUTTER_BUTTON3_MASK, - CLUTTER_BUTTON4_MASK, CLUTTER_BUTTON5_MASK - }; - ClutterModifierType mod_mask; - int i, count; - - mod_mask = clutter_event_get_state (event); - count = 0; - for (i = 0; i < 5; i++) - { - if (mod_mask & maskmap[i]) - count++; - } - - return count; -} - -static void -meta_wayland_seat_update_pointer (MetaWaylandSeat *seat, - const ClutterEvent *event) -{ - float x, y; - - clutter_event_get_coords (event, &x, &y); - seat->pointer.x = wl_fixed_from_double (x); - seat->pointer.y = wl_fixed_from_double (y); - - seat->pointer.button_count = count_buttons (event); - - if (seat->pointer.cursor_tracker) - { - meta_cursor_tracker_update_position (seat->pointer.cursor_tracker, - wl_fixed_to_int (seat->pointer.x), - wl_fixed_to_int (seat->pointer.y)); - - if (seat->pointer.current == NULL) - meta_cursor_tracker_unset_window_cursor (seat->pointer.cursor_tracker); - } -} - void meta_wayland_seat_update (MetaWaylandSeat *seat, const ClutterEvent *event) @@ -217,12 +172,14 @@ meta_wayland_seat_update (MetaWaylandSeat *seat, case CLUTTER_BUTTON_PRESS: case CLUTTER_BUTTON_RELEASE: case CLUTTER_SCROLL: - meta_wayland_seat_update_pointer (seat, event); + meta_wayland_pointer_update (&seat->pointer, event); break; + case CLUTTER_KEY_PRESS: case CLUTTER_KEY_RELEASE: meta_wayland_keyboard_update (&seat->keyboard, (const ClutterKeyEvent *) event); break; + default: break; }