summaryrefslogtreecommitdiffstats
path: root/WebCore
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore')
-rw-r--r--WebCore/dom/Document.cpp11
-rw-r--r--WebCore/dom/Node.cpp12
-rw-r--r--WebCore/history/CachedFrame.cpp14
-rw-r--r--WebCore/loader/EmptyClients.h4
-rw-r--r--WebCore/page/ChromeClient.h2
-rw-r--r--WebCore/page/EventHandler.cpp8
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)