diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-25 13:35:59 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-06-25 13:35:59 +0200 |
commit | 79ad030d505ccf79cf10aa9f8189ca3e2f61f6f4 (patch) | |
tree | 0287b1a69d84492c901e8bc820e635e7133809a0 /Source/WebKit/chromium/src/WebPluginContainerImpl.cpp | |
parent | 682ab87480e7757346802ce7f54cfdbdfeb2339e (diff) | |
download | qtwebkit-79ad030d505ccf79cf10aa9f8189ca3e2f61f6f4.tar.gz |
Imported WebKit commit c4b613825abd39ac739a47d7b4410468fcef66dc (http://svn.webkit.org/repository/webkit/trunk@121147)
New snapshot that includes Win32 debug build fix (use SVGAllInOne)
Diffstat (limited to 'Source/WebKit/chromium/src/WebPluginContainerImpl.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/WebPluginContainerImpl.cpp | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp b/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp index e10e0ae81..040eb6384 100644 --- a/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp +++ b/Source/WebKit/chromium/src/WebPluginContainerImpl.cpp @@ -71,6 +71,7 @@ #include "ScrollAnimator.h" #include "ScrollView.h" #include "ScrollbarTheme.h" +#include "TouchEvent.h" #include "UserGestureIndicator.h" #include "WebPrintParams.h" #include "WheelEvent.h" @@ -185,6 +186,8 @@ void WebPluginContainerImpl::handleEvent(Event* event) handleWheelEvent(static_cast<WheelEvent*>(event)); else if (event->isKeyboardEvent()) handleKeyboardEvent(static_cast<KeyboardEvent*>(event)); + else if (eventNames().isTouchEventType(event->type())) + handleTouchEvent(static_cast<TouchEvent*>(event)); // FIXME: it would be cleaner if Widget::handleEvent returned true/false and // HTMLPluginElement called setDefaultHandled or defaultEventHandler. @@ -461,8 +464,8 @@ void WebPluginContainerImpl::setOpaque(bool opaque) bool WebPluginContainerImpl::isRectTopmost(const WebRect& rect) { - Page* page = m_element->document()->page(); - if (!page) + Frame* frame = m_element->document()->frame(); + if (!frame) return false; // hitTestResultAtPoint() takes a padding rectangle. @@ -471,14 +474,25 @@ bool WebPluginContainerImpl::isRectTopmost(const WebRect& rect) LayoutPoint center = documentRect.center(); // Make the rect we're checking (the point surrounded by padding rects) contained inside the requested rect. (Note that -1/2 is 0.) LayoutSize padding((documentRect.width() - 1) / 2, (documentRect.height() - 1) / 2); - HitTestResult result = - page->mainFrame()->eventHandler()->hitTestResultAtPoint(center, false, false, DontHitTestScrollbars, HitTestRequest::ReadOnly | HitTestRequest::Active, padding); + HitTestResult result = frame->eventHandler()->hitTestResultAtPoint(center, false, false, DontHitTestScrollbars, HitTestRequest::ReadOnly | HitTestRequest::Active, padding); const HitTestResult::NodeSet& nodes = result.rectBasedTestResult(); if (nodes.size() != 1) return false; return (nodes.first().get() == m_element); } +void WebPluginContainerImpl::setIsAcceptingTouchEvents(bool acceptingTouchEvents) +{ + if (m_isAcceptingTouchEvents == acceptingTouchEvents) + return; + m_isAcceptingTouchEvents = acceptingTouchEvents; + if (m_isAcceptingTouchEvents) { + m_element->document()->didAddTouchEventHandler(); + m_element->document()->addListenerType(Document::TOUCH_LISTENER); + } else + m_element->document()->didRemoveTouchEventHandler(); +} + void WebPluginContainerImpl::didReceiveResponse(const ResourceResponse& response) { // Make sure that the plugin receives window geometry before data, or else @@ -577,11 +591,15 @@ WebPluginContainerImpl::WebPluginContainerImpl(WebCore::HTMLPlugInElement* eleme , m_textureId(0) , m_ioSurfaceId(0) #endif + , m_isAcceptingTouchEvents(false) { } WebPluginContainerImpl::~WebPluginContainerImpl() { + if (m_isAcceptingTouchEvents) + m_element->document()->didRemoveTouchEventHandler(); + for (size_t i = 0; i < m_pluginLoadObservers.size(); ++i) m_pluginLoadObservers[i]->clearPluginContainer(); m_webPlugin->destroy(); @@ -683,6 +701,17 @@ void WebPluginContainerImpl::handleKeyboardEvent(KeyboardEvent* event) event->setDefaultHandled(); } +void WebPluginContainerImpl::handleTouchEvent(TouchEvent* event) +{ + WebTouchEventBuilder webEvent(this, *event); + if (webEvent.type == WebInputEvent::Undefined) + return; + WebCursorInfo cursorInfo; + if (m_webPlugin->handleInputEvent(webEvent, cursorInfo)) + event->setDefaultHandled(); + // FIXME: Can a plugin change the cursor from a touch-event callback? +} + void WebPluginContainerImpl::calculateGeometry(const IntRect& frameRect, IntRect& windowRect, IntRect& clipRect, |