Skip to content

Commit 6b44e4b

Browse files
committed
REGRESSION(r227544): [GTK] contextMenuEvent is NULL on CONTEXT_MENU call
https://bugs.webkit.org/show_bug.cgi?id=182224 Reviewed by Michael Catanzaro. Move the gestures handling to WebKitWebViewBase. This patch adds GestureControllerClient class, created and implemented by WebKitWebViewBase and used by GestureController instead of the WebPageProxy. This way we ensure events are handled consistently. * UIProcess/API/gtk/PageClientImpl.cpp: (WebKit::PageClientImpl::doneWithTouchEvent): Cast the GdkEvent since GestureController no longer works wirth const GdkEvents. (WebKit::PageClientImpl::zoom): Use webkit_web_view_set_zoom_level() in case of WebKitWebView or WebPageProxy::setPageZoomFactor() otherwise. * UIProcess/API/gtk/PageClientImpl.h: * UIProcess/API/gtk/WebKitWebViewBase.cpp: (ClickCounter::currentClickCountForGdkButtonEvent): Receive a GdkEvent to avoid casts. (webkitWebViewBaseHandleMouseEvent): Helper function to handle mouse events. (webkitWebViewBaseButtonPressEvent): Use webkitWebViewBaseHandleMouseEvent. (webkitWebViewBaseButtonReleaseEvent): Ditto. (webkitWebViewBaseHandleWheelEvent): Helper function to handle wheel events. (webkitWebViewBaseScrollEvent): Use webkitWebViewBaseHandleWheelEvent. (webkitWebViewBaseMotionNotifyEvent): Use webkitWebViewBaseHandleMouseEvent. (webkitWebViewBaseCrossingNotifyEvent): Ditto. (webkitWebViewBaseGestureController): Pass the widget and client to GestureController. * UIProcess/gtk/GestureController.cpp: (WebKit::GestureController::GestureController): Receives a widget and client now. (WebKit::GestureController::handleEvent): Remove the const. (WebKit::GestureController::Gesture::Gesture): Initialize client. (WebKit::GestureController::Gesture::handleEvent): Remove the const. (WebKit::GestureController::DragGesture::startDrag): Use the client instead of WebPageProxy. (WebKit::GestureController::DragGesture::handleDrag): Ditto. (WebKit::GestureController::DragGesture::handleTap): Ditto. (WebKit::GestureController::DragGesture::begin): Ignore the const returned by gtk_gesture_get_last_event(). (WebKit::GestureController::DragGesture::update): Ditto. (WebKit::GestureController::DragGesture::end): Ditto. (WebKit::GestureController::DragGesture::DragGesture): Receives a widget and client now. (WebKit::GestureController::SwipeGesture::startMomentumScroll): Use the client instead of WebPageProxy. (WebKit::GestureController::SwipeGesture::swipe): Ignore the const returned by gtk_gesture_get_last_event(). (WebKit::GestureController::SwipeGesture::SwipeGesture): Receives a widget and client now. (WebKit::GestureController::ZoomGesture::begin): Start the zoom. (WebKit::GestureController::ZoomGesture::startZoom): Use the client instead of WebPageProxy. (WebKit::GestureController::ZoomGesture::handleZoom): Ditto. (WebKit::GestureController::ZoomGesture::ZoomGesture): Receives a widget and client now. (WebKit::GestureController::LongPressGesture::longPressed): Use the client instead of WebKitWebView. (WebKit::GestureController::LongPressGesture::pressed): Ignore the const returned by gtk_gesture_get_last_event(). (WebKit::GestureController::LongPressGesture::LongPressGesture): Receives a widget and client now. (WebKit::GestureController::Gesture::simulateMouseClick): Deleted. (WebKit::createScrollEvent): Deleted. * UIProcess/gtk/GestureController.h: Canonical link: https://commits.webkit.org/198131@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@227893 268f45cc-cd09-0410-ab3c-d52691b4dbfc
1 parent e4c1bf9 commit 6b44e4b

6 files changed

Lines changed: 308 additions & 149 deletions

File tree

