From 3d0d3fdaa1308448b47592c03cda81c7f9e1f789 Mon Sep 17 00:00:00 2001 From: Grace Kloba Date: Tue, 8 Dec 2009 09:50:32 -0800 Subject: Enable longpress and doubletap to WebKit as touch event if it is requested. --- WebCore/plugins/android/PluginViewAndroid.cpp | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'WebCore/plugins/android/PluginViewAndroid.cpp') diff --git a/WebCore/plugins/android/PluginViewAndroid.cpp b/WebCore/plugins/android/PluginViewAndroid.cpp index 08ac7c8..4266a9a 100644 --- a/WebCore/plugins/android/PluginViewAndroid.cpp +++ b/WebCore/plugins/android/PluginViewAndroid.cpp @@ -183,6 +183,7 @@ void PluginView::handleTouchEvent(TouchEvent* event) ANPEvent evt; SkANP::InitEvent(&evt, kTouch_ANPEventType); + bool ignoreRet = false; const AtomicString& type = event->type(); if (eventNames().touchstartEvent == type) evt.data.touch.action = kDown_ANPTouchAction; @@ -192,7 +193,13 @@ void PluginView::handleTouchEvent(TouchEvent* event) evt.data.touch.action = kMove_ANPTouchAction; else if (eventNames().touchcancelEvent == type) evt.data.touch.action = kCancel_ANPTouchAction; - else + else if (eventNames().touchlongpressEvent == type) { + evt.data.touch.action = kLongPress_ANPTouchAction; + ignoreRet = true; + } else if (eventNames().touchdoubletapEvent == type) { + evt.data.touch.action = kDoubleTap_ANPTouchAction; + ignoreRet = true; + } else return; evt.data.touch.modifiers = 0; // todo @@ -203,14 +210,22 @@ void PluginView::handleTouchEvent(TouchEvent* event) evt.data.touch.x = event->pageX() - m_npWindow.x; evt.data.touch.y = event->pageY() - m_npWindow.y; - if (m_plugin->pluginFuncs()->event(m_instance, &evt)) { + int16 ret = m_plugin->pluginFuncs()->event(m_instance, &evt); + if (ignoreRet) + return; + if (ret & kHandleTouch_ANPTouchResult) { // The plugin needs focus to receive keyboard events if (evt.data.touch.action == kDown_ANPTouchAction) { if (Page* page = m_parentFrame->page()) page->focusController()->setFocusedFrame(m_parentFrame); m_parentFrame->document()->setFocusedNode(m_element); } - event->setDefaultPrevented(true); + event->preventDefault(); + } else { + if (ret & kHandleLongPress_ANPTouchResult) + event->preventLongPress(); + if (ret & kHandleDoubleTap_ANPTouchResult) + event->preventDoubleTap(); } } -- cgit v1.1