From 48ed6852bf333cd1cd230b40712c1ad96adcb446 Mon Sep 17 00:00:00 2001 From: Anton Tarasov Date: Thu, 18 Jun 2009 11:28:54 +0400 Subject: [PATCH] 4788402: SortingFocusTraversalPolicy: prob with non-focusable focus Cycle Root as first Reviewed-by: dcherepanov --- .../ContainerOrderFocusTraversalPolicy.java | 12 ++-- .../swing/SortingFocusTraversalPolicy.java | 9 ++- .../FocusTraversalPolicy/DefaultFTPTest.java | 62 ++++++++++++++++++- .../FocusTraversalPolicy/LayoutFTPTest.java | 62 ++++++++++++++++++- 4 files changed, 131 insertions(+), 14 deletions(-) diff --git a/jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java b/jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java index 187ddc54931..e3913a7fff9 100644 --- a/jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java +++ b/jdk/src/share/classes/java/awt/ContainerOrderFocusTraversalPolicy.java @@ -425,15 +425,13 @@ public class ContainerOrderFocusTraversalPolicy extends FocusTraversalPolicy } 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; } } } diff --git a/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java b/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java index 73c391faac5..715732fcee0 100644 --- a/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java +++ b/jdk/src/share/classes/javax/swing/SortingFocusTraversalPolicy.java @@ -444,11 +444,10 @@ public class SortingFocusTraversalPolicy 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; diff --git a/jdk/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java b/jdk/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java index 6ad3b1af9d0..b7c91667ae8 100644 --- a/jdk/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java +++ b/jdk/test/java/awt/Focus/FocusTraversalPolicy/DefaultFTPTest.java @@ -104,7 +104,7 @@ comp[unfocusable] - is set unfocusable. */ 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 @@ class PolicyTest10 extends AbstractPolicyTest { } } } + +/* + * frame [ container(root) [...] comp ] + * - getDefaultComponent() should implicitly down-cycle into the . + * - getFirstComponent() should implicitly down-cycle into the . + */ +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 getForwardOrder() { + Map order = new HashMap(); + 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 getBackwardOrder() { + Map order = new HashMap(); + 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"; + } +} diff --git a/jdk/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java b/jdk/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java index 329845c2ac6..12ef3c2789c 100644 --- a/jdk/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java +++ b/jdk/test/java/awt/Focus/FocusTraversalPolicy/LayoutFTPTest.java @@ -105,7 +105,7 @@ comp[unfocusable] - is set unfocusable. */ 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 @@ class PolicyTest10 extends AbstractPolicyTest { } } } + +/* + * frame [ container(root) [...] comp ] + * - getDefaultComponent() should implicitly down-cycle into the . + * - getFirstComponent() should implicitly down-cycle into the . + */ +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 getForwardOrder() { + Map order = new HashMap(); + 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 getBackwardOrder() { + Map order = new HashMap(); + 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"; + } +}