Capture phase will only work if the event.bubbles is true. I think that’s correct behavior. Someone please correct me if I’m wrong.
> On Dec 25, 2019, at 12:23 PM, ha...@apache.org wrote: > > This is an automated email from the ASF dual-hosted git repository. > > harbs pushed a commit to branch develop > in repository https://gitbox.apache.org/repos/asf/royale-asjs.git > > > The following commit(s) were added to refs/heads/develop by this push: > new 2f8ef75 Fixed event bubbling > 2f8ef75 is described below > > commit 2f8ef759d700f439fa40cc2abf6aefbb04ab4bdb > Author: Harbs <ha...@in-tools.com> > AuthorDate: Wed Dec 25 12:23:13 2019 +0200 > > Fixed event bubbling > --- > .../org/apache/royale/events/EventDispatcher.as | 72 ++++++---------------- > 1 file changed, 18 insertions(+), 54 deletions(-) > > diff --git > a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/EventDispatcher.as > > b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/EventDispatcher.as > index 34871d5..510b531 100644 > --- > a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/EventDispatcher.as > +++ > b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/EventDispatcher.as > @@ -90,8 +90,23 @@ package org.apache.royale.events > //console.log("assigned target to event > ",event); > } > } else return false; > + var ancestorsTree:Array = null; > + if(event1.bubbles) > + { > + var ancestor:Object = > this.getParentEventTarget(); > + if (ancestor) { > + ancestorsTree = []; > + var ancestorCount:int = 1; > + for (; ancestor; ancestor = > ancestor.getParentEventTarget()) { > + ancestorsTree.push(ancestor); > + // goog.asserts.assert( > + // (++ancestorCount < > goog.events.EventTarget.MAX_ANCESTORS_), > + // 'infinite loop'); > + } > + } > + } > > - return super.dispatchEvent(event1); > + return > goog.events.EventTarget.dispatchEventInternal_(_dispatcher, event1, > ancestorsTree); > } > /** > * @royaleignorecoercion org.apache.royale.core.IChild > @@ -129,59 +144,8 @@ package org.apache.royale.events > } > > public function toString():String > - { > - return "[object Object]"; > - } > - private static function installOverride():Boolean{ > - goog.events.EventTarget.dispatchEventInternal_ = > dispatchEventInternal; > - return true; > + { > + return "[object Object]"; > } > - private static var overrideInstalled:Boolean = > installOverride(); > - /** > - * Dispatches the given event on the ancestorsTree. > - * > - * @param {!Object} target The target to dispatch on. > - * @param {goog.events.Event|Object|string} e The event object. > - * @param {Array<goog.events.Listenable>=} opt_ancestorsTree The ancestors > - * tree of the target, in reverse order from the closest ancestor > - * to the root event target. May be null if the target has no ancestor. > - * @return {boolean} If anyone called preventDefault on the event object (or > - * if any of the listeners returns false) this will also return false. > - * @private > - */ > -private static function dispatchEventInternal(target:EventDispatcher, > e:org.apache.royale.events.Event, opt_ancestorsTree:Array):Boolean { > - /** @suppress {missingProperties} */ > - var type:String = e.type; > - > - var rv:Boolean = true, currentTarget:Object; > - > - // Executes all capture listeners on the ancestors, if any. > - if (opt_ancestorsTree) { > - for (var i:int = opt_ancestorsTree.length - 1; !e.propagationStopped_ && > i >= 0; > - i--) { > - currentTarget = e.currentTarget = opt_ancestorsTree[i]; > - rv = currentTarget.fireListeners(type, true, e) && rv; > - } > - } > - > - // Executes capture and bubble listeners on the target. > - if (!e.propagationStopped_) { > - currentTarget = e.currentTarget = target; > - rv = currentTarget.fireListeners(type, true, e) && rv; > - if (!e.propagationStopped_) { > - rv = currentTarget.fireListeners(type, false, e) && rv; > - } > - } > - > - // Executes all bubble listeners on the ancestors, if any. > - if (opt_ancestorsTree && e.bubbles) { > - for (i = 0; !e.propagationStopped_ && i < opt_ancestorsTree.length; i++) > { > - currentTarget = e.currentTarget = opt_ancestorsTree[i]; > - rv = currentTarget.fireListeners(type, false, e) && rv; > - } > - } > - > - return rv; > -}; > } > } >