The java.awt.Component.transferFocus and the default handler for the TAB key have a
different behaviour; in particular, the tansferFocus method do not
descend panels in the widget tree, as a consequence of the fact the
Panel.isFocusTraversable method return false.

The TAB shortcut handler do traverse panels, because it do not call the 
transferFocus method but it have its own implementation of traversal

A quick check with the Sun JDK show that the Sun transferFocus method
*does* traverse panels, so i suppose that is the correct behaviour;
the following patch implement this behaviour for the transferFocus method.

Ciao     
         Maurizio


-- snip -----------------------------------------------------------------------------
diff -ru kaffe-1.0.5.orig/libraries/javalib/java/awt/Component.java 
kaffe-1.0.5/libraries/javalib/java/awt/Component.java
--- kaffe-1.0.5.orig/libraries/javalib/java/awt/Component.java  Mon Oct 18 07:24:12 
1999
+++ kaffe-1.0.5/libraries/javalib/java/awt/Component.java       Wed Apr 26 15:01:03 
+2000
@@ -1720,18 +1720,17 @@
                /* Look for next focusable component after me */
                for (start++; start < end; start++) {
                        Component c = parent.getComponent(start);
-                       if (!(c.isEnabled() && ((c.flags & IS_VISIBLE) !=0) && 
c.isFocusTraversable())) {
-                               continue;
-                       }
-                       if (!(c instanceof Container)) {
-                               c.requestFocus();
-                               return;
-                       }
 
-                       /* We found a new container, drop into it */
+                       if (c.isEnabled() && ((c.flags & IS_VISIBLE) !=0) && 
+c.isFocusTraversable()) {
+                         // Then if it is enabled, visible and focus traversable set 
+the focus to it
+                         c.requestFocus();
+                         return;
+                       } else if (c instanceof Container) {
+                         // If it is a container drop into it
                        parent = (Container)c;
                        end = parent.getComponentCount();
                        start = -1;
+                       }
                }
 
                curr = parent;

-- snip -----------------------------------------------------------------------------
-- 
Maurizio De Cecco
MandrakeSoft            http://www.mandrakesoft.com/

Reply via email to