Title: [279571] trunk/Source/WebKit
Revision
279571
Author
[email protected]
Date
2021-07-05 14:15:28 -0700 (Mon, 05 Jul 2021)

Log Message

[GTK] Kinetic scrolling interferes with gestures
https://bugs.webkit.org/show_bug.cgi?id=226680

Patch by Alexander Mikhaylenko <[email protected]> on 2021-07-05
Reviewed by Michael Catanzaro.

Simulate scroll events that would stop scrolling when we're starting any touch
gesture. Since we don't have a way to do that on touchpad yet, just stop it when
starting a zoom or a navigation swipe gesture instead.

* UIProcess/API/gtk/PageClientImpl.cpp:
(WebKit::PageClientImpl::navigationGestureDidBegin):
* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseZoomBegin):
(webkitWebViewBaseTouchDragBegin):
(webkitWebViewBaseConstructed):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (279570 => 279571)


--- trunk/Source/WebKit/ChangeLog	2021-07-05 20:59:45 UTC (rev 279570)
+++ trunk/Source/WebKit/ChangeLog	2021-07-05 21:15:28 UTC (rev 279571)
@@ -1,3 +1,21 @@
+2021-07-05  Alexander Mikhaylenko  <[email protected]>
+
+        [GTK] Kinetic scrolling interferes with gestures
+        https://bugs.webkit.org/show_bug.cgi?id=226680
+
+        Reviewed by Michael Catanzaro.
+
+        Simulate scroll events that would stop scrolling when we're starting any touch
+        gesture. Since we don't have a way to do that on touchpad yet, just stop it when
+        starting a zoom or a navigation swipe gesture instead.
+
+        * UIProcess/API/gtk/PageClientImpl.cpp:
+        (WebKit::PageClientImpl::navigationGestureDidBegin):
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (webkitWebViewBaseZoomBegin):
+        (webkitWebViewBaseTouchDragBegin):
+        (webkitWebViewBaseConstructed):
+
 2021-07-04  Wenson Hsieh  <[email protected]>
 
         [iOS] Augment -_webView:didNotHandleTapAsMeaningfulClickAtPoint: to include meaningful taps

Modified: trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp (279570 => 279571)


--- trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp	2021-07-05 20:59:45 UTC (rev 279570)
+++ trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp	2021-07-05 21:15:28 UTC (rev 279571)
@@ -39,6 +39,7 @@
 #include "WebEventFactory.h"
 #include "WebKitColorChooser.h"
 #include "WebKitPopupMenu.h"
+#include "WebKitWebViewBaseInternal.h"
 #include "WebKitWebViewBasePrivate.h"
 #include "WebKitWebViewPrivate.h"
 #include "WebPageProxy.h"
@@ -444,6 +445,7 @@
 
 void PageClientImpl::navigationGestureDidBegin()
 {
+    webkitWebViewBaseSynthesizeWheelEvent(WEBKIT_WEB_VIEW_BASE(m_viewWidget), 0, 0, 0, 0, WheelEventPhase::Began, WheelEventPhase::NoPhase);
 }
 
 void PageClientImpl::navigationGestureWillEnd(bool, WebBackForwardListItem&)

Modified: trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (279570 => 279571)


--- trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2021-07-05 20:59:45 UTC (rev 279570)
+++ trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2021-07-05 21:15:28 UTC (rev 279571)
@@ -1847,6 +1847,19 @@
     return GTK_WIDGET_CLASS(webkit_web_view_base_parent_class)->focus(widget, direction);
 }
 
+
+static void webkitWebViewBaseZoomBegin(WebKitWebViewBase* webViewBase, GdkEventSequence* sequence, GtkGesture* gesture)
+{
+    WebKitWebViewBasePrivate* priv = webViewBase->priv;
+    if (priv->pageGrabbedTouch)
+        return;
+
+    double x, y;
+    gtk_gesture_get_bounding_box_center(gesture, &x, &y);
+
+    webkitWebViewBaseSynthesizeWheelEvent(webViewBase, 0, 0, x, y, WheelEventPhase::Began, WheelEventPhase::NoPhase);
+}
+
 static void webkitWebViewBaseZoomChanged(WebKitWebViewBase* webViewBase, gdouble scale, GtkGesture* gesture)
 {
     WebKitWebViewBasePrivate* priv = webViewBase->priv;
@@ -1920,6 +1933,8 @@
     WebKitWebViewBasePrivate* priv = webViewBase->priv;
     priv->dragOffset.set(0, 0);
     priv->isBeingDragged = false;
+
+    webkitWebViewBaseSynthesizeWheelEvent(webViewBase, 0, 0, startX, startY, WheelEventPhase::Began, WheelEventPhase::NoPhase);
 }
 
 static void webkitWebViewBaseTouchDragUpdate(WebKitWebViewBase* webViewBase, double offsetX, double offsetY, GtkGesture* gesture)
@@ -2061,6 +2076,7 @@
     priv->touchGestureGroup = gtk_gesture_zoom_new(viewWidget);
     g_object_set_data_full(G_OBJECT(viewWidget), "wk-view-zoom-gesture", priv->touchGestureGroup, g_object_unref);
 #endif
+    g_signal_connect_object(priv->touchGestureGroup, "begin", G_CALLBACK(webkitWebViewBaseZoomBegin), viewWidget, G_CONNECT_SWAPPED);
     g_signal_connect_object(priv->touchGestureGroup, "scale-changed", G_CALLBACK(webkitWebViewBaseZoomChanged), viewWidget, G_CONNECT_SWAPPED);
     g_signal_connect_object(priv->touchGestureGroup, "end", G_CALLBACK(webkitWebViewBaseZoomEnd), viewWidget, G_CONNECT_SWAPPED);
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to