diff options
Diffstat (limited to 'WebCore')
-rw-r--r-- | WebCore/dom/Document.cpp | 11 | ||||
-rw-r--r-- | WebCore/dom/Node.cpp | 12 | ||||
-rw-r--r-- | WebCore/history/CachedFrame.cpp | 14 | ||||
-rw-r--r-- | WebCore/loader/EmptyClients.h | 4 | ||||
-rw-r--r-- | WebCore/page/ChromeClient.h | 2 | ||||
-rw-r--r-- | WebCore/page/EventHandler.cpp | 8 |
6 files changed, 30 insertions, 21 deletions
diff --git a/WebCore/dom/Document.cpp b/WebCore/dom/Document.cpp index d031853..5bae60e 100644 --- a/WebCore/dom/Document.cpp +++ b/WebCore/dom/Document.cpp @@ -1487,6 +1487,17 @@ void Document::detach() FrameView* view = m_frame->view(); if (view) view->detachCustomScrollbars(); + +#if ENABLE(TOUCH_EVENTS) + Page* ownerPage = page(); + if (ownerPage && (m_frame == ownerPage->mainFrame())) { + // Inform the Chrome Client that it no longer needs to + // foward touch events to WebCore as the document is being + // destroyed. It may start again if a subsequent page + // registers a touch event listener. + ownerPage->chrome()->client()->needTouchEvents(false); + } +#endif } // indicate destruction mode, i.e. attached() but renderer == 0 diff --git a/WebCore/dom/Node.cpp b/WebCore/dom/Node.cpp index c2d5281..b48819a 100644 --- a/WebCore/dom/Node.cpp +++ b/WebCore/dom/Node.cpp @@ -2438,18 +2438,6 @@ bool Node::removeEventListener(const AtomicString& eventType, EventListener* lis updateSVGElementInstancesAfterEventListenerChange(this); -#if ENABLE(TOUCH_EVENTS) - if (Document* document = this->document()) { - if (document->page() - && (eventType == eventNames().touchstartEvent - || eventType == eventNames().touchmoveEvent - || eventType == eventNames().touchendEvent - || eventType == eventNames().touchcancelEvent)) - // Note the corresponding needTouchEvents(true) is called in Document::addListenerTypeIfNeeded(). - document->page()->chrome()->client()->needTouchEvents(false); - - } -#endif return true; } diff --git a/WebCore/history/CachedFrame.cpp b/WebCore/history/CachedFrame.cpp index a868134..7d69195 100644 --- a/WebCore/history/CachedFrame.cpp +++ b/WebCore/history/CachedFrame.cpp @@ -42,6 +42,11 @@ #include "SVGDocumentExtensions.h" #endif +#if ENABLE(TOUCH_EVENTS) +#include "ChromeClient.h" +#include "Page.h" +#endif + namespace WebCore { #ifndef NDEBUG @@ -104,6 +109,10 @@ void CachedFrameBase::restore() m_document->dispatchWindowLoadEvent(); #endif m_document->dispatchWindowEvent(PageTransitionEvent::create(eventNames().pageshowEvent, true), m_document); +#if ENABLE(TOUCH_EVENTS) + if (m_document->hasListenerType(Document::TOUCH_LISTENER)) + m_document->page()->chrome()->client()->needTouchEvents(true); +#endif } CachedFrame::CachedFrame(Frame* frame) @@ -146,6 +155,11 @@ CachedFrame::CachedFrame(Frame* frame) else LOG(PageCache, "Finished creating CachedFrame for child frame with url '%s' and DocumentLoader %p\n", m_url.string().utf8().data(), m_documentLoader.get()); #endif + +#if ENABLE(TOUCH_EVENTS) + if (m_document->hasListenerType(Document::TOUCH_LISTENER)) + m_document->page()->chrome()->client()->needTouchEvents(false); +#endif } void CachedFrame::open() diff --git a/WebCore/loader/EmptyClients.h b/WebCore/loader/EmptyClients.h index e4b9af5..e5385c5 100644 --- a/WebCore/loader/EmptyClients.h +++ b/WebCore/loader/EmptyClients.h @@ -169,6 +169,10 @@ public: virtual void setNeedsOneShotDrawingSynchronization() {}; virtual void scheduleCompositingLayerSync() {}; #endif + +#if ENABLE(TOUCH_EVENTS) + virtual void needTouchEvents(bool) { } +#endif }; class EmptyFrameLoaderClient : public FrameLoaderClient { diff --git a/WebCore/page/ChromeClient.h b/WebCore/page/ChromeClient.h index b28473b..d4af73b 100644 --- a/WebCore/page/ChromeClient.h +++ b/WebCore/page/ChromeClient.h @@ -226,7 +226,7 @@ namespace WebCore { #endif #if ENABLE(TOUCH_EVENTS) - virtual void needTouchEvents(bool, bool force = false) = 0; + virtual void needTouchEvents(bool) = 0; #endif protected: diff --git a/WebCore/page/EventHandler.cpp b/WebCore/page/EventHandler.cpp index 1d5941b..e4274c2 100644 --- a/WebCore/page/EventHandler.cpp +++ b/WebCore/page/EventHandler.cpp @@ -210,14 +210,6 @@ void EventHandler::clear() m_clickNode = 0; #if ENABLE(TOUCH_EVENTS) m_touchEventTarget = 0; - if (Document* doc = m_frame->document()) { - if (Page* page = doc->page()) { - // We are clearing event handlers, which includes any touch - // event handlers so force webkit to tell the chrome client to - // stop forwarding the events. - page->chrome()->client()->needTouchEvents(false, true); - } - } #endif m_frameSetBeingResized = 0; #if ENABLE(DRAG_SUPPORT) |