Changeset 56195 in webkit


Ignore:
Timestamp:
Mar 18, 2010 2:39:58 PM (14 years ago)
Author:
hyatt@apple.com
Message:

https://bugs.webkit.org/show_bug.cgi?id=36325

Reviewed by Oliver Hunt.

Add support for stopImmediatePropagation from DOM Level 3 Events.

Added fast/events/stop-immediate-propagation.html.

  • dom/Event.cpp:

(WebCore::Event::Event):

  • dom/Event.h:

(WebCore::Event::timeStamp):
(WebCore::Event::stopPropagation):
(WebCore::Event::stopImmediatePropagation):
(WebCore::Event::propagationStopped):
(WebCore::Event::immediatePropagationStopped):

  • dom/Event.idl:
  • dom/EventTarget.cpp:

(WebCore::EventTarget::fireEventListeners):

Location:
trunk
Files:
2 added
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r56194 r56195  
     12010-03-18  David Hyatt  <hyatt@apple.com>
     2
     3        Reviewed by Oliver Hunt.
     4
     5        https://bugs.webkit.org/show_bug.cgi?id=36325
     6
     7        Add support for stopImmediatePropagation from DOM Level 3 Events.
     8
     9        Added fast/events/stop-immediate-propagation.html.
     10
     11        * dom/Event.cpp:
     12        (WebCore::Event::Event):
     13        * dom/Event.h:
     14        (WebCore::Event::timeStamp):
     15        (WebCore::Event::stopPropagation):
     16        (WebCore::Event::stopImmediatePropagation):
     17        (WebCore::Event::propagationStopped):
     18        (WebCore::Event::immediatePropagationStopped):
     19        * dom/Event.idl:
     20        * dom/EventTarget.cpp:
     21        (WebCore::EventTarget::fireEventListeners):
     22
    1232010-03-18  Dimitri Glazkov  <dglazkov@chromium.org>
    224
  • trunk/WebCore/dom/Event.cpp

    r54182 r56195  
    3333    , m_cancelable(false)
    3434    , m_propagationStopped(false)
     35    , m_immediatePropagationStopped(false)
    3536    , m_defaultPrevented(false)
    3637    , m_defaultHandled(false)
     
    4849    , m_cancelable(cancelableArg)
    4950    , m_propagationStopped(false)
     51    , m_immediatePropagationStopped(false)
    5052    , m_defaultPrevented(false)
    5153    , m_defaultHandled(false)
  • trunk/WebCore/dom/Event.h

    r54182 r56195  
    8989        bool cancelable() const { return m_cancelable; }
    9090        DOMTimeStamp timeStamp() const { return m_createTime; }
     91
    9192        void stopPropagation() { m_propagationStopped = true; }
    92 
     93        void stopImmediatePropagation() { m_immediatePropagationStopped = true; }
     94       
    9395        // IE Extensions
    9496        EventTarget* srcElement() const { return target(); } // MSIE extension - "the object that fired the event"
     
    132134        bool fromUserGesture();
    133135       
    134         bool propagationStopped() const { return m_propagationStopped; }
     136        bool propagationStopped() const { return m_propagationStopped || m_immediatePropagationStopped; }
     137        bool immediatePropagationStopped() const { return m_immediatePropagationStopped; }
    135138
    136139        bool defaultPrevented() const { return m_defaultPrevented; }
     
    168171
    169172        bool m_propagationStopped;
     173        bool m_immediatePropagationStopped;
    170174        bool m_defaultPrevented;
    171175        bool m_defaultHandled;
  • trunk/WebCore/dom/Event.idl

    r56190 r56195  
    6969        // DOM Level 3 Additions.
    7070        readonly attribute boolean defaultPrevented;
     71        void stopImmediatePropagation();
    7172
    7273        // IE Extensions
  • trunk/WebCore/dom/EventTarget.cpp

    r51793 r56195  
    293293        if (event->eventPhase() == Event::BUBBLING_PHASE && registeredListener.useCapture)
    294294            continue;
     295
     296        // If stopImmediatePropagation has been called, we just break out immediately, without
     297        // handling any more events on this target.
     298        if (event->immediatePropagationStopped())
     299            break;
     300
    295301        // To match Mozilla, the AT_TARGET phase fires both capturing and bubbling
    296302        // event listeners, even though that violates some versions of the DOM spec.
Note: See TracChangeset for help on using the changeset viewer.