From 6192e944b87fa97bca3834bfb333dca9d707d979 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 17 Aug 2018 13:59:12 +0200 Subject: [PATCH] wayland/touch: Only handle touch when using the native backend The touch handling code uses evdev API, thus will not work on other backends. Thus, put touch handling code behind runtime backend checks and only include the code when native backend support is enabled. --- src/wayland/meta-wayland-touch.c | 38 ++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/wayland/meta-wayland-touch.c b/src/wayland/meta-wayland-touch.c index 93ba4a7ef..01ed9b015 100644 --- a/src/wayland/meta-wayland-touch.c +++ b/src/wayland/meta-wayland-touch.c @@ -59,6 +59,7 @@ struct _MetaWaylandTouchInfo guint begin_delivered : 1; }; +#ifdef HAVE_NATIVE_BACKEND static void move_resources (struct wl_list *destination, struct wl_list *source) { @@ -207,11 +208,13 @@ touch_get_relative_coordinates (MetaWaylandTouch *touch, event_x, event_y, x, y); } +#endif /* HAVE_NATIVE_BACKEND */ void meta_wayland_touch_update (MetaWaylandTouch *touch, const ClutterEvent *event) { +#ifdef HAVE_NATIVE_BACKEND MetaWaylandTouchInfo *touch_info; ClutterEventSequence *sequence; @@ -252,12 +255,14 @@ meta_wayland_touch_update (MetaWaylandTouch *touch, touch_get_relative_coordinates (touch, touch_info->touch_surface->surface, event, &touch_info->x, &touch_info->y); touch_info->updated = TRUE; +#endif /* HAVE_NATIVE_BACKEND */ } static void handle_touch_begin (MetaWaylandTouch *touch, const ClutterEvent *event) { +#ifdef HAVE_NATIVE_BACKEND MetaWaylandTouchInfo *touch_info; ClutterEventSequence *sequence; struct wl_resource *resource; @@ -281,12 +286,14 @@ handle_touch_begin (MetaWaylandTouch *touch, } touch_info->begin_delivered = TRUE; +#endif /* HAVE_NATIVE_BACKEND */ } static void handle_touch_update (MetaWaylandTouch *touch, const ClutterEvent *event) { +#ifdef HAVE_NATIVE_BACKEND MetaWaylandTouchInfo *touch_info; ClutterEventSequence *sequence; struct wl_resource *resource; @@ -307,12 +314,14 @@ handle_touch_update (MetaWaylandTouch *touch, wl_fixed_from_double (touch_info->x), wl_fixed_from_double (touch_info->y)); } +#endif /* HAVE_NATIVE_BACKEND */ } static void handle_touch_end (MetaWaylandTouch *touch, const ClutterEvent *event) { +#ifdef HAVE_NATIVE_BACKEND MetaWaylandTouchInfo *touch_info; ClutterEventSequence *sequence; struct wl_resource *resource; @@ -336,6 +345,7 @@ handle_touch_end (MetaWaylandTouch *touch, } g_hash_table_remove (touch->touches, sequence); +#endif /* HAVE_NATIVE_BACKEND */ } static GList * @@ -389,14 +399,30 @@ static void check_send_frame_event (MetaWaylandTouch *touch, const ClutterEvent *event) { + gboolean send_frame_event; +#ifdef HAVE_NATIVE_BACKEND + MetaBackend *backend = meta_get_backend (); ClutterEventSequence *sequence; gint32 slot; - sequence = clutter_event_get_event_sequence (event); - slot = clutter_evdev_event_sequence_get_slot (sequence); - touch->frame_slots &= ~(1 << slot); + if (META_IS_BACKEND_NATIVE (backend)) + { + sequence = clutter_event_get_event_sequence (event); + slot = clutter_evdev_event_sequence_get_slot (sequence); + touch->frame_slots &= ~(1 << slot); - if (touch->frame_slots == 0) + if (touch->frame_slots == 0) + send_frame_event = TRUE; + else + send_frame_event = FALSE; + } + else +#endif /* HAVE_NATIVE_BACKEND */ + { + send_frame_event = TRUE; + } + + if (send_frame_event) touch_send_frame_event (touch); } @@ -443,12 +469,14 @@ static const struct wl_touch_interface touch_interface = { touch_release, }; +#ifdef HAVE_NATIVE_BACKEND static void touch_info_free (MetaWaylandTouchInfo *touch_info) { touch_surface_decrement_touch (touch_info->touch_surface); g_free (touch_info); } +#endif /* HAVE_NATIVE_BACKEND */ void meta_wayland_touch_cancel (MetaWaylandTouch *touch) @@ -521,10 +549,12 @@ meta_wayland_touch_enable (MetaWaylandTouch *touch) { ClutterDeviceManager *manager; +#ifdef HAVE_NATIVE_BACKEND touch->touch_surfaces = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) touch_surface_free); touch->touches = g_hash_table_new_full (NULL, NULL, NULL, (GDestroyNotify) touch_info_free); +#endif /* HAVE_NATIVE_BACKEND */ wl_list_init (&touch->resource_list);