Source/WebKit/ChangeLog

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,56 @@
1+
2018-01-31 Carlos Garcia Campos <cgarcia@igalia.com>
2+
3+
REGRESSION(r227544): [GTK] contextMenuEvent is NULL on CONTEXT_MENU call
4+
https://bugs.webkit.org/show_bug.cgi?id=182224
5+
6+
Reviewed by Michael Catanzaro.
7+
8+
Move the gestures handling to WebKitWebViewBase. This patch adds GestureControllerClient class, created and
9+
implemented by WebKitWebViewBase and used by GestureController instead of the WebPageProxy. This way we ensure
10+
events are handled consistently.
11+
12+
* UIProcess/API/gtk/PageClientImpl.cpp:
13+
(WebKit::PageClientImpl::doneWithTouchEvent): Cast the GdkEvent since GestureController no longer works wirth
14+
const GdkEvents.
15+
(WebKit::PageClientImpl::zoom): Use webkit_web_view_set_zoom_level() in case of WebKitWebView or
16+
WebPageProxy::setPageZoomFactor() otherwise.
17+
* UIProcess/API/gtk/PageClientImpl.h:
18+
* UIProcess/API/gtk/WebKitWebViewBase.cpp:
19+
(ClickCounter::currentClickCountForGdkButtonEvent): Receive a GdkEvent to avoid casts.
20+
(webkitWebViewBaseHandleMouseEvent): Helper function to handle mouse events.
21+
(webkitWebViewBaseButtonPressEvent): Use webkitWebViewBaseHandleMouseEvent.
22+
(webkitWebViewBaseButtonReleaseEvent): Ditto.
23+
(webkitWebViewBaseHandleWheelEvent): Helper function to handle wheel events.
24+
(webkitWebViewBaseScrollEvent): Use webkitWebViewBaseHandleWheelEvent.
25+
(webkitWebViewBaseMotionNotifyEvent): Use webkitWebViewBaseHandleMouseEvent.
26+
(webkitWebViewBaseCrossingNotifyEvent): Ditto.
27+
(webkitWebViewBaseGestureController): Pass the widget and client to GestureController.
28+
* UIProcess/gtk/GestureController.cpp:
29+
(WebKit::GestureController::GestureController): Receives a widget and client now.
30+
(WebKit::GestureController::handleEvent): Remove the const.
31+
(WebKit::GestureController::Gesture::Gesture): Initialize client.
32+
(WebKit::GestureController::Gesture::handleEvent): Remove the const.
33+
(WebKit::GestureController::DragGesture::startDrag): Use the client instead of WebPageProxy.
34+
(WebKit::GestureController::DragGesture::handleDrag): Ditto.
35+
(WebKit::GestureController::DragGesture::handleTap): Ditto.
36+
(WebKit::GestureController::DragGesture::begin): Ignore the const returned by gtk_gesture_get_last_event().
37+
(WebKit::GestureController::DragGesture::update): Ditto.
38+
(WebKit::GestureController::DragGesture::end): Ditto.
39+
(WebKit::GestureController::DragGesture::DragGesture): Receives a widget and client now.
40+
(WebKit::GestureController::SwipeGesture::startMomentumScroll): Use the client instead of WebPageProxy.
41+
(WebKit::GestureController::SwipeGesture::swipe): Ignore the const returned by gtk_gesture_get_last_event().
42+
(WebKit::GestureController::SwipeGesture::SwipeGesture): Receives a widget and client now.
43+
(WebKit::GestureController::ZoomGesture::begin): Start the zoom.
44+
(WebKit::GestureController::ZoomGesture::startZoom): Use the client instead of WebPageProxy.
45+
(WebKit::GestureController::ZoomGesture::handleZoom): Ditto.
46+
(WebKit::GestureController::ZoomGesture::ZoomGesture): Receives a widget and client now.
47+
(WebKit::GestureController::LongPressGesture::longPressed): Use the client instead of WebKitWebView.
48+
(WebKit::GestureController::LongPressGesture::pressed): Ignore the const returned by gtk_gesture_get_last_event().
49+
(WebKit::GestureController::LongPressGesture::LongPressGesture): Receives a widget and client now.
50+
(WebKit::GestureController::Gesture::simulateMouseClick): Deleted.
51+
(WebKit::createScrollEvent): Deleted.
52+
* UIProcess/gtk/GestureController.h:
53+
154
2018-01-31 Carlos Garcia Campos <cgarcia@igalia.com>
255

