JDK-4492892 : REGRESSION: windows l&f: mnemonics do not work in menus
  • Type: Bug
  • Component: client-libs
  • Sub-Component: javax.swing
  • Affected Version: 1.4.0
  • Priority: P1
  • Status: Closed
  • Resolution: Fixed
  • OS:
    generic,linux,windows_98,windows_2000 generic,linux,windows_98,windows_2000
  • CPU: x86,sparc
  • Submitted: 2001-08-16
  • Updated: 2002-03-07
  • Resolved: 2001-11-07
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
1.4.0 rc1Fixed
Related Reports
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Duplicate :  
Relates :  
Relates :  
Description
-------------------------------------------------------------
###@###.### 16Aug01

Using 1.4.0-beta2-b76

1. Bring up SwingSet2 (java -jar SwingSet2.jar)
2. Switch to Windows Style Look and Feel
    (Under "Look and Feel" menu
3. Press Alt-i  then  f
4. Press Alt-f  then  x

Action 3 should turn off tooltips, but does not.
Action 5 should exit the application, but does not.
------------------------------------------------

Comments
CONVERTED DATA BugTraq+ Release Management Values COMMIT TO FIX: generic merlin-beta3 merlin-rc1 FIXED IN: merlin-rc1 INTEGRATED IN: merlin-rc1 VERIFIED IN: merlin-rc1
24-08-2004

SUGGESTED FIX Name: pzR10082 Date: 08/24/2001 ------- BasicPopupMenuUI.java ------- *** /tmp/sccs.UP6eGi Fri Aug 24 19:15:21 2001 --- BasicPopupMenuUI.java Fri Aug 24 19:14:51 2001 *************** *** 65,70 **** --- 65,74 ---- popupMenu.getLayout() instanceof UIResource) popupMenu.setLayout(new DefaultMenuLayout(popupMenu, BoxLayout.Y_AXIS)); + // This is needed for popup menu to get focus when inside a + // heavyweight popup (bug 4492892). + popupMenu.setFocusable(true); + popupMenu.setOpaque(true); LookAndFeel.installBorder(popupMenu, "PopupMenu.border"); LookAndFeel.installColorsAndFont(popupMenu, ###@###.### 2001-08-24 ====================================================================== Name: pzR10082 Date: 10/29/2001 The suggested fix is quite big, so it's attached as suggestedfix.tgz ###@###.### 2001-10-26 --dg+3SHh8LO Content-Type: application/octet-stream Content-Disposition: attachment; filename="suggestedfix.tgz" Content-Transfer-Encoding: base64 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 --dg+3SHh8LO-- ======================================================================
24-08-2004

EVALUATION This is happening because the JPopupMenu is not getting focus, even though we're requesting it. This also only happens on 2000, or at least I couldn't reproduce on NT. I'm passing to awt for further investigation. ###@###.### 2001-08-17 Name: dmR10075 Date: 08/22/2001 ###@###.### Bug is regression from last focus merge(delta 1.167 Window.java). It adds check to isFocusableWindow which return false if there is no child component in Window which can be focused: 1.167 // A Window must have at least one Component in its root focus 1.167 // traversal cycle to be focusable. 1.167 if (getFocusTraversalPolicy().getDefaultComponent(this) == null) { 1.167 return false; 1.167 } Under Win2000 and Win98 Swing uses heavyweight popup Window(com.sun.java.swing.plaf.windows.WindowsPopupWindow) for all kinds of popups to provide menu animation and such. When Swing shows menu it shows Window and then they try to request focus right after they made it visible. Check above returns false and it makes this window unable to become focused. That's why it is unable to process key events as appropriate. Check above returns false because there is actually no focusable children in that popup Window - JMenuItem.isFocusable() returns false by default. It looks odd because we actually want to make some of that items focused. I contacted Swing developers for clarifications on that matter. I suspect that Window used for HeavyweightPopups will behave the same. ====================================================================== Name: dmR10075 Date: 08/23/2001 ###@###.### ====================================================================== Name: dmR10075 Date: 08/23/2001 ###@###.### Discussion with Peter Zelezniakov from Swing team revelaed that actual focus holder in the case of popup menu should be JPopupMenu. From the source code I see that it was rejected as being focusable by one of the checks in LayoutFocusTraversalPolicy.accept: by the check that verifies that JComponent has some InputMap installed. Comment to LayoutFocusTraversalPolicy.accept says that : "this method will accept a Component only if * it is visible, displayable, enabled, and focusable. If the Component is * a JComponent, it must also have a non-null, non-empty InputMap." I verified that if we skip this check for JPopupMenu then it will receive focus and mnemonics will work as expected. Recategorize to Swing for further investigation. ====================================================================== Name: pzR10082 Date: 08/24/2001 We can call setFocusable(true) on popup menu during LAF installation. This would make DefaultFocusTraversalPolicy accept the popup menu. LayoutFocusTraversalPolicy delegates to DefaultFocusTraversalPolicy, so it would accept it too. ###@###.### 2001-08-24 ====================================================================== Name: pzR10082 Date: 09/27/2001 This bug is still reproducible on Solaris and Linux with B80, despite the fix integrated and working, i.e. focus is passed to popup menu when it appears. However, key events aren't sent to popup menu. When the popup appears: - Popup$HeavyWeightWindow becomes focused Window; - The popup menu becomes focus owner. This is correct. However, the popup menu does not receive key events, even though it owns focus. When i press a key, it seems no component receives notification. I can't find any single component on which dispatchEvent() is called. When we cancel the popup menu (using mouse), the main frame gets focus, and key events are processed properly. Looks like key event processing doesn't work when heavyweight popup appears. This is an AWT problem. This may be related to bug #4497301. ###@###.### 2001-09-27 ====================================================================== Name: pzR10082 Date: 10/04/2001 The fix suggested for this bug eliminates the original problem with heavyweight window unable to become focused. However, after the fix had been integrated, some change occurred (most likely in AWT code) so that the JPopupMenu didn't receive focus for some other reason. When MenuSelectionManager tries to request focus on popup menu, call to requestFocus() returns false. ###@###.### 2001-10-04 ====================================================================== Name: pzR10082 Date: 10/29/2001 As of current AWT architecture, cross-window focus transfers are impossible on Solaris. This is why heavyweight popup menus do not receive focus, and mnemonics do not work. We have to redesign menu system so that it works without passing focus to popup menu. The approach suggested here is to set focus on JRootPane when a menu is activated. Then installed on the JRootPane are action/input maps used for keyboard menu navigation, and a KeyListener that forwards key events to MenuSelectionManager. This KeyListener is needed in order for menu mnemonics to work. We also should temporarily disable focus traversal keys for the JRootPane, because focus should not be transfered anywhere while menu is active. ###@###.### 2001-10-26 ======================================================================
26-10-2001