mirror of
https://github.com/brl/mutter.git
synced 2024-12-24 12:02:04 +00:00
wayland: Use Clutter event to handle touch cancel
The semantics for libinput events are not as expected here. Besides it's pointless, as those should arrive per-slot in a burst, and we cancel on the first event. We can simply use the Clutter event for this. https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1486
This commit is contained in:
parent
dd60fa2bc6
commit
f00e567417
@ -449,6 +449,10 @@ meta_wayland_touch_handle_event (MetaWaylandTouch *touch,
|
||||
handle_touch_end (touch, event);
|
||||
break;
|
||||
|
||||
case CLUTTER_TOUCH_CANCEL:
|
||||
meta_wayland_touch_cancel (touch);
|
||||
break;
|
||||
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
@ -510,30 +514,6 @@ meta_wayland_touch_cancel (MetaWaylandTouch *touch)
|
||||
g_list_free (surfaces);
|
||||
}
|
||||
|
||||
#ifdef HAVE_NATIVE_BACKEND
|
||||
static gboolean
|
||||
evdev_filter_func (struct libinput_event *event,
|
||||
gpointer data)
|
||||
{
|
||||
MetaWaylandTouch *touch = data;
|
||||
|
||||
switch (libinput_event_get_type (event))
|
||||
{
|
||||
case LIBINPUT_EVENT_TOUCH_CANCEL:
|
||||
/* Clutter translates this into individual CLUTTER_TOUCH_CANCEL events,
|
||||
* which are not so useful when sending a global signal as the protocol
|
||||
* requires.
|
||||
*/
|
||||
meta_wayland_touch_cancel (touch);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return CLUTTER_EVENT_PROPAGATE;
|
||||
}
|
||||
#endif
|
||||
|
||||
void
|
||||
meta_wayland_touch_enable (MetaWaylandTouch *touch)
|
||||
{
|
||||
@ -545,35 +525,11 @@ meta_wayland_touch_enable (MetaWaylandTouch *touch)
|
||||
#endif /* HAVE_NATIVE_BACKEND */
|
||||
|
||||
wl_list_init (&touch->resource_list);
|
||||
|
||||
#ifdef HAVE_NATIVE_BACKEND
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
if (META_IS_BACKEND_NATIVE (backend))
|
||||
{
|
||||
ClutterBackend *backend = clutter_get_default_backend ();
|
||||
ClutterSeat *seat = clutter_backend_get_default_seat (backend);
|
||||
|
||||
meta_seat_native_add_filter (META_SEAT_NATIVE (seat),
|
||||
evdev_filter_func, touch, NULL);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
meta_wayland_touch_disable (MetaWaylandTouch *touch)
|
||||
{
|
||||
#ifdef HAVE_NATIVE_BACKEND
|
||||
MetaBackend *backend = meta_get_backend ();
|
||||
if (META_IS_BACKEND_NATIVE (backend))
|
||||
{
|
||||
ClutterBackend *backend = clutter_get_default_backend ();
|
||||
ClutterSeat *seat = clutter_backend_get_default_seat (backend);
|
||||
|
||||
meta_seat_native_remove_filter (META_SEAT_NATIVE (seat),
|
||||
evdev_filter_func, touch);
|
||||
}
|
||||
#endif
|
||||
|
||||
meta_wayland_touch_cancel (touch);
|
||||
|
||||
g_clear_pointer (&touch->touch_surfaces, g_hash_table_unref);
|
||||
|
Loading…
Reference in New Issue
Block a user