OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2001 Dirk Mueller (mueller@kde.org) | 4 * (C) 2001 Dirk Mueller (mueller@kde.org) |
5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. | 5 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All r
ights reserved. |
6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) | 6 * Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies) |
7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) | 7 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo
bile.com/) |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 2133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2144 Vector<AtomicString> types = listenerMap.eventTypes(); | 2144 Vector<AtomicString> types = listenerMap.eventTypes(); |
2145 for (unsigned i = 0; i < types.size(); ++i) | 2145 for (unsigned i = 0; i < types.size(); ++i) |
2146 document()->addListenerTypeIfNeeded(types[i]); | 2146 document()->addListenerTypeIfNeeded(types[i]); |
2147 } | 2147 } |
2148 } | 2148 } |
2149 | 2149 |
2150 if (AXObjectCache::accessibilityEnabled() && oldDocument) | 2150 if (AXObjectCache::accessibilityEnabled() && oldDocument) |
2151 if (AXObjectCache* cache = oldDocument->existingAXObjectCache()) | 2151 if (AXObjectCache* cache = oldDocument->existingAXObjectCache()) |
2152 cache->remove(this); | 2152 cache->remove(this); |
2153 | 2153 |
2154 const EventListenerVector& wheelListeners = getEventListeners(eventNames().m
ousewheelEvent); | 2154 const EventListenerVector& mousewheelListeners = getEventListeners(eventName
s().mousewheelEvent); |
| 2155 for (size_t i = 0; i < mousewheelListeners.size(); ++i) { |
| 2156 oldDocument->didRemoveWheelEventHandler(); |
| 2157 document()->didAddWheelEventHandler(); |
| 2158 } |
| 2159 |
| 2160 const EventListenerVector& wheelListeners = getEventListeners(eventNames().w
heelEvent); |
2155 for (size_t i = 0; i < wheelListeners.size(); ++i) { | 2161 for (size_t i = 0; i < wheelListeners.size(); ++i) { |
2156 oldDocument->didRemoveWheelEventHandler(); | 2162 oldDocument->didRemoveWheelEventHandler(); |
2157 document()->didAddWheelEventHandler(); | 2163 document()->didAddWheelEventHandler(); |
2158 } | 2164 } |
2159 | 2165 |
2160 if (const TouchEventTargetSet* touchHandlers = oldDocument ? oldDocument->to
uchEventTargets() : 0) { | 2166 if (const TouchEventTargetSet* touchHandlers = oldDocument ? oldDocument->to
uchEventTargets() : 0) { |
2161 while (touchHandlers->contains(this)) { | 2167 while (touchHandlers->contains(this)) { |
2162 oldDocument->didRemoveTouchEventHandler(this); | 2168 oldDocument->didRemoveTouchEventHandler(this); |
2163 document()->didAddTouchEventHandler(this); | 2169 document()->didAddTouchEventHandler(this); |
2164 } | 2170 } |
(...skipping 12 matching lines...) Expand all Loading... |
2177 } | 2183 } |
2178 } | 2184 } |
2179 | 2185 |
2180 static inline bool tryAddEventListener(Node* targetNode, const AtomicString& eve
ntType, PassRefPtr<EventListener> listener, bool useCapture) | 2186 static inline bool tryAddEventListener(Node* targetNode, const AtomicString& eve
ntType, PassRefPtr<EventListener> listener, bool useCapture) |
2181 { | 2187 { |
2182 if (!targetNode->EventTarget::addEventListener(eventType, listener, useCaptu
re)) | 2188 if (!targetNode->EventTarget::addEventListener(eventType, listener, useCaptu
re)) |
2183 return false; | 2189 return false; |
2184 | 2190 |
2185 if (Document* document = targetNode->document()) { | 2191 if (Document* document = targetNode->document()) { |
2186 document->addListenerTypeIfNeeded(eventType); | 2192 document->addListenerTypeIfNeeded(eventType); |
2187 if (eventType == eventNames().mousewheelEvent) | 2193 if (eventType == eventNames().wheelEvent || eventType == eventNames().mo
usewheelEvent) |
2188 document->didAddWheelEventHandler(); | 2194 document->didAddWheelEventHandler(); |
2189 else if (eventNames().isTouchEventType(eventType)) | 2195 else if (eventNames().isTouchEventType(eventType)) |
2190 document->didAddTouchEventHandler(targetNode); | 2196 document->didAddTouchEventHandler(targetNode); |
2191 } | 2197 } |
2192 | 2198 |
2193 return true; | 2199 return true; |
2194 } | 2200 } |
2195 | 2201 |
2196 bool Node::addEventListener(const AtomicString& eventType, PassRefPtr<EventListe
ner> listener, bool useCapture) | 2202 bool Node::addEventListener(const AtomicString& eventType, PassRefPtr<EventListe
ner> listener, bool useCapture) |
2197 { | 2203 { |
2198 return tryAddEventListener(this, eventType, listener, useCapture); | 2204 return tryAddEventListener(this, eventType, listener, useCapture); |
2199 } | 2205 } |
2200 | 2206 |
2201 static inline bool tryRemoveEventListener(Node* targetNode, const AtomicString&
eventType, EventListener* listener, bool useCapture) | 2207 static inline bool tryRemoveEventListener(Node* targetNode, const AtomicString&
eventType, EventListener* listener, bool useCapture) |
2202 { | 2208 { |
2203 if (!targetNode->EventTarget::removeEventListener(eventType, listener, useCa
pture)) | 2209 if (!targetNode->EventTarget::removeEventListener(eventType, listener, useCa
pture)) |
2204 return false; | 2210 return false; |
2205 | 2211 |
2206 // FIXME: Notify Document that the listener has vanished. We need to keep tr
ack of a number of | 2212 // FIXME: Notify Document that the listener has vanished. We need to keep tr
ack of a number of |
2207 // listeners for each type, not just a bool - see https://bugs.webkit.org/sh
ow_bug.cgi?id=33861 | 2213 // listeners for each type, not just a bool - see https://bugs.webkit.org/sh
ow_bug.cgi?id=33861 |
2208 if (Document* document = targetNode->document()) { | 2214 if (Document* document = targetNode->document()) { |
2209 if (eventType == eventNames().mousewheelEvent) | 2215 if (eventType == eventNames().wheelEvent || eventType == eventNames().mo
usewheelEvent) |
2210 document->didRemoveWheelEventHandler(); | 2216 document->didRemoveWheelEventHandler(); |
2211 else if (eventNames().isTouchEventType(eventType)) | 2217 else if (eventNames().isTouchEventType(eventType)) |
2212 document->didRemoveTouchEventHandler(targetNode); | 2218 document->didRemoveTouchEventHandler(targetNode); |
2213 } | 2219 } |
2214 | 2220 |
2215 return true; | 2221 return true; |
2216 } | 2222 } |
2217 | 2223 |
2218 bool Node::removeEventListener(const AtomicString& eventType, EventListener* lis
tener, bool useCapture) | 2224 bool Node::removeEventListener(const AtomicString& eventType, EventListener* lis
tener, bool useCapture) |
2219 { | 2225 { |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2506 RenderObject* renderer = this->renderer(); | 2512 RenderObject* renderer = this->renderer(); |
2507 while (renderer && (!renderer->isBox() || !toRenderBox(renderer)->ca
nBeScrolledAndHasScrollableArea())) | 2513 while (renderer && (!renderer->isBox() || !toRenderBox(renderer)->ca
nBeScrolledAndHasScrollableArea())) |
2508 renderer = renderer->parent(); | 2514 renderer = renderer->parent(); |
2509 | 2515 |
2510 if (renderer) { | 2516 if (renderer) { |
2511 if (Frame* frame = document()->frame()) | 2517 if (Frame* frame = document()->frame()) |
2512 frame->eventHandler()->startPanScrolling(renderer); | 2518 frame->eventHandler()->startPanScrolling(renderer); |
2513 } | 2519 } |
2514 } | 2520 } |
2515 #endif | 2521 #endif |
2516 } else if (eventType == eventNames().mousewheelEvent && event->hasInterface(
eventNames().interfaceForWheelEvent)) { | 2522 } else if ((eventType == eventNames().wheelEvent || eventType == eventNames(
).mousewheelEvent) && event->hasInterface(eventNames().interfaceForWheelEvent))
{ |
2517 WheelEvent* wheelEvent = static_cast<WheelEvent*>(event); | 2523 WheelEvent* wheelEvent = static_cast<WheelEvent*>(event); |
2518 | 2524 |
2519 // If we don't have a renderer, send the wheel event to the first node w
e find with a renderer. | 2525 // If we don't have a renderer, send the wheel event to the first node w
e find with a renderer. |
2520 // This is needed for <option> and <optgroup> elements so that <select>s
get a wheel scroll. | 2526 // This is needed for <option> and <optgroup> elements so that <select>s
get a wheel scroll. |
2521 Node* startNode = this; | 2527 Node* startNode = this; |
2522 while (startNode && !startNode->renderer()) | 2528 while (startNode && !startNode->renderer()) |
2523 startNode = startNode->parentOrShadowHostNode(); | 2529 startNode = startNode->parentOrShadowHostNode(); |
2524 | 2530 |
2525 if (startNode && startNode->renderer()) | 2531 if (startNode && startNode->renderer()) |
2526 if (Frame* frame = document()->frame()) | 2532 if (Frame* frame = document()->frame()) |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2762 node->showTreeForThis(); | 2768 node->showTreeForThis(); |
2763 } | 2769 } |
2764 | 2770 |
2765 void showNodePath(const WebCore::Node* node) | 2771 void showNodePath(const WebCore::Node* node) |
2766 { | 2772 { |
2767 if (node) | 2773 if (node) |
2768 node->showNodePathForThis(); | 2774 node->showNodePathForThis(); |
2769 } | 2775 } |
2770 | 2776 |
2771 #endif | 2777 #endif |
OLD | NEW |