Title: [135613] trunk/Source/WebKit/blackberry
- Revision
- 135613
- Author
- commit-qu...@webkit.org
- Date
- 2012-11-23 08:11:39 -0800 (Fri, 23 Nov 2012)
Log Message
[BlackBerry] Drop Synchronous Mouse Events
https://bugs.webkit.org/show_bug.cgi?id=102980
Patch by Genevieve Mak <g...@rim.com> on 2012-11-23
Reviewed by Rob Buis.
Reviewed Internally by George Staikos and Mike Lattanzio.
Don't send actual Touch Events to fullscreen plugins unless
its a Touch Cancel, DoubleTap or TouchHold.
Instead send mouse events as long as its a single finger.
PR #242781
* Api/WebPage.cpp:
(BlackBerry::WebKit::WebPage::touchPointAsMouseEvent):
(BlackBerry::WebKit::WebPagePrivate::dispatchTouchEventToFullScreenPlugin):
(WebKit):
(BlackBerry::WebKit::WebPagePrivate::dispatchTouchPointAsMouseEventToFullScreenPlugin):
Modified Paths
Diff
Modified: trunk/Source/WebKit/blackberry/Api/WebPage.cpp (135612 => 135613)
--- trunk/Source/WebKit/blackberry/Api/WebPage.cpp 2012-11-23 15:36:37 UTC (rev 135612)
+++ trunk/Source/WebKit/blackberry/Api/WebPage.cpp 2012-11-23 16:11:39 UTC (rev 135613)
@@ -4048,72 +4048,13 @@
d->setScrollOriginPoint(documentScrollOrigin);
}
-bool WebPagePrivate::dispatchTouchEventToFullScreenPlugin(PluginView* plugin, const Platform::TouchEvent& event)
-{
- NPTouchEvent npTouchEvent;
-
- if (event.isDoubleTap())
- npTouchEvent.type = TOUCH_EVENT_DOUBLETAP;
- else if (event.isTouchHold())
- npTouchEvent.type = TOUCH_EVENT_TOUCHHOLD;
- else {
- switch (event.m_type) {
- case Platform::TouchEvent::TouchStart:
- npTouchEvent.type = TOUCH_EVENT_START;
- break;
- case Platform::TouchEvent::TouchEnd:
- npTouchEvent.type = TOUCH_EVENT_END;
- break;
- case Platform::TouchEvent::TouchMove:
- npTouchEvent.type = TOUCH_EVENT_MOVE;
- break;
- case Platform::TouchEvent::TouchCancel:
- npTouchEvent.type = TOUCH_EVENT_CANCEL;
- break;
- default:
- return false;
- }
- }
-
- npTouchEvent.points = 0;
- npTouchEvent.size = event.m_points.size();
- if (npTouchEvent.size) {
- npTouchEvent.points = new NPTouchPoint[npTouchEvent.size];
- for (int i = 0; i < npTouchEvent.size; i++) {
- npTouchEvent.points[i].touchId = event.m_points[i].m_id;
- npTouchEvent.points[i].clientX = event.m_points[i].m_screenPos.x();
- npTouchEvent.points[i].clientY = event.m_points[i].m_screenPos.y();
- npTouchEvent.points[i].screenX = event.m_points[i].m_screenPos.x();
- npTouchEvent.points[i].screenY = event.m_points[i].m_screenPos.y();
- npTouchEvent.points[i].pageX = event.m_points[i].m_pos.x();
- npTouchEvent.points[i].pageY = event.m_points[i].m_pos.y();
- }
- }
-
- NPEvent npEvent;
- npEvent.type = NP_TouchEvent;
- npEvent.data = ""
-
- bool handled = plugin->dispatchFullScreenNPEvent(npEvent);
-
- if (npTouchEvent.type == TOUCH_EVENT_DOUBLETAP && !handled) {
- // Send Touch Up if double tap not consumed.
- npTouchEvent.type = TOUCH_EVENT_END;
- npEvent.data = ""
- handled = plugin->dispatchFullScreenNPEvent(npEvent);
- }
- delete[] npTouchEvent.points;
- return handled;
-}
-
void WebPage::touchPointAsMouseEvent(const Platform::TouchPoint& point)
{
if (d->m_page->defersLoading())
return;
- PluginView* pluginView = d->m_fullScreenPluginView.get();
- if (pluginView)
- d->dispatchTouchPointAsMouseEventToFullScreenPlugin(pluginView, point);
+ if (d->m_fullScreenPluginView.get())
+ return;
d->m_lastUserEventTimestamp = currentTime();
@@ -4129,6 +4070,51 @@
d->m_touchEventHandler->playSoundIfAnchorIsTarget();
}
+bool WebPagePrivate::dispatchTouchEventToFullScreenPlugin(PluginView* plugin, const Platform::TouchEvent& event)
+{
+ // Always convert touch events to mouse events.
+ // Don't send actual touch events because no one has ever implemented them in flash.
+ if (!event.neverHadMultiTouch())
+ return false;
+
+ if (event.isDoubleTap() || event.isTouchHold() || event.m_type == Platform::TouchEvent::TouchCancel) {
+ NPTouchEvent npTouchEvent;
+
+ if (event.isDoubleTap())
+ npTouchEvent.type = TOUCH_EVENT_DOUBLETAP;
+ else if (event.isTouchHold())
+ npTouchEvent.type = TOUCH_EVENT_TOUCHHOLD;
+ else if (event.m_type == Platform::TouchEvent::TouchCancel)
+ npTouchEvent.type = TOUCH_EVENT_CANCEL;
+
+ npTouchEvent.points = 0;
+ npTouchEvent.size = event.m_points.size();
+ if (npTouchEvent.size) {
+ npTouchEvent.points = new NPTouchPoint[npTouchEvent.size];
+ for (int i = 0; i < npTouchEvent.size; i++) {
+ npTouchEvent.points[i].touchId = event.m_points[i].m_id;
+ npTouchEvent.points[i].clientX = event.m_points[i].m_screenPos.x();
+ npTouchEvent.points[i].clientY = event.m_points[i].m_screenPos.y();
+ npTouchEvent.points[i].screenX = event.m_points[i].m_screenPos.x();
+ npTouchEvent.points[i].screenY = event.m_points[i].m_screenPos.y();
+ npTouchEvent.points[i].pageX = event.m_points[i].m_pos.x();
+ npTouchEvent.points[i].pageY = event.m_points[i].m_pos.y();
+ }
+ }
+
+ NPEvent npEvent;
+ npEvent.type = NP_TouchEvent;
+ npEvent.data = ""
+
+ plugin->dispatchFullScreenNPEvent(npEvent);
+ delete[] npTouchEvent.points;
+ return true;
+ }
+
+ dispatchTouchPointAsMouseEventToFullScreenPlugin(plugin, event.m_points[0]);
+ return true;
+}
+
bool WebPagePrivate::dispatchTouchPointAsMouseEventToFullScreenPlugin(PluginView* pluginView, const Platform::TouchPoint& point)
{
NPEvent npEvent;
@@ -4145,7 +4131,7 @@
mouse.type = MOUSE_MOTION;
break;
case Platform::TouchPoint::TouchStationary:
- return false;
+ return true;
}
mouse.x = point.m_screenPos.x();
@@ -4155,7 +4141,8 @@
npEvent.type = NP_MouseEvent;
npEvent.data = ""
- return pluginView->dispatchFullScreenNPEvent(npEvent);
+ pluginView->dispatchFullScreenNPEvent(npEvent);
+ return true;
}
void WebPage::touchEventCancel()
Modified: trunk/Source/WebKit/blackberry/ChangeLog (135612 => 135613)
--- trunk/Source/WebKit/blackberry/ChangeLog 2012-11-23 15:36:37 UTC (rev 135612)
+++ trunk/Source/WebKit/blackberry/ChangeLog 2012-11-23 16:11:39 UTC (rev 135613)
@@ -1,3 +1,22 @@
+2012-11-23 Genevieve Mak <g...@rim.com>
+
+ [BlackBerry] Drop Synchronous Mouse Events
+ https://bugs.webkit.org/show_bug.cgi?id=102980
+
+ Reviewed by Rob Buis.
+
+ Reviewed Internally by George Staikos and Mike Lattanzio.
+ Don't send actual Touch Events to fullscreen plugins unless
+ its a Touch Cancel, DoubleTap or TouchHold.
+ Instead send mouse events as long as its a single finger.
+ PR #242781
+
+ * Api/WebPage.cpp:
+ (BlackBerry::WebKit::WebPage::touchPointAsMouseEvent):
+ (BlackBerry::WebKit::WebPagePrivate::dispatchTouchEventToFullScreenPlugin):
+ (WebKit):
+ (BlackBerry::WebKit::WebPagePrivate::dispatchTouchPointAsMouseEventToFullScreenPlugin):
+
2012-11-23 Andrew Lo <a...@rim.com>
[BlackBerry] InputHandler::ensureFocusTextElementVisible incorrectly used y coordinate as x coordinate
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-changes