1) was code I added a few days ago to temporarily work around the bug of nested 
BrowserEvents.

The code you mention below is a bug (interesting the compiler didn’t catch it). 
I fixed it locally and tried removing e.bubbles completely. Neither made a 
difference.

I keep feeling like we should replace goog.events with our own code, but it’s a 
scary change… ;-)

> On Dec 24, 2019, at 9:01 AM, Alex Harui <[email protected]> wrote:
> 
> Harbs,
> 
> In HTMLElementWrapper, it looked like there were 3 main code paths:
> 
> 1) if(eventObject is IBrowserEvent){
> 2a) if (converter)
> 2b) else 
> 
> I'm only looking at this diff, but it feels like some of those may have 
> gotten lost, so please double-check.
> 
> Also, it may be the Crux issue is related to this:
> 
> -                    e = EventUtils.createEvent(eventType);
> +                    e = EventUtils.createEvent(eventType), e.bubbles;
> 
> HTH,
> -Alex
> 
> On 12/22/19, 8:39 AM, "[email protected] <mailto:[email protected]>" 
> <[email protected] <mailto:[email protected]>> wrote:
> 
>    This is an automated email from the ASF dual-hosted git repository.
> 
>    harbs pushed a commit to branch develop
>    in repository 
> https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.apache.org%2Frepos%2Fasf%2Froyale-asjs.git&amp;data=02%7C01%7Caharui%40adobe.com%7Cec736cad56b3465bb2aa08d786fd7eea%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637126295667140081&amp;sdata=ELMay%2FqtfOHVtm0GoQNdXhXrxhKRerWukYuHHhqZJ4E%3D&amp;reserved=0
>  
> <https://nam04.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgitbox.apache.org%2Frepos%2Fasf%2Froyale-asjs.git&amp;data=02%7C01%7Caharui%40adobe.com%7Cec736cad56b3465bb2aa08d786fd7eea%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C637126295667140081&amp;sdata=ELMay%2FqtfOHVtm0GoQNdXhXrxhKRerWukYuHHhqZJ4E%3D&amp;reserved=0>
> 
> 
>    The following commit(s) were added to refs/heads/develop by this push:
>         new f50c999  Cleaned up ElementWrapper and HTMLElementWrapper
>    f50c999 is described below
> 
>    commit f50c9990a3190cf681364905525656984ab2e9c5
>    Author: Harbs <[email protected] <mailto:[email protected]>>
>    AuthorDate: Sun Dec 22 18:39:04 2019 +0200
> 
>        Cleaned up ElementWrapper and HTMLElementWrapper
>    ---
>     .../beads/CrossBrowserFireListenerOverrideBead.as  |   4 +-
>     .../org/apache/royale/core/ElementWrapper.as       |  41 ++---
>     .../org/apache/royale/core/HTMLElementWrapper.as   | 204 
> +--------------------
>     .../org/apache/royale/events/KeyboardEvent.as      |   4 +-
>     .../royale/org/apache/royale/events/MouseEvent.as  |   4 +-
>     .../src/main/royale/mx/core/Application.as         |   8 +-
>     .../main/royale/spark/components/Application.as    |   4 +-
>     7 files changed, 37 insertions(+), 232 deletions(-)
> 
>    diff --git 
> a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
>  
> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
>    index 36db48b..98532bd 100644
>    --- 
> a/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
>    +++ 
> b/frameworks/projects/Basic/src/main/royale/org/apache/royale/html/beads/CrossBrowserFireListenerOverrideBead.as
>    @@ -20,7 +20,7 @@ package org.apache.royale.html.beads
>     {
>         import org.apache.royale.core.IBead;
>         import org.apache.royale.core.IStrand;
>    -  import org.apache.royale.core.HTMLElementWrapper;
>    +  import org.apache.royale.core.ElementWrapper;
>         COMPILE::JS  
>       {
>             import goog.events;
>    @@ -87,7 +87,7 @@ package org.apache.royale.html.beads
>                       }
> 
>                       e.wrapEvent(eventObject);
>    -                  return HTMLElementWrapper.googFireListener(listener, e);
>    +                  return ElementWrapper.googFireListener(listener, e);
>               }
>         }
>     }
>    diff --git 
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
>  
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
>    index 58b7a64..ec7ab71 100644
>    --- 
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
>    +++ 
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/ElementWrapper.as
>    @@ -27,6 +27,7 @@ package org.apache.royale.core
>             import org.apache.royale.events.ElementEvents;
>             import goog.events;
>             import goog.events.EventTarget;
>    +        import goog.DEBUG;
>         }
>         COMPILE::SWF
>         {
>    @@ -77,8 +78,7 @@ package org.apache.royale.core
>                 if (!_beads)
>                 {
>                     _beads = new Vector.<IBead>();
>    -            }
>    -            
>    +            }            
>                 _beads.push(bead);
>                 bead.strand = this;
>             }
>    @@ -115,9 +115,7 @@ package org.apache.royale.core
>             public function removeBead(bead:IBead):IBead
>             {
>                 var i:uint, n:uint, value:Object;
>    -            
>                 n = _beads.length;
>    -            
>                 for (i = 0; i < n; i++)
>                 {
>                     value = _beads[i];
>    @@ -125,7 +123,7 @@ package org.apache.royale.core
>                     if (bead === value)
>                     {
>                         _beads.splice(i, 1);
>    -                    
>    +                    bead.strand = null;
>                         return bead;
>                     }
>                 }
>    @@ -173,6 +171,11 @@ package org.apache.royale.core
>       public class ElementWrapper extends EventDispatcher implements IStrand
>       {
> 
>    +        /**
>    +         * @royalesuppresspublicvarwarning
>    +         */
>    +        static public var converterMap:Object = {};
>    +
>               //--------------------------------------
>               //   Static Function
>               //--------------------------------------
>    @@ -185,13 +188,13 @@ package org.apache.royale.core
>              */
>               static public function fireListenerOverride(listener:Object, 
> eventObject:goog.events.BrowserEvent):Boolean
>               {
>    -            /**
>    -             * For now we're adding in some just-in-case code to prevent 
> conflicts with ElementWrapper. This needs to be fixed.
>    -             */
>                 var e:IBrowserEvent;
>    -            if(eventObject is IBrowserEvent){
>    -                e = eventObject as IBrowserEvent
>    -            } else {
>    +            var nativeEvent:Object = eventObject.getBrowserEvent();
>    +            var converter:Object = 
> converterMap[nativeEvent.constructor.name];
>    +            if (converter)
>    +                e = converter["convert"](nativeEvent,eventObject);
>    +            else
>    +            {
>                     e = new org.apache.royale.events.BrowserEvent();
>                     e.wrapEvent(eventObject);
>                 }
>    @@ -262,7 +265,7 @@ package org.apache.royale.core
>                       {
>                               _beads = new Vector.<IBead>();
>                       }
>    -
>    +            if (goog.DEBUG && !(bead is IBead)) throw new 
> TypeError('Cannot convert '+bead+' to IBead');
>                       _beads.push(bead);
>                       bead.strand = this;
>               }
>    @@ -274,11 +277,8 @@ package org.apache.royale.core
>               public function getBeadByType(classOrInterface:Class):IBead
>               {
>                       var bead:IBead, i:uint, n:uint;
>    -
>                 if (!_beads) return null;
>    -            
>                       n = _beads.length;
>    -
>                       for (i = 0; i < n; i++)
>                       {
>                               bead = _beads[i];
>    @@ -299,9 +299,7 @@ package org.apache.royale.core
>               public function removeBead(bead:IBead):IBead
>               {
>                       var i:uint, n:uint, value:Object;
>    -
>                       n = _beads.length;
>    -
>                       for (i = 0; i < n; i++)
>                       {
>                               value = _beads[i];
>    @@ -309,7 +307,6 @@ package org.apache.royale.core
>                               if (bead === value)
>                               {
>                                       _beads.splice(i, 1);
>    -
>                                       return bead;
>                               }
>                       }
>    @@ -351,12 +348,12 @@ package org.apache.royale.core
>             override public function dispatchEvent(e:Object):Boolean
>             {
>                 var eventType:String = "";
>    -            if (typeof(e) === 'string')
>    +            if (typeof(e) == 'string')
>                 {
>                     eventType = e as String;
>    -                if (e === Event.CHANGE)
>    +                if (e == "change")
>                     {
>    -                    e = EventUtils.createEvent(eventType);
>    +                    e = EventUtils.createEvent(eventType, e.bubbles);
>                     }
>                 }
>                 else
>    @@ -364,7 +361,7 @@ package org.apache.royale.core
>                     eventType = e.type;
>                     if (ElementEvents.elementEvents[eventType])
>                     {
>    -                    e = EventUtils.createEvent(eventType);
>    +                    e = EventUtils.createEvent(eventType), e.bubbles;
>                     }
>                 }
>                 var source:Object = this.getActualDispatcher_(eventType);
>    diff --git 
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
>  
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
>    index d44fb29..59e571c 100644
>    --- 
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
>    +++ 
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/HTMLElementWrapper.as
>    @@ -144,92 +144,13 @@ package org.apache.royale.core
>         }
> 
>       COMPILE::JS
>    -  public class HTMLElementWrapper extends EventDispatcher implements 
> IStrand
>    +  public class HTMLElementWrapper extends ElementWrapper
>       {
> 
>    -          //--------------------------------------
>    -          //   Static Function
>    -          //--------------------------------------
>    -
>    -        /**
>    -         * @param listener The listener object to call 
> {goog.events.Listener}.
>    -         * @param eventObject The event object to pass to the listener.
>    -         * @return Result of listener.
>    -         * @royaleignorecoercion org.apache.royale.events.IBrowserEvent
>    -         */
>    -          static public function fireListenerOverride(listener:Object, 
> eventObject:goog.events.BrowserEvent):Boolean
>    -          {
>    -            /**
>    -             * For now we're adding in some just-in-case code to prevent 
> conflicts with ElementWrapper. This needs to be fixed.
>    -             */
>    -            var e:IBrowserEvent;
>    -            if(eventObject is IBrowserEvent){
>    -                e = eventObject as IBrowserEvent
>    -            } else {
>    -                var nativeEvent:Object = eventObject.getBrowserEvent();
>    -                var converter:Object = 
> converterMap[nativeEvent.constructor.name];
>    -                if (converter)
>    -                    e = converter["convert"](nativeEvent,eventObject);
>    -                else
>    -                {
>    -                    e = new org.apache.royale.events.BrowserEvent();
>    -                    e.wrapEvent(eventObject);
>    -                }
>    -            }
>    -                  return HTMLElementWrapper.googFireListener(listener, e);
>    -          }
>    -        
>    -        /**
>    -         * @royalesuppresspublicvarwarning
>    -         */
>    -        static public var converterMap:Object = {};
>    -
>    -        /**
>    -         * Static initializer
>    -         */
>    -          static public function installOverride():Boolean
>    -          {
>    -                  HTMLElementWrapper.googFireListener = 
> goog.events.fireListener;
>    -                  goog.events.fireListener = 
> HTMLElementWrapper.fireListenerOverride;
>    -                  return true;
>    -          }
>    -
>    -        //--------------------------------------
>    -        //   Static Property
>    -        //--------------------------------------
>    -        
>    -        /**
>    -         * The original fireListener.
>    -         * 
>    -         *  @royalesuppresspublicvarwarning
>    -         */
>    -        static public var googFireListener:Function;
>    -        
>    -        /**
>    -         * The properties that triggers the static initializer.
>    -         * Note, in JS, this property has to be declared
>    -         * after the installOverride.
>    -         * 
>    -         *  @royalesuppresspublicvarwarning
>    -         */
>    -        static public var installedOverride:Boolean = installOverride();
> 
>               //--------------------------------------
>               //   Property
>               //--------------------------------------
>    -
>    -          private var _element:WrappedHTMLElement;
>    -        
>    -        public function get element():WrappedHTMLElement
>    -        {
>    -            return _element;
>    -        }
>    -        
>    -        public function set element(value:WrappedHTMLElement):void
>    -        {
>    -            _element = value;
>    -            _element.royale_wrapper = this;
>    -        }
> 
>             /**
>              * allow access from overrides
>    @@ -270,8 +191,6 @@ package org.apache.royale.core
>                 }
>             }
> 
>    -          private var _beads:Array;
>    -        
>               //--------------------------------------
>               //   Function
>               //--------------------------------------
>    @@ -280,85 +199,15 @@ package org.apache.royale.core
>              * @param bead The new bead.
>              * @royaleignorecoercion org.apache.royale.core.IBeadModel 
>              */
>    -          public function addBead(bead:IBead):void
>    +          override public function addBead(bead:IBead):void
>               {
>    -                  if (!_beads)
>    -                  {
>    -                          _beads = [];
>    -                  }
>    -            if (goog.DEBUG && !(bead is IBead)) throw new 
> TypeError('Cannot convert '+bead+' to IBead')
>    -                  _beads.push(bead);
>    -
>    -                  if (bead is IBeadModel)
>    +                  if (bead is IBeadModel)
>                       {
>                               _model = bead as IBeadModel;
>                       }
>    -
>    -                  bead.strand = this;
>    -          }
>    -
>    -        /**
>    -         * @param classOrInterface The requested bead type.
>    -         * @return The bead.
>    -         */
>    -          public function getBeadByType(classOrInterface:Class):IBead
>    -          {
>    -                  var bead:IBead, i:uint, n:uint;
>    -
>    -            if (!_beads) return null;
>    -            
>    -                  n = _beads.length;
>    -
>    -                  for (i = 0; i < n; i++)
>    -                  {
>    -                          bead = _beads[i];
>    -
>    -                          if (bead is classOrInterface)
>    -                          {
>    -                                  return bead;
>    -                          }
>    -                  }
>    -
>    -                  return null;
>    +          super.addBead(bead);
>               }
>    -
>    -          /**
>    -           * @param bead The bead to remove.
>    -           * @return The bead.
>    -           */
>    -          public function removeBead(bead:IBead):IBead
>    -          {
>    -                  var i:uint, n:uint, value:Object;
>    -
>    -                  n = _beads.length;
>    -
>    -                  for (i = 0; i < n; i++)
>    -                  {
>    -                          value = _beads[i];
>    -
>    -                          if (bead === value)
>    -                          {
>    -                                  _beads.splice(i, 1);
>    -                    bead.strand = null;
>    -                                  return bead;
>    -                          }
>    -                  }
>    -
>    -                  return null;
>    -          }
>    -        
>    -        override public function addEventListener(type:String, 
> handler:Function, opt_capture:Boolean = false, opt_handlerScope:Object = 
> null):void
>    -        {
>    -            var source:Object = getActualDispatcher_(type);
>    -            goog.events.listen(source, type, handler);
>    -        }
>    -        
>    -        override public function removeEventListener(type:String, 
> handler:Function, opt_capture:Boolean = false, opt_handlerScope:Object = 
> null):void
>    -        {
>    -            var source:Object = getActualDispatcher_(type);
>    -            goog.events.unlisten(source, type, handler);
>    -        }
>    -        
>    +                        
>             private function getActualDispatcher_(type:String):Object
>             {
>                 var source:Object = this;
>    @@ -368,48 +217,7 @@ package org.apache.royale.core
>                 }
>                 return source;
>             }
>    -        
>    -        override public function hasEventListener(type:String):Boolean
>    -        {
>    -            var source:Object = this.getActualDispatcher_(type);
>    -            
>    -            return goog.events.hasListener(source, type);
>    -        }
>    -
>    -        /**
>    -         * @royaleignorecoercion String
>    -         */
>    -        override public function dispatchEvent(e:Object):Boolean
>    -        {
>    -            var eventType:String = "";
>    -            if (typeof(e) === 'string')
>    -            {
>    -                eventType = e as String;
>    -                if (e === org.apache.royale.events.Event.CHANGE)
>    -                {
>    -                    e = EventUtils.createEvent(eventType, e.bubbles);
>    -                }
>    -            }
>    -            else
>    -            {
>    -                eventType = e.type;
>    -                if (ElementEvents.elementEvents[eventType])
>    -                {
>    -                    e = EventUtils.createEvent(eventType, e.bubbles);
>    -                }
>    -            }
>    -            var source:Object = this.getActualDispatcher_(eventType);
>    -                  if (e.bubbles) {
>    -                          return dispatchBubblingEvent(source, e);
>    -                  }
>    -            if (source == this)
>    -            {
>    -                return super.dispatchEvent(e);
>    -            }
>    -            
>    -            return source.dispatchEvent(e);
>    -        }
>    -          
>    +                  
>             /**
>              * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
>              */
>    diff --git 
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
>  
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
>    index bbcaa1d..8719a1e 100644
>    --- 
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
>    +++ 
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/KeyboardEvent.as
>    @@ -21,7 +21,7 @@ package org.apache.royale.events
>         COMPILE::JS
>         {
>             import goog.events.BrowserEvent;
>    -        import org.apache.royale.core.HTMLElementWrapper;
>    +        import org.apache.royale.core.ElementWrapper;
>               import org.apache.royale.events.Event;
>             import org.apache.royale.events.utils.KeyboardEventConverter;
>         }
>    @@ -314,7 +314,7 @@ package org.apache.royale.events
>             COMPILE::JS
>             public static function setupConverter():Boolean
>             {
>    -            HTMLElementWrapper.converterMap["KeyboardEvent"] = 
> KeyboardEventConverter;
>    +            ElementWrapper.converterMap["KeyboardEvent"] = 
> KeyboardEventConverter;
>                 return true;
>             }
> 
>    diff --git 
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
>  
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
>    index 0d30f31..33bb052 100644
>    --- 
> a/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
>    +++ 
> b/frameworks/projects/Core/src/main/royale/org/apache/royale/events/MouseEvent.as
>    @@ -32,7 +32,7 @@ package org.apache.royale.events
> 
>             import goog.events.BrowserEvent;
> 
>    -        import org.apache.royale.core.HTMLElementWrapper;
>    +        import org.apache.royale.core.ElementWrapper;
>             import org.apache.royale.events.Event;
>             import org.apache.royale.events.utils.MouseEventConverter;
>         }
>    @@ -838,7 +838,7 @@ package org.apache.royale.events
> 
>             public static function setupConverter():Boolean
>             {
>    -            HTMLElementWrapper.converterMap["MouseEvent"] = 
> MouseEventConverter;
>    +            ElementWrapper.converterMap["MouseEvent"] = 
> MouseEventConverter;
>                 _useNativeConstructor = typeof window.MouseEvent == 
> 'function';
>                 return true;
>             }
>    diff --git 
> a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Application.as 
> b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Application.as
>    index 2e79aec..525bed2 100644
>    --- a/frameworks/projects/MXRoyale/src/main/royale/mx/core/Application.as
>    +++ b/frameworks/projects/MXRoyale/src/main/royale/mx/core/Application.as
>    @@ -66,7 +66,7 @@ import mx.managers.FocusManager;
>     import mx.managers.ISystemManager;
> 
>     COMPILE::JS {
>    -    import org.apache.royale.core.HTMLElementWrapper;
>    +    import org.apache.royale.core.ElementWrapper;
>         import org.apache.royale.events.ElementEvents;
>     }
> 
>    @@ -632,9 +632,9 @@ public class Application extends Container implements 
> IStrand, IParent, IEventDi
>       COMPILE::JS
>       public function initializeApplication():void
>       {
>    -        HTMLElementWrapper.converterMap["MouseEvent"] = 
> MouseEventConverter;
>    -        HTMLElementWrapper.converterMap["KeyboardEvent"] = 
> KeyboardEventConverter;
>    -        HTMLElementWrapper.converterMap["FocusEvent"] = 
> FocusEventConverter;
>    +        ElementWrapper.converterMap["MouseEvent"] = MouseEventConverter;
>    +        ElementWrapper.converterMap["KeyboardEvent"] = 
> KeyboardEventConverter;
>    +        ElementWrapper.converterMap["FocusEvent"] = FocusEventConverter;
>             addEventListener(KeyboardEvent.KEY_DOWN, 
> keyDownForCapsLockHandler);
> 
>             initManagers();
>    diff --git 
> a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
>  
> b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
>    index a840ea3..0a85538 100644
>    --- 
> a/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
>    +++ 
> b/frameworks/projects/SparkRoyale/src/main/royale/spark/components/Application.as
>    @@ -67,7 +67,7 @@ import mx.events.utils.MouseEventConverter;
>     import mx.managers.ISystemManager;
> 
>     COMPILE::JS {
>    -    import org.apache.royale.core.HTMLElementWrapper;
>    +    import org.apache.royale.core.ElementWrapper;
>     }
> 
>     import org.apache.royale.binding.ContainerDataBinding;
>    @@ -324,7 +324,7 @@ public class Application extends SkinnableContainer 
> implements IStrand, IParent,
> 
>             COMPILE::JS
>             {
>    -            HTMLElementWrapper.converterMap["MouseEvent"] = 
> MouseEventConverter;
>    +            ElementWrapper.converterMap["MouseEvent"] = 
> MouseEventConverter;
>             }
>         }

Reply via email to