Title: [289079] releases/WebKitGTK/webkit-2.34
Revision
289079
Author
ape...@igalia.com
Date
2022-02-03 14:27:08 -0800 (Thu, 03 Feb 2022)

Log Message

Merge r282952 - [GTK] Allow sending precise mouse wheel events in LayoutTests
https://bugs.webkit.org/show_bug.cgi?id=230541

Reviewed by Tim Horton.

Source/WebKit:

Add code to be able to send precise synthetic mouse-wheel events in GTK.

* Shared/NativeWebWheelEvent.h:
* Shared/gtk/NativeWebWheelEventGtk.cpp:
(WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseSynthesizeWheelEvent):
(webkitWebViewBaseSetWheelHasPreciseDeltas):
* UIProcess/API/gtk/WebKitWebViewBaseInternal.h:

Tools:

Add API to be able to send precise mouse-wheel events in EventSender.

* WebKitTestRunner/EventSenderProxy.h:
* WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
* WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
(WTR::EventSendingController::setWheelHasPreciseDeltas):
* WebKitTestRunner/InjectedBundle/EventSendingController.h:
* WebKitTestRunner/TestController.cpp:
(WTR::TestController::didReceiveMessageFromInjectedBundle):
* WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
(WTR::toWebKitGLibAPI):
(WTR::EventSenderProxy::~EventSenderProxy):
(WTR::EventSenderProxy::setWheelHasPreciseDeltas):

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.34/Source/WebKit/ChangeLog (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Source/WebKit/ChangeLog	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Source/WebKit/ChangeLog	2022-02-03 22:27:08 UTC (rev 289079)
@@ -1,3 +1,20 @@
+2021-09-23  Chris Lord  <cl...@igalia.com>
+
+        [GTK] Allow sending precise mouse wheel events in LayoutTests
+        https://bugs.webkit.org/show_bug.cgi?id=230541
+
+        Reviewed by Tim Horton.
+
+        Add code to be able to send precise synthetic mouse-wheel events in GTK.
+
+        * Shared/NativeWebWheelEvent.h:
+        * Shared/gtk/NativeWebWheelEventGtk.cpp:
+        (WebKit::NativeWebWheelEvent::NativeWebWheelEvent):
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (webkitWebViewBaseSynthesizeWheelEvent):
+        (webkitWebViewBaseSetWheelHasPreciseDeltas):
+        * UIProcess/API/gtk/WebKitWebViewBaseInternal.h:
+
 2022-01-20  Adrian Perez de Castro  <ape...@igalia.com>
 
         Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.34.4 release

Modified: releases/WebKitGTK/webkit-2.34/Source/WebKit/Shared/NativeWebWheelEvent.h (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Source/WebKit/Shared/NativeWebWheelEvent.h	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Source/WebKit/Shared/NativeWebWheelEvent.h	2022-02-03 22:27:08 UTC (rev 289079)
@@ -61,7 +61,7 @@
     NativeWebWheelEvent(GdkEvent*);
     NativeWebWheelEvent(GdkEvent*, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase);
     NativeWebWheelEvent(GdkEvent*, const WebCore::IntPoint&, const WebCore::FloatSize& wheelTicks);
-    NativeWebWheelEvent(GdkEvent*, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase);
+    NativeWebWheelEvent(GdkEvent*, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase, bool hasPreciseDeltas = false);
 #elif USE(LIBWPE)
     NativeWebWheelEvent(struct wpe_input_axis_event*, float deviceScaleFactor, WebWheelEvent::Phase, WebWheelEvent::Phase momentumPhase);
 #elif PLATFORM(WIN)

Modified: releases/WebKitGTK/webkit-2.34/Source/WebKit/Shared/gtk/NativeWebWheelEventGtk.cpp (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Source/WebKit/Shared/gtk/NativeWebWheelEventGtk.cpp	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Source/WebKit/Shared/gtk/NativeWebWheelEventGtk.cpp	2022-02-03 22:27:08 UTC (rev 289079)
@@ -49,8 +49,8 @@
 {
 }
 
-NativeWebWheelEvent::NativeWebWheelEvent(GdkEvent *event, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase)
-    : WebWheelEvent(WebEvent::Wheel, position, globalPosition, delta, wheelTicks, phase, momentumPhase, WebWheelEvent::ScrollByPixelWheelEvent, false, { }, WallTime::now())
+NativeWebWheelEvent::NativeWebWheelEvent(GdkEvent *event, const WebCore::IntPoint& position, const WebCore::IntPoint& globalPosition, const WebCore::FloatSize& delta, const WebCore::FloatSize& wheelTicks, WebWheelEvent::Phase phase, WebWheelEvent::Phase momentumPhase, bool hasPreciseDeltas)
+    : WebWheelEvent(WebEvent::Wheel, position, globalPosition, delta, wheelTicks, phase, momentumPhase, WebWheelEvent::ScrollByPixelWheelEvent, hasPreciseDeltas, { }, WallTime::now())
     , m_nativeEvent(event ? gdk_event_copy(event) : nullptr)
 {
 }

Modified: releases/WebKitGTK/webkit-2.34/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2022-02-03 22:27:08 UTC (rev 289079)
@@ -284,6 +284,7 @@
     TouchEventsMap touchEvents;
     IntSize contentsSize;
     std::optional<MotionEvent> lastMotionEvent;
+    bool wheelHasPreciseDeltas { false };
     bool isBlank;
     bool shouldNotifyFocusEvents { true };
 
@@ -2994,12 +2995,18 @@
 
     FloatSize wheelTicks(deltaX, deltaY);
     FloatSize delta(wheelTicks);
-    delta.scale(static_cast<float>(Scrollbar::pixelsPerLineStep()));
+    if (!priv->wheelHasPreciseDeltas)
+        delta.scale(static_cast<float>(Scrollbar::pixelsPerLineStep()));
 
     priv->pageProxy->handleWheelEvent(NativeWebWheelEvent(const_cast<GdkEvent*>(event), { x, y }, widgetRootCoords(GTK_WIDGET(webViewBase), x, y),
-        delta, wheelTicks, toWebKitWheelEventPhase(phase), toWebKitWheelEventPhase(momentumPhase)));
+        delta, wheelTicks, toWebKitWheelEventPhase(phase), toWebKitWheelEventPhase(momentumPhase), priv->wheelHasPreciseDeltas));
 }
 
