From 1d2b3cea59028080ac6277b62b16abeb3e44fe95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Fri, 18 Feb 2022 15:24:39 +0100 Subject: [PATCH 1/3] clutter/stage: Remove unnecessarily public API We're not using this anywhere, can also make that a static function. --- clutter/clutter/clutter-stage-private.h | 7 ------- clutter/clutter/clutter-stage.c | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/clutter/clutter/clutter-stage-private.h b/clutter/clutter/clutter-stage-private.h index efa341cc190..dc3b07da971 100644 --- a/clutter/clutter/clutter-stage-private.h +++ b/clutter/clutter/clutter-stage-private.h @@ -134,13 +134,6 @@ GList * clutter_stage_get_views_for_rect (ClutterStage *stage, void clutter_stage_set_actor_needs_immediate_relayout (ClutterStage *stage); -void clutter_stage_update_device_entry (ClutterStage *self, - ClutterInputDevice *device, - ClutterEventSequence *sequence, - graphene_point_t coords, - ClutterActor *actor, - cairo_region_t *clear_area); - void clutter_stage_remove_device_entry (ClutterStage *self, ClutterInputDevice *device, ClutterEventSequence *sequence); diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index 569df87a767..96026d88f98 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -3203,7 +3203,7 @@ free_pointer_device_entry (PointerDeviceEntry *entry) g_free (entry); } -void +static void clutter_stage_update_device_entry (ClutterStage *self, ClutterInputDevice *device, ClutterEventSequence *sequence, -- GitLab From ca1e6e1f129b8d97ebda1eb6bffac928735bfcb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Fri, 18 Feb 2022 15:23:43 +0100 Subject: [PATCH 2/3] clutter/stage: Add event sequence to repick_device() API We're not using it anywhere (yet), but not having an event sequence as an argument makes it easy to forget about those, so add that argument. --- clutter/clutter/clutter-actor.c | 2 +- clutter/clutter/clutter-mutter.h | 5 +++-- clutter/clutter/clutter-stage.c | 11 ++++++----- src/compositor/meta-window-actor.c | 2 +- src/core/display.c | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c index 59345a7252c..30124cdb6ec 100644 --- a/clutter/clutter/clutter-actor.c +++ b/clutter/clutter/clutter-actor.c @@ -13309,7 +13309,7 @@ clutter_actor_update_pointer (ClutterActor *self) seat = clutter_backend_get_default_seat (clutter_get_default_backend ()); pointer = clutter_seat_get_pointer (seat); - clutter_stage_repick_device (stage, pointer); + clutter_stage_repick_device (stage, pointer, NULL); } static void diff --git a/clutter/clutter/clutter-mutter.h b/clutter/clutter/clutter-mutter.h index b383ff518cf..10eed7830f8 100644 --- a/clutter/clutter/clutter-mutter.h +++ b/clutter/clutter/clutter-mutter.h @@ -117,8 +117,9 @@ void clutter_stage_get_device_coords (ClutterStage *stage, ClutterEventSequence *sequence, graphene_point_t *coords); CLUTTER_EXPORT -void clutter_stage_repick_device (ClutterStage *stage, - ClutterInputDevice *device); +void clutter_stage_repick_device (ClutterStage *stage, + ClutterInputDevice *device, + ClutterEventSequence *sequence); CLUTTER_EXPORT void clutter_get_debug_flags (ClutterDebugFlag *debug_flags, diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index 96026d88f98..cacb5e9e3d3 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -3178,7 +3178,7 @@ on_device_actor_destroyed (ClutterActor *actor, */ entry->current_actor = NULL; g_clear_pointer (&entry->clear_area, cairo_region_destroy); - clutter_stage_repick_device (entry->stage, entry->device); + clutter_stage_repick_device (entry->stage, entry->device, NULL); } static void @@ -3501,15 +3501,16 @@ clutter_stage_update_device (ClutterStage *stage, } void -clutter_stage_repick_device (ClutterStage *stage, - ClutterInputDevice *device) +clutter_stage_repick_device (ClutterStage *stage, + ClutterInputDevice *device, + ClutterEventSequence *sequence) { graphene_point_t point; - clutter_stage_get_device_coords (stage, device, NULL, &point); + clutter_stage_get_device_coords (stage, device, sequence, &point); clutter_stage_pick_and_update_device (stage, device, - NULL, + sequence, CLUTTER_DEVICE_UPDATE_IGNORE_CACHE | CLUTTER_DEVICE_UPDATE_EMIT_CROSSING, point, diff --git a/src/compositor/meta-window-actor.c b/src/compositor/meta-window-actor.c index 9cee56a371c..bf6d37ad2d3 100644 --- a/src/compositor/meta-window-actor.c +++ b/src/compositor/meta-window-actor.c @@ -699,7 +699,7 @@ meta_window_actor_after_effects (MetaWindowActor *self) meta_window_actor_sync_actor_geometry (self, FALSE); } - clutter_stage_repick_device (stage, clutter_seat_get_pointer (seat)); + clutter_stage_repick_device (stage, clutter_seat_get_pointer (seat), NULL); } void diff --git a/src/core/display.c b/src/core/display.c index 5f99578a69b..b95fea008c1 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -1440,7 +1440,7 @@ meta_display_sync_wayland_input_focus (MetaDisplay *display) meta_wayland_compositor_set_input_focus (compositor, focus_window); clutter_stage_repick_device (CLUTTER_STAGE (stage), - clutter_seat_get_pointer (seat)); + clutter_seat_get_pointer (seat), NULL); #endif } -- GitLab From 142b51d9fc38982704e049b420640bc3b8a1a431 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Sun, 20 Feb 2022 09:53:40 +0100 Subject: [PATCH 3/3] clutter/stage: Avoid repicks of TOUCHSCREEN ClutterInputDevices With commit 9475b872 we started repicking explicitly on "destroy" notifications, because clutter_stage_update_devices() would no longer take care of those for us. A small inconsistency sneaked in there: Because clutter_stage_find_updated_devices() and clutter_stage_update_devices() only deal with pointer devices, to be consistent we also don't repick touch sequences here. on_device_actor_destroyed() might be called with DeviceEntries that are tracking touch sequences though: In that case the entry->device will be a fairly useless CLUTTER_TOUCHSCREEN_DEVICE, and we should either be forwarding both entry->device and entry->sequence to clutter_stage_repick_device(), or just not call it really. --- clutter/clutter/clutter-stage.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c index cacb5e9e3d3..6774c97f345 100644 --- a/clutter/clutter/clutter-stage.c +++ b/clutter/clutter/clutter-stage.c @@ -3178,7 +3178,12 @@ on_device_actor_destroyed (ClutterActor *actor, */ entry->current_actor = NULL; g_clear_pointer (&entry->clear_area, cairo_region_destroy); - clutter_stage_repick_device (entry->stage, entry->device, NULL); + + /* Be consistent with clutter_stage_update_devices() and only repick + * pointer devices, not touch sequences. + */ + if (entry->sequence == NULL) + clutter_stage_repick_device (entry->stage, entry->device, NULL); } static void -- GitLab