[GTK] Allow pinch zoom on touchpad
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Feb 2019 15:47:07 +0000 (15:47 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 4 Feb 2019 15:47:07 +0000 (15:47 +0000)
https://bugs.webkit.org/show_bug.cgi?id=194201

Patch by Alexander Mikhaylenko <exalm7659@gmail.com> on 2019-02-04
Reviewed by Michael Catanzaro.

Enable touchpad events for WebkitWebViewBase, then feed touchpad
pinch events to GestureController.

* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseRealize): Added GDK_TOUCHPAD_GESTURE_MASK to event mask.
(webkitWebViewBaseEvent): Added.
(webkit_web_view_base_class_init): Override event vfunc.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@240922 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit/ChangeLog
Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp

index 6d5dc4f..c797c67 100644 (file)
@@ -1,3 +1,18 @@
+2019-02-04  Alexander Mikhaylenko  <exalm7659@gmail.com>
+
+        [GTK] Allow pinch zoom on touchpad
+        https://bugs.webkit.org/show_bug.cgi?id=194201
+
+        Reviewed by Michael Catanzaro.
+
+        Enable touchpad events for WebkitWebViewBase, then feed touchpad
+        pinch events to GestureController.
+
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (webkitWebViewBaseRealize): Added GDK_TOUCHPAD_GESTURE_MASK to event mask.
+        (webkitWebViewBaseEvent): Added.
+        (webkit_web_view_base_class_init): Override event vfunc.
+
 2019-02-04  Michael Catanzaro  <mcatanzaro@igalia.com>
 
         Unreviewed, only force settings.acceleratedCompositingEnabled() to true for Cocoa ports
index e224a1e..c3cc9ea 100644 (file)
@@ -364,6 +364,9 @@ static void webkitWebViewBaseRealize(GtkWidget* widget)
         | GDK_BUTTON2_MOTION_MASK
         | GDK_BUTTON3_MOTION_MASK
         | GDK_TOUCH_MASK;
+#if HAVE(GTK_GESTURES)
+    attributes.event_mask |= GDK_TOUCHPAD_GESTURE_MASK;
+#endif
 
     gint attributesMask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
 
@@ -1192,6 +1195,16 @@ static void webkitWebViewBaseDragDataReceived(GtkWidget* widget, GdkDragContext*
 }
 #endif // ENABLE(DRAG_SUPPORT)
 
+static gboolean webkitWebViewBaseEvent(GtkWidget* widget, GdkEvent* event)
+{
+#if HAVE(GTK_GESTURES)
+    if (event->type == GDK_TOUCHPAD_PINCH)
+        webkitWebViewBaseGestureController(WEBKIT_WEB_VIEW_BASE(widget)).handleEvent(event);
+#endif
+
+    return GDK_EVENT_PROPAGATE;
+}
+
 static AtkObject* webkitWebViewBaseGetAccessible(GtkWidget* widget)
 {
     // If the socket has already been created and embedded a plug ID, return it.
@@ -1315,6 +1328,7 @@ static void webkit_web_view_base_class_init(WebKitWebViewBaseClass* webkitWebVie
     widgetClass->drag_drop = webkitWebViewBaseDragDrop;
     widgetClass->drag_data_received = webkitWebViewBaseDragDataReceived;
 #endif // ENABLE(DRAG_SUPPORT)
+    widgetClass->event = webkitWebViewBaseEvent;
     widgetClass->get_accessible = webkitWebViewBaseGetAccessible;
     widgetClass->hierarchy_changed = webkitWebViewBaseHierarchyChanged;
     widgetClass->destroy = webkitWebViewBaseDestroy;