From d14987e8195f8b588648ba95791797e84663b408 Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Sat, 26 Feb 2022 13:31:18 -0800 Subject: [PATCH] macos: send stop event when fingers touch When the fingers are placed on the touchpad, we get a scroll event with the phase NSEventPhaseMayBegin. We can use this to synthesize an is_stop event. This results in the scrolledwindow stopping scroll with stop gestures. This can cause another warning as well, however, which should be addressed from #4730. Fixes #4733 --- gdk/macos/gdkmacosdisplay-translate.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/gdk/macos/gdkmacosdisplay-translate.c b/gdk/macos/gdkmacosdisplay-translate.c index db1cfa2527..e261b8a4ae 100644 --- a/gdk/macos/gdkmacosdisplay-translate.c +++ b/gdk/macos/gdkmacosdisplay-translate.c @@ -635,6 +635,20 @@ fill_scroll_event (GdkMacosDisplay *self, state = _gdk_macos_display_get_current_mouse_modifiers (self) | _gdk_macos_display_get_current_keyboard_modifiers (self); + /* If we are starting a new phase, send a stop so any previous + * scrolling immediately stops. + */ + if (phase == NSEventPhaseMayBegin) + { + ret = gdk_scroll_event_new (GDK_SURFACE (surface), + pointer, + NULL, + get_time_from_ns_event (nsevent), + state, + 0.0, 0.0, TRUE); + _gdk_event_queue_append (GDK_DISPLAY (self), g_steal_pointer (&ret)); + } + dx = [nsevent deltaX]; dy = [nsevent deltaY]; -- 2.30.2