356
Web Automation: cookies returned by automation should have expiry time in seconds

Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -351,7 +351,7 @@ void PageClientImpl::doneWithTouchEvent(const NativeWebTouchEvent& event, bool w
351351
gestureController.reset();
352352
return;
353353
}
354-
wasEventHandled = gestureController.handleEvent(event.nativeEvent());
354+
wasEventHandled = gestureController.handleEvent(const_cast<GdkEvent*>(event.nativeEvent()));
355355
#endif
356356

357357
if (wasEventHandled)
@@ -482,4 +482,14 @@ JSGlobalContextRef PageClientImpl::javascriptGlobalContext()
482482
return webkit_web_view_get_javascript_global_context(WEBKIT_WEB_VIEW(m_viewWidget));
483483
}
484484

485+
void PageClientImpl::zoom(double zoomLevel)
486+
{
487+
if (WEBKIT_IS_WEB_VIEW(m_viewWidget)) {
488+
webkit_web_view_set_zoom_level(WEBKIT_WEB_VIEW(m_viewWidget), zoomLevel);
489+
return;
490+
}
491+
492+
webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(m_viewWidget))->setPageZoomFactor(zoomLevel);
493+
}
494+
485495
} // namespace WebKit

Source/WebKit/UIProcess/API/gtk/PageClientImpl.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@ class PageClientImpl : public PageClient
5151

5252
GtkWidget* viewWidget() { return m_viewWidget; }
5353

54+
void zoom(double);
55+
5456
private:
5557
// PageClient
5658
std::unique_ptr<DrawingAreaProxy> createDrawingAreaProxy() override;

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

Lines changed: 162 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -95,9 +95,8 @@ struct ClickCounter {
9595
previousClickButton = 0;
9696
}
9797

98-
int currentClickCountForGdkButtonEvent(GdkEventButton* buttonEvent)
98+
int currentClickCountForGdkButtonEvent(GdkEvent* event)
9999
{
100-
GdkEvent* event = reinterpret_cast<GdkEvent*>(buttonEvent);
101100
int doubleClickDistance = 250;
102101
int doubleClickTime = 5;
103102
g_object_get(gtk_settings_get_for_screen(gdk_event_get_screen(event)),
@@ -118,18 +117,18 @@ struct ClickCounter {
118117
}
119118

120119
if ((event->type == GDK_2BUTTON_PRESS || event->type == GDK_3BUTTON_PRESS)
121-
|| ((std::abs(buttonEvent->x - previousClickPoint.x()) < doubleClickDistance)
122-
&& (std::abs(buttonEvent->y - previousClickPoint.y()) < doubleClickDistance)
120+
|| ((std::abs(event->button.x - previousClickPoint.x()) < doubleClickDistance)
121+
&& (std::abs(event->button.y - previousClickPoint.y()) < doubleClickDistance)
123122
&& (eventTime - previousClickTime < static_cast<unsigned>(doubleClickTime))
124-
&& (buttonEvent->button == previousClickButton)))
123+
&& (event->button.button == previousClickButton)))
125124
currentClickCount++;
126125
else
127126
currentClickCount = 1;
128127

129128
double x, y;
130129
gdk_event_get_coords(event, &x, &y);
131130
previousClickPoint = IntPoint(x, y);
132-
previousClickButton = buttonEvent->button;
131+
previousClickButton = event->button.button;
133132
previousClickTime = eventTime;
134133

135134
return currentClickCount;
@@ -741,33 +740,59 @@ static gboolean webkitWebViewBaseKeyReleaseEvent(GtkWidget* widget, GdkEventKey*
741740
return GDK_EVENT_STOP;
742741
}
743742

744-
static gboolean webkitWebViewBaseButtonPressEvent(GtkWidget* widget, GdkEventButton* buttonEvent)
743+
static void webkitWebViewBaseHandleMouseEvent(WebKitWebViewBase* webViewBase, GdkEvent* event)
745744
{
746-
WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget);
747745
WebKitWebViewBasePrivate* priv = webViewBase->priv;
746+
ASSERT(!priv->authenticationDialog);
747+
748+
int clickCount = 0;
749+
750+
switch (event->type) {
751+
case GDK_BUTTON_PRESS:
752+
case GDK_2BUTTON_PRESS:
753+
case GDK_3BUTTON_PRESS: {
754+
// For double and triple clicks GDK sends both a normal button press event
755+
// and a specific type (like GDK_2BUTTON_PRESS). If we detect a special press
756+
// coming up, ignore this event as it certainly generated the double or triple
757+
// click. The consequence of not eating this event is two DOM button press events
758+
// are generated.
759+
GUniquePtr<GdkEvent> nextEvent(gdk_event_peek());
760+
if (nextEvent && (nextEvent->any.type == GDK_2BUTTON_PRESS || nextEvent->any.type == GDK_3BUTTON_PRESS))
761+
return;
748762

749-
if (priv->authenticationDialog)
750-
return GDK_EVENT_STOP;
763+
priv->inputMethodFilter.notifyMouseButtonPress();
751764

752-
gtk_widget_grab_focus(widget);
765+
// If it's a right click event save it as a possible context menu event.
766+
if (event->button.button == GDK_BUTTON_SECONDARY)
767+
priv->contextMenuEvent.reset(gdk_event_copy(event));
753768

754-
priv->inputMethodFilter.notifyMouseButtonPress();
769+
clickCount = priv->clickCounter.currentClickCountForGdkButtonEvent(event);
770+
}
771+
FALLTHROUGH;
772+
case GDK_BUTTON_RELEASE:
773+
gtk_widget_grab_focus(GTK_WIDGET(webViewBase));
774+
break;
775+
case GDK_MOTION_NOTIFY:
776+
case GDK_ENTER_NOTIFY:
777+
case GDK_LEAVE_NOTIFY:
778+
break;
779+
default:
780+
ASSERT_NOT_REACHED();
781+
}
782+
783+
priv->pageProxy->handleMouseEvent(NativeWebMouseEvent(event, clickCount));
784+
}
785+
786+
static gboolean webkitWebViewBaseButtonPressEvent(GtkWidget* widget, GdkEventButton* event)
787+
{
788+
WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget);
789+
WebKitWebViewBasePrivate* priv = webViewBase->priv;
755790