+void webkitWebViewBaseSetWheelHasPreciseDeltas(WebKitWebViewBase* webViewBase, bool hasPreciseDeltas)
+{
+    webViewBase->priv->wheelHasPreciseDeltas = hasPreciseDeltas;
+}
+
 void webkitWebViewBaseMakeBlank(WebKitWebViewBase* webViewBase, bool makeBlank)
 {
     WebKitWebViewBasePrivate* priv = webViewBase->priv;

Modified: releases/WebKitGTK/webkit-2.34/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBaseInternal.h (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBaseInternal.h	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBaseInternal.h	2022-02-03 22:27:08 UTC (rev 289079)
@@ -45,3 +45,5 @@
 
 enum class WheelEventPhase { NoPhase, Began, Changed, Ended, Cancelled, MayBegin };
 WK_EXPORT void webkitWebViewBaseSynthesizeWheelEvent(WebKitWebViewBase*, double deltaX, double deltaY, int x, int y, WheelEventPhase, WheelEventPhase momentumPhase);
+WK_EXPORT void webkitWebViewBaseSetWheelHasPreciseDeltas(WebKitWebViewBase*, bool);
+

Modified: releases/WebKitGTK/webkit-2.34/Tools/ChangeLog (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Tools/ChangeLog	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Tools/ChangeLog	2022-02-03 22:27:08 UTC (rev 289079)
@@ -1,3 +1,24 @@
+2021-09-23  Chris Lord  <cl...@igalia.com>
+
+        [GTK] Allow sending precise mouse wheel events in LayoutTests
+        https://bugs.webkit.org/show_bug.cgi?id=230541
+
+        Reviewed by Tim Horton.
+
+        Add API to be able to send precise mouse-wheel events in EventSender.
+
+        * WebKitTestRunner/EventSenderProxy.h:
+        * WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl:
+        * WebKitTestRunner/InjectedBundle/EventSendingController.cpp:
+        (WTR::EventSendingController::setWheelHasPreciseDeltas):
+        * WebKitTestRunner/InjectedBundle/EventSendingController.h:
+        * WebKitTestRunner/TestController.cpp:
+        (WTR::TestController::didReceiveMessageFromInjectedBundle):
+        * WebKitTestRunner/gtk/EventSenderProxyGtk.cpp:
+        (WTR::toWebKitGLibAPI):
+        (WTR::EventSenderProxy::~EventSenderProxy):
+        (WTR::EventSenderProxy::setWheelHasPreciseDeltas):
+
 2021-11-30  Chris Dumez  <cdu...@apple.com>
 
         Scripting attributes are sometimes not properly stripped from elements when JS is disabled

Modified: releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/EventSenderProxy.h (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/EventSenderProxy.h	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/EventSenderProxy.h	2022-02-03 22:27:08 UTC (rev 289079)
@@ -62,6 +62,9 @@
     void mouseMoveTo(double x, double y, WKStringRef pointerType = nullptr);
     void mouseScrollBy(int x, int y);
     void mouseScrollByWithWheelAndMomentumPhases(int x, int y, int phase, int momentum);
+#if PLATFORM(GTK)
+    void setWheelHasPreciseDeltas(bool);
+#endif
     void continuousMouseScrollBy(int x, int y, bool paged);
 
     void leapForward(int milliseconds);

Modified: releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/Bindings/EventSendingController.idl	2022-02-03 22:27:08 UTC (rev 289079)
@@ -38,6 +38,7 @@
     undefined mouseForceChanged(double force);
     undefined mouseScrollBy(long x, long y);
     undefined mouseScrollByWithWheelAndMomentumPhases(long x, long y, DOMString phase, DOMString momentum);
+    undefined setWheelHasPreciseDeltas(boolean hasPreciseDeltas);
     undefined continuousMouseScrollBy(long x, long y, optional boolean paged);
     object contextClick();
     undefined scheduleAsynchronousClick();

Modified: releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.cpp	2022-02-03 22:27:08 UTC (rev 289079)
@@ -377,6 +377,14 @@
     postPageMessage("EventSender", body);
 }
 
+void EventSendingController::setWheelHasPreciseDeltas(bool hasPreciseDeltas)
+{
+    auto body = adoptWK(WKMutableDictionaryCreate());
+    setValue(body, "SubMessage", "SetWheelHasPreciseDeltas");
+    setValue(body, "HasPreciseDeltas", hasPreciseDeltas);
+    postPageMessage("EventSender", body);
+}
+
 void EventSendingController::continuousMouseScrollBy(int x, int y, bool paged)
 {
     auto body = adoptWK(WKMutableDictionaryCreate());

Modified: releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/InjectedBundle/EventSendingController.h	2022-02-03 22:27:08 UTC (rev 289079)
@@ -58,6 +58,7 @@
     void mouseForceChanged(double force);
     void mouseScrollBy(int x, int y);
     void mouseScrollByWithWheelAndMomentumPhases(int x, int y, JSStringRef phase, JSStringRef momentum);
+    void setWheelHasPreciseDeltas(bool);
     void continuousMouseScrollBy(int x, int y, bool paged);
     JSValueRef contextClick();
     void leapForward(int milliseconds);

Modified: releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/TestController.cpp (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/TestController.cpp	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/TestController.cpp	2022-02-03 22:27:08 UTC (rev 289079)
@@ -1654,6 +1654,14 @@
             return;
         }
 
+#if PLATFORM(GTK)
+        if (WKStringIsEqualToUTF8CString(subMessageName, "SetWheelHasPreciseDeltas")) {
+            auto hasPreciseDeltas = booleanValue(dictionary, "HasPreciseDeltas");
+            m_eventSenderProxy->setWheelHasPreciseDeltas(hasPreciseDeltas);
+            return;
+        }
+#endif
+
         ASSERT_NOT_REACHED();
     }
 

Modified: releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp (289078 => 289079)


--- releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp	2022-02-03 22:12:39 UTC (rev 289078)
+++ releases/WebKitGTK/webkit-2.34/Tools/WebKitTestRunner/gtk/EventSenderProxyGtk.cpp	2022-02-03 22:27:08 UTC (rev 289079)
@@ -70,8 +70,14 @@
 {
 }
 
+static inline WebKitWebViewBase* toWebKitGLibAPI(PlatformWKView view)
+{
+    return const_cast<WebKitWebViewBase*>(reinterpret_cast<const WebKitWebViewBase*>(view));
+}
+
 EventSenderProxy::~EventSenderProxy()
 {
+    webkitWebViewBaseSetWheelHasPreciseDeltas(toWebKitGLibAPI(m_testController->mainWebView()->platformView()), false);
 }
 
 static unsigned eventSenderButtonToGDKButton(unsigned button)
@@ -232,11 +238,6 @@
     return gdk_unicode_to_keyval(static_cast<guint32>(buffer.get()[0]));
 }
 
-static inline WebKitWebViewBase* toWebKitGLibAPI(PlatformWKView view)
-{
-    return const_cast<WebKitWebViewBase*>(reinterpret_cast<const WebKitWebViewBase*>(view));
-}
-
 void EventSenderProxy::keyDown(WKStringRef keyRef, WKEventModifiers wkModifiers, unsigned location)
 {
     guint modifiers = webkitModifiersToGDKModifiers(wkModifiers);
@@ -348,6 +349,11 @@
         horizontal, vertical, m_position.x, m_position.y, eventPhase, eventMomentumPhase);
 }
 
+void EventSenderProxy::setWheelHasPreciseDeltas(bool hasPreciseDeltas)
+{
+    webkitWebViewBaseSetWheelHasPreciseDeltas(toWebKitGLibAPI(m_testController->mainWebView()->platformView()), hasPreciseDeltas);
+}
+
 void EventSenderProxy::leapForward(int milliseconds)
 {
     m_time += milliseconds / 1000.0;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to