You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by ah...@apache.org on 2014/06/21 08:14:32 UTC

git commit: [flex-sdk] [refs/heads/develop] - FLEX-34353 fix shift-tab focus transfer from IE address bar

Repository: flex-sdk
Updated Branches:
  refs/heads/develop 3eb9d6d5a -> fae2059b9


FLEX-34353 fix shift-tab focus transfer from IE address bar


Project: http://git-wip-us.apache.org/repos/asf/flex-sdk/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-sdk/commit/fae2059b
Tree: http://git-wip-us.apache.org/repos/asf/flex-sdk/tree/fae2059b
Diff: http://git-wip-us.apache.org/repos/asf/flex-sdk/diff/fae2059b

Branch: refs/heads/develop
Commit: fae2059b98645d90abad9b04e3a1d320155b2001
Parents: 3eb9d6d
Author: Alex Harui <ah...@apache.org>
Authored: Fri Jun 20 23:14:12 2014 -0700
Committer: Alex Harui <ah...@apache.org>
Committed: Fri Jun 20 23:14:12 2014 -0700

----------------------------------------------------------------------
 .../framework/src/mx/managers/FocusManager.as   | 27 ++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-sdk/blob/fae2059b/frameworks/projects/framework/src/mx/managers/FocusManager.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/framework/src/mx/managers/FocusManager.as b/frameworks/projects/framework/src/mx/managers/FocusManager.as
index 27da1eb..a9d4c1f 100644
--- a/frameworks/projects/framework/src/mx/managers/FocusManager.as
+++ b/frameworks/projects/framework/src/mx/managers/FocusManager.as
@@ -112,6 +112,9 @@ public class FocusManager extends EventDispatcher implements IFocusManager
 	 */
 	public static var mixins:Array;
 
+    // flag to turn on/off some ie specific behavior
+    mx_internal static var ieshifttab:Boolean = true;
+
     //--------------------------------------------------------------------------
     //
     //  Constructor
@@ -706,7 +709,7 @@ public class FocusManager extends EventDispatcher implements IFocusManager
         {
             dispatchEvent(new FlexEvent(FlexEvent.FLEX_WINDOW_ACTIVATE));
 		    // restore focus if this focus manager had last focus
-	        if (_lastFocus && !browserMode)
+            if (_lastFocus && (!browserMode || ieshifttab))
 	    	    _lastFocus.setFocus();
 	        lastAction = "ACTIVATE";
         }
@@ -1624,7 +1627,7 @@ public class FocusManager extends EventDispatcher implements IFocusManager
             calculateCandidates = false;
         }
 
-        // trace("focus was at " + o);
+        // trace("focus was at " + fromObject);
         // trace("focusableObjects " + focusableObjects.length);
         var i:int = fromIndex;
         if (fromIndex == FROM_INDEX_UNSPECIFIED)
@@ -1633,6 +1636,8 @@ public class FocusManager extends EventDispatcher implements IFocusManager
     	    var o:DisplayObject = fromObject; 
         	if (!o)
         		o = form.systemManager.stage.focus;
+            else if (o == form.systemManager.stage)
+                o == null;
         
 	        o = DisplayObject(findFocusManagerComponent2(InteractiveObject(o)));
 	
@@ -2084,8 +2089,26 @@ public class FocusManager extends EventDispatcher implements IFocusManager
                 return;
             }
 
+            if (ieshifttab && lastAction == "ACTIVATE")
+            {
+                // IE seems to now require that we set focus to something during activate
+                // but then we get this keyFocusChange event.  I think we used to not
+                // need to set focus on activate and we still got the keyFocusChange
+                // and then stage.focus was null and we'd use the keyFocusChange event
+                // to determine which control (first or last) got focus based on
+                // the shift key.
+                // If we set focus on activate, then we get this keyFocusChange which moves
+                // the focus somewhere else, so we set fauxFocus to the stage as a signal
+                // to the setFocusToNextObject logic that it shouldn't use the stage.focus
+                // as the starting point.
+                fauxFocus = sm.stage;
+            }
             // trace("tabHandled by " + this);
             setFocusToNextObject(event);
+            if (ieshifttab && lastAction == "ACTIVATE")
+            {
+                fauxFocus = null;
+            }
 
             // if we changed focus or if we're the main app
             // eat the event