This is an automated email from the ASF dual-hosted git repository.

gregdove 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 0172bd1  Flex emulation: Fix NPE errors when attempting to use 
event.currentTarget in a FocusEvent listener (consistent with approach being 
used for mx.events.MouseEvent)
     new 0a32d75  Merge branch 'develop' of 
https://github.com/apache/royale-asjs into develop
0172bd1 is described below

commit 0172bd19c4e927b23942f82b8b7be9af6005e5e6
Author: greg-dove <greg.d...@gmail.com>
AuthorDate: Fri Jun 5 13:31:56 2020 +1200

    Flex emulation: Fix NPE errors when attempting to use event.currentTarget 
in a FocusEvent listener (consistent with approach being used for 
mx.events.MouseEvent)
---
 .../src/main/royale/mx/events/FocusEvent.as        | 135 ++++++++++++++++++++-
 .../royale/mx/events/utils/FocusEventConverter.as  |   8 +-
 2 files changed, 136 insertions(+), 7 deletions(-)

diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/events/FocusEvent.as 
b/frameworks/projects/MXRoyale/src/main/royale/mx/events/FocusEvent.as
index c1e9873..c909cc3 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/events/FocusEvent.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/events/FocusEvent.as
@@ -29,6 +29,7 @@ COMPILE::JS
 {
 import goog.events.BrowserEvent;
 import org.apache.royale.core.WrappedHTMLElement;
+       import org.apache.royale.events.getTargetWrapper;
 }
 
 import org.apache.royale.events.Event;
@@ -111,9 +112,14 @@ public class FocusEvent extends 
org.apache.royale.events.Event
                super(type, bubbles, cancelable);
                _relatedObject = relatedObject;
        }
-       
+
+       public var shiftKey:Boolean;
+       public var keyCode:uint;
+       public var direction:String;
+
+       private var _target:Object;
        private var _relatedObject:Object;
-       
+
     /**
      * @type {?goog.events.FocusEvent}
      */
@@ -124,10 +130,10 @@ public class FocusEvent extends 
org.apache.royale.events.Event
      */
     private var nativeEvent:Object;
     
-    public function wrapEvent(event:Object):void
+    public function wrapEvent(event:goog.events.BrowserEvent):void
     {
-        //wrappedEvent = event;
-        nativeEvent = event; //.getBrowserEvent();
+        wrappedEvent = event;
+        nativeEvent = event.getBrowserEvent(); //.getBrowserEvent();
     }
     
     /**
@@ -143,6 +149,125 @@ public class FocusEvent extends 
org.apache.royale.events.Event
                return _relatedObject;
        }
 
+       /**
+        *  @copy org.apache.royale.events.BrowserEvent#target
+        *
+        * @langversion 3.0
+        * @playerversion Flash 10.2
+        * @playerversion AIR 2.6
+        * @productversion Royale 0.9.4
+        */
+       override public function get target():Object
+       {
+               return wrappedEvent ? getTargetWrapper(wrappedEvent.target) : 
_target;
+       }
+       override public function set target(value:Object):void
+       {
+               _target = value;
+       }
+
+       /**
+        *  @copy org.apache.royale.events.BrowserEvent#currentTarget
+        *
+        * @langversion 3.0
+        * @playerversion Flash 10.2
+        * @playerversion AIR 2.6
+        * @productversion Royale 0.9.4
+        */
+       override public function get currentTarget():Object
+       {
+               return wrappedEvent ? 
getTargetWrapper(wrappedEvent.currentTarget) : _target;
+       }
+       override public function set currentTarget(value:Object):void
+       {
+               _target = value;
+       }
+
+       // TODO remove this when figure out how to preserve the real target
+       // The problem only manifests in SWF, so this alias is good enough for 
now
+       public function get targetBeforeBubbling():Object
+       {
+               return target;
+       }
+
+       /**
+        * Whether the default action has been prevented.
+        *
+        * @langversion 3.0
+        * @playerversion Flash 10.2
+        * @playerversion AIR 2.6
+        * @productversion Royale 0.9.4
+        */
+       override public function preventDefault():void
+       {
+               if(wrappedEvent)
+                       wrappedEvent.preventDefault();
+               else
+               {
+                       super.preventDefault();
+                       _defaultPrevented = true;
+               }
+       }
+
+       private var _defaultPrevented:Boolean;
+       /**
+        * Whether the default action has been prevented.
+        * @type {boolean}
+        *
+        * @langversion 3.0
+        * @playerversion Flash 10.2
+        * @playerversion AIR 2.6
+        * @productversion Royale 0.9.4
+        */
+       override public function get defaultPrevented():Boolean
+       {
+               return wrappedEvent ? wrappedEvent.defaultPrevented : 
_defaultPrevented;
+       }
+       override public function set defaultPrevented(value:Boolean):void
+       {
+               _defaultPrevented = value;
+       }
+
+       /**
+        * Create a copy/clone of the Event object.
+        *
+        * @langversion 3.0
+        * @playerversion Flash 10.2
+        * @playerversion AIR 2.6
+        * @productversion Royale 0.9.4
+        */
+       override public function cloneEvent():IRoyaleEvent
+       {
+               return new mx.events.FocusEvent(type, bubbles, cancelable,
+                               relatedObject, shiftKey, keyCode, direction);
+       }
+       /**
+        * @langversion 3.0
+        * @playerversion Flash 10.2
+        * @playerversion AIR 2.6
+        * @productversion Royale 0.9.4
+        */
+       override public function stopImmediatePropagation():void
+       {
+               if(wrappedEvent)
+               {
+                       wrappedEvent.stopPropagation();
+                       nativeEvent.stopImmediatePropagation();
+               }
+       }
+
+       /**
+        * @langversion 3.0
+        * @playerversion Flash 10.2
+        * @playerversion AIR 2.6
+        * @productversion Royale 0.9.4
+        */
+       override public function stopPropagation():void
+       {
+               if(wrappedEvent)
+                       wrappedEvent.stopPropagation();
+       }
+
        
 }
 
diff --git 
a/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/FocusEventConverter.as
 
b/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/FocusEventConverter.as
index d61e4d2..3bc287f 100644
--- 
a/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/FocusEventConverter.as
+++ 
b/frameworks/projects/MXRoyale/src/main/royale/mx/events/utils/FocusEventConverter.as
@@ -171,13 +171,17 @@ package mx.events.utils
                 *  @royaleignorecoercion goog.events.BrowserEvent
                 */
                COMPILE::JS
-               public static function convert(nativeEvent:Object):FocusEvent
+               public static function 
convert(nativeEvent:Object,browserEvent:goog.events.BrowserEvent=null):mx.events.FocusEvent
                {
             var type:String = nativeEvent.type;
             if (type == "focusin") type = "focusIn";
             if (type == "focusout") type = "focusOut";
                        var newEvent:FocusEvent = new FocusEvent(type, true);
-                       newEvent.wrapEvent(nativeEvent as BrowserEvent);
+                       if(!browserEvent)
+                       {
+                               browserEvent = new 
goog.events.BrowserEvent(nativeEvent as 
goog.events.Event,nativeEvent["currentTarget"]);
+                       }
+                       newEvent.wrapEvent(browserEvent);
                        return newEvent;
                }
        }

Reply via email to