4788402: SortingFocusTraversalPolicy: prob with non-focusable focus Cycle Root as first
authorant
Thu, 18 Jun 2009 11:28:54 +0400
changeset 3082 24c8d93ac1e1
parent 2955 9327f093140c
child 3083 1954edd3b7a7
4788402: SortingFocusTraversalPolicy: prob with non-focusable focus Cycle Root as first Reviewed-by: dcherepanov
jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java
jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java
jdk/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java
jdk/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java
--- a/jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Wed Jun 17 21:13:04 2009 +0100
+++ b/jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java	Thu Jun 18 11:28:54 2009 +0400
@@ -425,15 +425,13 @@
             }
             if (log.isLoggable(Level.FINE)) log.fine("### Cycle is " + cycle);
 
-            for (int i = 0; i < cycle.size(); i++) {
-                Component comp = cycle.get(i);
+            for (Component comp : cycle) {
                 if (accept(comp)) {
                     return comp;
-                } else if (comp instanceof Container && comp != aContainer) {
-                    Container cont = (Container)comp;
-                    if (cont.isFocusTraversalPolicyProvider()) {
-                        return cont.getFocusTraversalPolicy().getDefaultComponent(cont);
-                    }
+                } else if (comp != aContainer &&
+                           (comp = getComponentDownCycle(comp, FORWARD_TRAVERSAL)) != null)
+                {
+                    return comp;
                 }
             }
         }
--- a/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Wed Jun 17 21:13:04 2009 +0100
+++ b/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java	Thu Jun 18 11:28:54 2009 +0400
@@ -444,11 +444,10 @@
         for (Component comp : cycle) {
             if (accept(comp)) {
                 return comp;
-            } else if (comp instanceof Container && comp != aContainer) {
-                Container cont = (Container)comp;
-                if (cont.isFocusTraversalPolicyProvider()) {
-                    return cont.getFocusTraversalPolicy().getDefaultComponent(cont);
-                }
+            } else if (comp != aContainer &&
+                       (comp = getComponentDownCycle(comp, FORWARD_TRAVERSAL)) != null)
+            {
+                return comp;
             }
         }
         return null;
--- a/jdk/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java	Wed Jun 17 21:13:04 2009 +0100
+++ b/jdk/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java	Thu Jun 18 11:28:54 2009 +0400
@@ -104,7 +104,7 @@
 */
 
 public class DefaultFTPTest {
-    final int TESTS_NUMBER = 10;
+    final int TESTS_NUMBER = 11;
 
     public static void main(String[] args) {
         DefaultFTPTest app = new DefaultFTPTest();
@@ -928,3 +928,63 @@
         }
     }
 }
+
+/*
+ * frame [ container(root) [...] comp ]
+ * - getDefaultComponent(<frame>) should implicitly down-cycle into the <container>.
+ * - getFirstComponent(<frame>) should implicitly down-cycle into the <container>.
+ */
+class PolicyTest11 extends AbstractPolicyTest {
+    protected Frame createFrame() {
+        Frame frame = (Frame) registerComponent("frame", new Frame("Test Frame"));
+        frame.setLayout(new FlowLayout());
+
+        Container cont = (Container)registerComponent("panel", new Panel());
+        cont.add(registerComponent("btn-1", new Button("button")));
+        cont.add(registerComponent("btn-2", new Button("button")));
+
+        frame.add(cont);
+        frame.add(registerComponent("btn-3", new Button("button")));
+
+        return frame;
+    }
+
+    protected void customizeHierarchy() {
+        ((Container)getComponent("frame")).setFocusTraversalPolicy(new DefaultFocusTraversalPolicy());
+        ((Container)getComponent("panel")).setFocusCycleRoot(true);
+    }
+
+    protected Map<String, String> getForwardOrder() {
+        Map<String, String> order = new HashMap<String, String>();
+        order.put("frame", "btn-1");
+        order.put("btn-1", "btn-2");
+        order.put("btn-2", "btn-1");
+        order.put("btn-3", "btn-1");
+        return order;
+    }
+
+    protected Map<String, String> getBackwardOrder() {
+        Map<String, String> order = new HashMap<String, String>();
+        order.put("btn-3", "btn-1");
+        order.put("btn-2", "btn-1");
+        order.put("btn-1", "btn-2");
+        order.put("frame", "btn-3");
+        return order;
+    }
+
+    protected String[] getContainersToTest() {
+        return new String[] {"frame"};
+    }
+
+    protected String getDefaultComp(String focusCycleRoot_id) {
+        return "btn-1";
+    }
+
+    protected String getFirstComp(String focusCycleRoot_id) {
+        return "btn-1";
+    }
+
+    protected String getLastComp(String focusCycleRoot_id) {
+        return "btn-3";
+    }
+}
--- a/jdk/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java	Wed Jun 17 21:13:04 2009 +0100
+++ b/jdk/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java	Thu Jun 18 11:28:54 2009 +0400
@@ -105,7 +105,7 @@
 */
 
 public class LayoutFTPTest {
-    final int TESTS_NUMBER = 10;
+    final int TESTS_NUMBER = 11;
 
     public static void main(String[] args) {
         LayoutFTPTest app = new LayoutFTPTest();
@@ -929,3 +929,63 @@
         }
     }
 }
+
+/*
+ * frame [ container(root) [...] comp ]
+ * - getDefaultComponent(<frame>) should implicitly down-cycle into the <container>.
+ * - getFirstComponent(<frame>) should implicitly down-cycle into the <container>.
+ */
+class PolicyTest11 extends AbstractPolicyTest {
+    protected Frame createFrame() {
+        JFrame jframe = (JFrame) registerComponent("jframe", new JFrame("Test Frame"));
+        jframe.setLayout(new FlowLayout());
+
+        Container cont = (Container)registerComponent("jpanel", new JPanel());
+        cont.add(registerComponent("btn-1", new JButton("jbutton")));
+        cont.add(registerComponent("btn-2", new JButton("jbutton")));
+
+        jframe.add(cont);
+        jframe.add(registerComponent("btn-3", new JButton("jbutton")));
+
+        return jframe;
+    }
+
+    protected void customizeHierarchy() {
+        ((Container)getComponent("jframe")).setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());
+        ((Container)getComponent("jpanel")).setFocusCycleRoot(true);
+    }
+
+    protected Map<String, String> getForwardOrder() {
+        Map<String, String> order = new HashMap<String, String>();
+        order.put("jframe", "btn-1");
+        order.put("btn-1", "btn-2");
+        order.put("btn-2", "btn-1");
+        order.put("btn-3", "btn-1");
+        return order;
+    }
+
+    protected Map<String, String> getBackwardOrder() {
+        Map<String, String> order = new HashMap<String, String>();
+        order.put("btn-3", "btn-1");
+        order.put("btn-2", "btn-1");
+        order.put("btn-1", "btn-2");
+        order.put("jframe", "btn-3");
+        return order;
+    }
+
+    protected String[] getContainersToTest() {
+        return new String[] {"jframe"};
+    }
+
+    protected String getDefaultComp(String focusCycleRoot_id) {
+        return "btn-1";
+    }
+
+    protected String getFirstComp(String focusCycleRoot_id) {
+        return "btn-1";
+    }
+
+    protected String getLastComp(String focusCycleRoot_id) {
+        return "btn-3";
+    }
+}