| Index: Source/WebCore/dom/Document.cpp
|
| ===================================================================
|
| --- Source/WebCore/dom/Document.cpp (revision 138019)
|
| +++ Source/WebCore/dom/Document.cpp (working copy)
|
| @@ -498,6 +498,9 @@
|
| , m_writeRecursionIsTooDeep(false)
|
| , m_writeRecursionDepth(0)
|
| , m_wheelEventHandlerCount(0)
|
| +#if ENABLE(TOUCH_EVENTS)
|
| + , m_touchEventHandlerCount(0)
|
| +#endif
|
| , m_pendingTasksTimer(this, &Document::pendingTasksTimerFired)
|
| , m_scheduledTasksAreSuspended(false)
|
| , m_visualUpdatesAllowed(true)
|
| @@ -610,10 +613,6 @@
|
| ASSERT(!m_parentTreeScope);
|
| ASSERT(!m_guardRefCount);
|
|
|
| -#if ENABLE(TOUCH_EVENT_TRACKING)
|
| - if (Document* ownerDocument = this->ownerDocument())
|
| - ownerDocument->didRemoveEventTargetNode(this);
|
| -#endif
|
| // FIXME: Should we reset m_domWindow when we detach from the Frame?
|
| if (m_domWindow)
|
| m_domWindow->resetUnlessSuspendedForPageCache();
|
| @@ -5600,68 +5599,36 @@
|
| wheelEventHandlerCountChanged(this);
|
| }
|
|
|
| -void Document::didAddTouchEventHandler(Node* handler)
|
| +void Document::didAddTouchEventHandler()
|
| {
|
| #if ENABLE(TOUCH_EVENTS)
|
| - if (!m_touchEventTargets.get())
|
| - m_touchEventTargets = adoptPtr(new TouchEventTargetSet);
|
| - m_touchEventTargets->add(handler);
|
| - if (Document* parent = parentDocument()) {
|
| - parent->didAddTouchEventHandler(this);
|
| + ++m_touchEventHandlerCount;
|
| + if (m_touchEventHandlerCount > 1)
|
| return;
|
| - }
|
| - if (Page* page = this->page()) {
|
| -#if ENABLE(TOUCH_EVENT_TRACKING)
|
| - if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
|
| - scrollingCoordinator->touchEventTargetRectsDidChange(this);
|
| + if (Page* page = this->page())
|
| + page->chrome()->client()->needTouchEvents(true);
|
| #endif
|
| - if (m_touchEventTargets->size() == 1)
|
| - page->chrome()->client()->needTouchEvents(true);
|
| - }
|
| -#else
|
| - UNUSED_PARAM(handler);
|
| -#endif
|
| }
|
|
|
| -void Document::didRemoveTouchEventHandler(Node* handler)
|
| +void Document::didRemoveTouchEventHandler()
|
| {
|
| #if ENABLE(TOUCH_EVENTS)
|
| - if (!m_touchEventTargets.get())
|
| + ASSERT(m_touchEventHandlerCount);
|
| + --m_touchEventHandlerCount;
|
| + if (m_touchEventHandlerCount)
|
| return;
|
| - ASSERT(m_touchEventTargets->contains(handler));
|
| - m_touchEventTargets->remove(handler);
|
| - if (Document* parent = parentDocument()) {
|
| - parent->didRemoveTouchEventHandler(this);
|
| - return;
|
| - }
|
|
|
| Page* page = this->page();
|
| if (!page)
|
| return;
|
| -#if ENABLE(TOUCH_EVENT_TRACKING)
|
| - if (ScrollingCoordinator* scrollingCoordinator = page->scrollingCoordinator())
|
| - scrollingCoordinator->touchEventTargetRectsDidChange(this);
|
| -#endif
|
| - if (m_touchEventTargets->size())
|
| - return;
|
| for (const Frame* frame = page->mainFrame(); frame; frame = frame->tree()->traverseNext()) {
|
| - if (frame->document() && frame->document()->hasTouchEventHandlers())
|
| + if (frame->document() && frame->document()->touchEventHandlerCount())
|
| return;
|
| }
|
| page->chrome()->client()->needTouchEvents(false);
|
| -#else
|
| - UNUSED_PARAM(handler);
|
| #endif
|
| }
|
|
|
| -#if ENABLE(TOUCH_EVENT_TRACKING)
|
| -void Document::didRemoveEventTargetNode(Node* handler)
|
| -{
|
| - if (m_touchEventTargets.get())
|
| - m_touchEventTargets->removeAll(handler);
|
| -}
|
| -#endif
|
| -
|
| HTMLIFrameElement* Document::seamlessParentIFrame() const
|
| {
|
| if (!shouldDisplaySeamlesslyWithParent())
|
|
|