756-
// For double and triple clicks GDK sends both a normal button press event
757-
// and a specific type (like GDK_2BUTTON_PRESS). If we detect a special press
758-
// coming up, ignore this event as it certainly generated the double or triple
759-
// click. The consequence of not eating this event is two DOM button press events
760-
// are generated.
761-
GUniquePtr<GdkEvent> nextEvent(gdk_event_peek());
762-
if (nextEvent && (nextEvent->any.type == GDK_2BUTTON_PRESS || nextEvent->any.type == GDK_3BUTTON_PRESS))
791+
if (priv->authenticationDialog)
763792
return GDK_EVENT_STOP;
764793

765-
// If it's a right click event save it as a possible context menu event.
766-
if (buttonEvent->button == 3)
767-
priv->contextMenuEvent.reset(gdk_event_copy(reinterpret_cast<GdkEvent*>(buttonEvent)));
794+
webkitWebViewBaseHandleMouseEvent(webViewBase, reinterpret_cast<GdkEvent*>(event));
768795

769-
priv->pageProxy->handleMouseEvent(NativeWebMouseEvent(reinterpret_cast<GdkEvent*>(buttonEvent),
770-
priv->clickCounter.currentClickCountForGdkButtonEvent(buttonEvent)));
771796
return GDK_EVENT_STOP;
772797
}
773798

@@ -779,12 +804,21 @@ static gboolean webkitWebViewBaseButtonReleaseEvent(GtkWidget* widget, GdkEventB
779804
if (priv->authenticationDialog)
780805
return GDK_EVENT_STOP;
781806

782-
gtk_widget_grab_focus(widget);
783-
priv->pageProxy->handleMouseEvent(NativeWebMouseEvent(reinterpret_cast<GdkEvent*>(event), 0 /* currentClickCount */));
807+
webkitWebViewBaseHandleMouseEvent(webViewBase, reinterpret_cast<GdkEvent*>(event));
784808

785809
return GDK_EVENT_STOP;
786810
}
787811

