diff -r 6297cdf66332 -r d39add9822e2 webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp --- a/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp Mon Jan 18 21:20:18 2010 +0200 +++ b/webengine/osswebengine/WebKit/s60/plugins/PluginWin.cpp Tue Feb 02 00:56:45 2010 +0200 @@ -45,8 +45,11 @@ #include "WebPageScrollHandler.h" #include "WebKitLogger.h" +#include + using namespace WebCore; using namespace RT_GestureHelper; +using namespace stmGesture; // CONSTANTS const TInt KPluginGranularity = 3; _LIT(KPath,"c:\\system\\temp\\"); @@ -716,24 +719,74 @@ { CBrCtl* brCtl = control(m_pluginskin->frame()); WebView* view = brCtl->webView(); - TPointerEvent event(aEvent); - - if (!StaticObjectsContainer::instance()->isPluginFullscreen()) { - event.iPosition = aEvent.iPosition - view->PositionRelativeToScreen(); +#ifdef BRDO_MULTITOUCH_ENABLED_FF + if (aEvent.IsAdvancedPointerEvent()) { + TAdvancedPointerEvent tadvp = *(static_cast(&aEvent)); + if (!StaticObjectsContainer::instance()->isPluginFullscreen()) { + tadvp.iPosition = aEvent.iPosition - view->PositionRelativeToScreen(); + } + view->pointerEventHandler()->HandlePointerEventL(tadvp); } - view->pointerEventHandler()->HandlePointerEventL(event); + else { +#endif + TPointerEvent event(aEvent); + if (!StaticObjectsContainer::instance()->isPluginFullscreen()) { + event.iPosition = aEvent.iPosition - view->PositionRelativeToScreen(); + } + view->pointerEventHandler()->HandlePointerEventL(event); +#ifdef BRDO_MULTITOUCH_ENABLED_FF + } +#endif } -TBool PluginWin::HandleGesture(const TGestureEvent& aEvent) +TBool PluginWin::HandleGesture(const TStmGestureEvent& aEvent) { TBool ret = EFalse; + + TGestureEvent eventForPlugin; + switch(aEvent.Code()) + { + case EGestureUidUnknown : + eventForPlugin.SetCode(EGestureUnknown); + break; + case EGestureUidTouch : + eventForPlugin.SetCode(EGestureStart); + break; + case EGestureUidTap : + if(aEvent.Type() == ETapTypeSingle) + eventForPlugin.SetCode(EGestureTap); + else + eventForPlugin.SetCode(EGestureDoubleTap); + break; + case EGestureUidLongPress : + eventForPlugin.SetCode(EGestureLongTap); + break; + case EGestureUidPan : + eventForPlugin.SetCode(EGestureDrag); + break; + case EGestureUidRelease : + eventForPlugin.SetCode(EGestureReleased); + break; + case EGestureUidFlick : + eventForPlugin.SetCode(EGestureFlick); + break; + case EGestureUidPinch : + eventForPlugin.SetCode(EGesturePinch); + break; + default : + break; + + } + + + if (m_control) { - TGestureEvent gestEvent(aEvent); CBrCtl* brCtl = control(m_pluginskin->frame()); WebView* view = brCtl->webView(); TPoint newPos = aEvent.CurrentPos(); - TPoint startPos = aEvent.StartPos(); + // Not sure plugins need the start position of the gesture. Not inlcuded in the new struct + TPoint startPos = aEvent.CurrentPos(); TPoint viewPos = view->PositionRelativeToScreen(); TPoint ctrlPos = m_control->PositionRelativeToScreen(); @@ -741,35 +794,50 @@ // adjust the position to make it relative to top left corner of newPos += viewPos; startPos += viewPos; - gestEvent.SetCurrentPos(newPos); - gestEvent.SetStartPos(startPos); } - - if (StaticObjectsContainer::instance()->isPluginFullscreen() || + eventForPlugin.SetCurrentPos(newPos); + eventForPlugin.SetStartPos(startPos); + if (StaticObjectsContainer::instance()->isPluginFullscreen() || m_control->Rect().Contains(newPos - ctrlPos)) { NPEvent event; NPEventPointer ev; event.event = ENppEventPointer; - ev.reserved = &gestEvent; + ev.reserved = &eventForPlugin; ev.pointerEvent = NULL; event.param = &ev; ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), static_cast(&event)); + + if (eventForPlugin.Code(EAxisBoth) == EGestureTap) { + eventForPlugin.SetCode(EGestureReleased); + ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), + static_cast(&event)); + + } } } else if(!m_windowedPlugin && m_pluginskin->getNPPluginFucs() && m_pluginskin->getNPPluginFucs()->event){ TRect cliprect = m_pluginskin->getClipRect(); - TPoint newpos = aEvent.CurrentPos(); - if(cliprect.Contains(newpos)){ - TGestureEvent gestEvent(aEvent); + TPoint newPos = aEvent.CurrentPos(); + eventForPlugin.SetCurrentPos(newPos); + eventForPlugin.SetCurrentPos(newPos); + + if(cliprect.Contains(newPos)){ NPEvent event; NPEventPointer ev; event.event = ENppEventPointer; - ev.reserved = &gestEvent; + ev.reserved = &eventForPlugin; ev.pointerEvent = NULL; event.param = &ev; ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), static_cast(&event)); + + if (eventForPlugin.Code(EAxisBoth) == EGestureTap) { + eventForPlugin.SetCode(EGestureReleased); + ret = m_pluginskin->getNPPluginFucs()->event(m_pluginskin->getNPP(), + static_cast(&event)); + + } } } return ret;