Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: Source/core/dom/Node.cpp

Issue 22859012: Add support for DOM Level 3 WheelEvent (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Simplify test case Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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
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 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
2455 return true; 2461 return true;
2456 2462
2457 RefPtr<Node> protector(this); 2463 RefPtr<Node> protector(this);
2458 RefPtr<BeforeLoadEvent> beforeLoadEvent = BeforeLoadEvent::create(sourceURL) ; 2464 RefPtr<BeforeLoadEvent> beforeLoadEvent = BeforeLoadEvent::create(sourceURL) ;
2459 dispatchEvent(beforeLoadEvent.get()); 2465 dispatchEvent(beforeLoadEvent.get());
2460 return !beforeLoadEvent->defaultPrevented(); 2466 return !beforeLoadEvent->defaultPrevented();
2461 } 2467 }
2462 2468
2463 bool Node::dispatchWheelEvent(const PlatformWheelEvent& event) 2469 bool Node::dispatchWheelEvent(const PlatformWheelEvent& event)
2464 { 2470 {
2471 // We dispatch both the standard wheel event and the non-standard mousewheel one
2472 // for backward compatibility.
2465 return EventDispatcher::dispatchEvent(this, WheelEventDispatchMediator::crea te(event, document()->defaultView())); 2473 return EventDispatcher::dispatchEvent(this, WheelEventDispatchMediator::crea te(event, document()->defaultView()));
2466 } 2474 }
2467 2475
2468 void Node::dispatchChangeEvent() 2476 void Node::dispatchChangeEvent()
2469 { 2477 {
2470 dispatchScopedEvent(Event::create(eventNames().changeEvent, true, false)); 2478 dispatchScopedEvent(Event::create(eventNames().changeEvent, true, false));
2471 } 2479 }
2472 2480
2473 void Node::dispatchInputEvent() 2481 void Node::dispatchInputEvent()
2474 { 2482 {
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2506 RenderObject* renderer = this->renderer(); 2514 RenderObject* renderer = this->renderer();
2507 while (renderer && (!renderer->isBox() || !toRenderBox(renderer)->ca nBeScrolledAndHasScrollableArea())) 2515 while (renderer && (!renderer->isBox() || !toRenderBox(renderer)->ca nBeScrolledAndHasScrollableArea()))
2508 renderer = renderer->parent(); 2516 renderer = renderer->parent();
2509 2517
2510 if (renderer) { 2518 if (renderer) {
2511 if (Frame* frame = document()->frame()) 2519 if (Frame* frame = document()->frame())
2512 frame->eventHandler()->startPanScrolling(renderer); 2520 frame->eventHandler()->startPanScrolling(renderer);
2513 } 2521 }
2514 } 2522 }
2515 #endif 2523 #endif
2516 } else if (eventType == eventNames().mousewheelEvent && event->hasInterface( eventNames().interfaceForWheelEvent)) { 2524 } else if ((eventType == eventNames().wheelEvent || eventType == eventNames( ).mousewheelEvent) && event->hasInterface(eventNames().interfaceForWheelEvent)) {
2517 WheelEvent* wheelEvent = static_cast<WheelEvent*>(event); 2525 WheelEvent* wheelEvent = static_cast<WheelEvent*>(event);
2518 2526
2519 // If we don't have a renderer, send the wheel event to the first node w e find with a renderer. 2527 // 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. 2528 // This is needed for <option> and <optgroup> elements so that <select>s get a wheel scroll.
2521 Node* startNode = this; 2529 Node* startNode = this;
2522 while (startNode && !startNode->renderer()) 2530 while (startNode && !startNode->renderer())
2523 startNode = startNode->parentOrShadowHostNode(); 2531 startNode = startNode->parentOrShadowHostNode();
2524 2532
2525 if (startNode && startNode->renderer()) 2533 if (startNode && startNode->renderer())
2526 if (Frame* frame = document()->frame()) 2534 if (Frame* frame = document()->frame())
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
2762 node->showTreeForThis(); 2770 node->showTreeForThis();
2763 } 2771 }
2764 2772
2765 void showNodePath(const WebCore::Node* node) 2773 void showNodePath(const WebCore::Node* node)
2766 { 2774 {
2767 if (node) 2775 if (node)
2768 node->showNodePathForThis(); 2776 node->showNodePathForThis();
2769 } 2777 }
2770 2778
2771 #endif 2779 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698