812+
static void webkitWebViewBaseHandleWheelEvent(WebKitWebViewBase* webViewBase, GdkEvent* event, std::optional<WebWheelEvent::Phase> phase = std::nullopt, std::optional<WebWheelEvent::Phase> momentum = std::nullopt)
813+
{
814+
WebKitWebViewBasePrivate* priv = webViewBase->priv;
815+
ASSERT(!priv->authenticationDialog);
816+
if (phase)
817+
priv->pageProxy->handleWheelEvent(NativeWebWheelEvent(event, phase.value(), momentum.value_or(WebWheelEvent::Phase::PhaseNone)));
818+
else
819+
priv->pageProxy->handleWheelEvent(NativeWebWheelEvent(event));
820+
}
821+
788822
static gboolean webkitWebViewBaseScrollEvent(GtkWidget* widget, GdkEventScroll* event)
789823
{
790824
WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(widget);
@@ -796,7 +830,7 @@ static gboolean webkitWebViewBaseScrollEvent(GtkWidget* widget, GdkEventScroll*
796830
if (priv->authenticationDialog)
797831
return GDK_EVENT_PROPAGATE;
798832

799-
priv->pageProxy->handleWheelEvent(NativeWebWheelEvent(reinterpret_cast<GdkEvent*>(event)));
833+
webkitWebViewBaseHandleWheelEvent(webViewBase, reinterpret_cast<GdkEvent*>(event));
800834

801835
return GDK_EVENT_STOP;
802836
}
@@ -825,7 +859,7 @@ static gboolean webkitWebViewBaseMotionNotifyEvent(GtkWidget* widget, GdkEventMo
825859
return widgetClass->motion_notify_event ? widgetClass->motion_notify_event(widget, event) : GDK_EVENT_PROPAGATE;
826860
}
827861

828-
priv->pageProxy->handleMouseEvent(NativeWebMouseEvent(reinterpret_cast<GdkEvent*>(event), 0 /* currentClickCount */));
862+
webkitWebViewBaseHandleMouseEvent(webViewBase, reinterpret_cast<GdkEvent*>(event));
829863

830864
return GDK_EVENT_PROPAGATE;
831865
}
@@ -866,7 +900,7 @@ static gboolean webkitWebViewBaseCrossingNotifyEvent(GtkWidget* widget, GdkEvent
866900
copiedEvent->crossing.y = y;
867901
}
868902

869-
priv->pageProxy->handleMouseEvent(NativeWebMouseEvent(copiedEvent ? copiedEvent.get() : event, 0 /* currentClickCount */));
903+
webkitWebViewBaseHandleMouseEvent(webViewBase, copiedEvent ? copiedEvent.get() : event);
870904

