Changeset 222855 in webkit
- Timestamp:
- Oct 4, 2017 10:33:27 AM (6 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r222846 r222855 1 2017-10-04 Adrian Perez de Castro <aperez@igalia.com> 2 3 [GTK] WebKit2GTK+ does not handle touchmove and touchend events correctly 4 https://bugs.webkit.org/show_bug.cgi?id=158531 5 6 Reviewed by Carlos Alberto Lopez Perez. 7 8 Do not bypass WebCore event handling when receiving touch events. 9 10 Based on a patch by Andre Moreira Magalhaes <andre.magalhaes@collabora.co.uk>. 11 Thanks to Carlos Garnacho <carlosg@gnome.org> for helping out reviewing the code. 12 13 * UIProcess/API/gtk/PageClientImpl.cpp: 14 (WebKit::PageClientImpl::doneWithTouchEvent): Make sure touchend reaches gesture controller if touchbegin evet got to it. 15 * UIProcess/API/gtk/WebKitWebViewBase.cpp: 16 (webkitWebViewBaseTouchEvent): Do not invoke gesture controller directly by bypassing WebCore event handling. 17 * UIProcess/gtk/GestureController.cpp: 18 (WebKit::GestureController::reset): Added. 19 (WebKit::GestureController::handleEvent): Reset gesture controller when touchpadupdate/end is received without touchbegin. 20 (WebKit::GestureController::Gesture::reset): Added. 21 * UIProcess/gtk/GestureController.h: 22 1 23 2017-10-04 Michael Catanzaro <mcatanzaro@igalia.com> 2 24 -
trunk/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp
r218740 r222855 343 343 void PageClientImpl::doneWithTouchEvent(const NativeWebTouchEvent& event, bool wasEventHandled) 344 344 { 345 if (wasEventHandled) 346 return; 345 const GdkEvent* touchEvent = event.nativeEvent(); 347 346 348 347 #if HAVE(GTK_GESTURES) 349 348 GestureController& gestureController = webkitWebViewBaseGestureController(WEBKIT_WEB_VIEW_BASE(m_viewWidget)); 350 if (gestureController.handleEvent(event.nativeEvent())) 351 return; 349 if (wasEventHandled) { 350 gestureController.reset(); 351 return; 352 } 353 wasEventHandled = gestureController.handleEvent(event.nativeEvent()); 352 354 #endif 353 355 356 if (wasEventHandled) 357 return; 358 354 359 // Emulate pointer events if unhandled. 355 const GdkEvent* touchEvent = event.nativeEvent();356 357 360 if (!touchEvent->touch.emulating_pointer) 358 361 return; -
trunk/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp
r218332 r222855 928 928 uint32_t sequence = GPOINTER_TO_UINT(gdk_event_get_event_sequence(touchEvent)); 929 929 930 #if HAVE(GTK_GESTURES)931 GestureController& gestureController = webkitWebViewBaseGestureController(webViewBase);932 if (gestureController.isProcessingGestures()) {933 // If we are already processing gestures is because the WebProcess didn't handle the934 // BEGIN touch event, so pass subsequent events to the GestureController.935 gestureController.handleEvent(touchEvent);936 // Remove the gesture event sequence from the handled touch events937 // list to avoid the gesure sequence and a touch sequence of same938 // ID to conflict.939 priv->touchEvents.remove(sequence);940 return TRUE;941 }942 #endif943 944 930 switch (touchEvent->type) { 945 931 case GDK_TOUCH_BEGIN: { -
trunk/Source/WebKit/UIProcess/gtk/GestureController.cpp
r217971 r222855 68 68 } 69 69 70 void GestureController::Gesture::reset() 71 { 72 gtk_event_controller_reset(GTK_EVENT_CONTROLLER(m_gesture.get())); 73 } 74 70 75 bool GestureController::Gesture::isActive() const 71 76 { -
trunk/Source/WebKit/UIProcess/gtk/GestureController.h
r217971 r222855 50 50 bool handleEvent(const GdkEvent*); 51 51 52 void reset() 53 { 54 m_dragGesture.reset(); 55 m_swipeGesture.reset(); 56 m_zoomGesture.reset(); 57 } 58 52 59 private: 53 60 class Gesture { 54 61 public: 62 void reset(); 55 63 bool isActive() const; 56 64 void handleEvent(const GdkEvent*);
Note: See TracChangeset
for help on using the changeset viewer.