871905
return GDK_EVENT_PROPAGATE;
872906
}
@@ -960,11 +994,109 @@ static gboolean webkitWebViewBaseTouchEvent(GtkWidget* widget, GdkEventTouch* ev
960994
#endif // ENABLE(TOUCH_EVENTS)
961995

962996
#if HAVE(GTK_GESTURES)
997+
class ViewGestureController final : public GestureControllerClient {
998+
WTF_MAKE_FAST_ALLOCATED;
999+
1000+
public:
1001+
explicit ViewGestureController(WebKitWebViewBase* webViewBase)
1002+
: m_webView(webViewBase)
1003+
{
1004+
}
1005+
1006+
private:
1007+
static GUniquePtr<GdkEvent> createScrollEvent(GdkEventTouch* event, const FloatPoint& point, const FloatPoint& delta, bool isStop = false)
1008+
{
1009+
GUniquePtr<GdkEvent> scrollEvent(gdk_event_new(GDK_SCROLL));
1010+
scrollEvent->scroll.time = event->time;
1011+
scrollEvent->scroll.x = point.x();
1012+
scrollEvent->scroll.y = point.y();
1013+
scrollEvent->scroll.x_root = event->x_root;
1014+
scrollEvent->scroll.y_root = event->y_root;
1015+
scrollEvent->scroll.direction = GDK_SCROLL_SMOOTH;
1016+
scrollEvent->scroll.delta_x = delta.x();
1017+
scrollEvent->scroll.delta_y = delta.y();
1018+
scrollEvent->scroll.state = event->state;
1019+
#if GTK_CHECK_VERSION(3, 20, 0)
1020+
scrollEvent->scroll.is_stop = isStop;
1021+
#else
1022+
UNUSED_PARAM(isStop);
1023+
#endif
1024+
return scrollEvent;
1025+
}
1026+
1027+
void simulateMouseClick(const GdkEventTouch* event, unsigned button)
1028+
{
1029+
GUniquePtr<GdkEvent> pointerEvent(gdk_event_new(GDK_MOTION_NOTIFY));
1030+
pointerEvent->motion.time = event->time;
1031+
pointerEvent->motion.x = event->x;
1032+
pointerEvent->motion.y = event->y;
1033+
pointerEvent->motion.x_root = event->x_root;
1034+
pointerEvent->motion.y_root = event->y_root;
1035+
pointerEvent->motion.state = event->state;
1036+
webkitWebViewBaseHandleMouseEvent(m_webView, pointerEvent.get());
1037+
1038+
pointerEvent.reset(gdk_event_new(GDK_BUTTON_PRESS));
1039+
pointerEvent->button.button = button;
1040+
pointerEvent->button.time = event->time;
1041+
pointerEvent->button.x = event->x;
1042+
pointerEvent->button.y = event->y;
1043+
pointerEvent->button.x_root = event->x_root;
1044+
pointerEvent->button.y_root = event->y_root;
1045+
webkitWebViewBaseHandleMouseEvent(m_webView, pointerEvent.get());
1046+
1047+
pointerEvent->type = GDK_BUTTON_RELEASE;
1048+
webkitWebViewBaseHandleMouseEvent(m_webView, pointerEvent.get());
1049+
}
1050+
1051+
void tap(GdkEventTouch* event) final
1052+
{
1053+
simulateMouseClick(event, GDK_BUTTON_PRIMARY);
1054+
}
1055+
1056+
void startDrag(GdkEventTouch* event, const FloatPoint& startPoint) final
1057+
{
1058+
GUniquePtr<GdkEvent> scrollEvent = createScrollEvent(event, startPoint, { });
1059+
webkitWebViewBaseHandleWheelEvent(m_webView, scrollEvent.get(), WebWheelEvent::Phase::PhaseBegan);
1060+
}
1061+
1062+
void drag(GdkEventTouch* event, const FloatPoint& point, const FloatPoint& delta) final
1063+
{
1064+
GUniquePtr<GdkEvent> scrollEvent = createScrollEvent(event, point, delta);
1065+
webkitWebViewBaseHandleWheelEvent(m_webView, scrollEvent.get(), WebWheelEvent::Phase::PhaseChanged);
1066+
}
1067+
1068+
void swipe(GdkEventTouch* event, const FloatPoint& velocity) final
1069+
{
1070+
GUniquePtr<GdkEvent> scrollEvent = createScrollEvent(event, FloatPoint::narrowPrecision(event->x, event->y), velocity, true);
1071+
webkitWebViewBaseHandleWheelEvent(m_webView, scrollEvent.get(), WebWheelEvent::Phase::PhaseNone, WebWheelEvent::Phase::PhaseBegan);
1072+
}
1073+
1074+
void startZoom(const IntPoint& center, double& initialScale, IntPoint& initialPoint) final
1075+
{
1076+
auto* page = webkitWebViewBaseGetPage(m_webView);
1077+
ASSERT(page);
1078+
initialScale = page->pageZoomFactor();
1079+
page->getCenterForZoomGesture(center, initialPoint);
1080+
}
1081+
1082+
void zoom(double scale) final
1083+
{
1084+
m_webView->priv->pageClient->zoom(scale);
1085+
}
1086+
1087+
void longPress(GdkEventTouch* event) final
1088+
{
1089+
simulateMouseClick(event, GDK_BUTTON_SECONDARY);
1090+
}
1091+
1092+
WebKitWebViewBase* m_webView;
1093+
};
1094+
9631095
GestureController& webkitWebViewBaseGestureController(WebKitWebViewBase* webViewBase)
9641096
{
9651097
WebKitWebViewBasePrivate* priv = webViewBase->priv;
9661098
if (!priv->gestureController)
967-
priv->gestureController = std::make_unique<GestureController>(*priv->pageProxy);
1099+
priv->gestureController = std::make_unique<GestureController>(GTK_WIDGET(webViewBase), std::make_unique<ViewGestureController>(webViewBase));
9681100
return *priv->gestureController;
9691101
}
9701102
#endif

0 commit comments

Comments
 (0)