Mercurial > hg > openjdk > lambda > jdk
changeset 10461:af273c9b564a
8024329: [macosx] JRadioButtonMenuItem behaves like a checkbox when using the ScreenMenuBar
Reviewed-by: anthony, serb
author | pchelko |
---|---|
date | Fri, 11 Oct 2013 18:04:45 +0400 |
parents | 2f7f6995fa64 |
children | f65895a2959e |
files | src/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java |
diffstat | 1 files changed, 20 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java Fri Oct 11 17:57:50 2013 +0400 +++ b/src/macosx/classes/com/apple/laf/ScreenMenuItemCheckbox.java Fri Oct 11 18:04:45 2013 +0400 @@ -93,9 +93,9 @@ } if (fMenuItem instanceof JCheckBoxMenuItem) { - setState(((JCheckBoxMenuItem)fMenuItem).isSelected()); + forceSetState(fMenuItem.isSelected()); } else { - setState(fMenuItem.getModel().isSelected()); + forceSetState(fMenuItem.getModel().isSelected()); } } @@ -196,10 +196,10 @@ switch (e.getStateChange()) { case ItemEvent.SELECTED: - setState(true); + forceSetState(true); break; case ItemEvent.DESELECTED: - setState(false); + forceSetState(false); break; } } @@ -210,4 +210,20 @@ ((CCheckboxMenuItem)peer).setIsIndeterminate(indeterminate); } } + + /* + * The CCheckboxMenuItem peer is calling setState unconditionally every time user clicks the menu + * However for Swing controls in the screen menu bar it is wrong - the state should be changed only + * in response to the ITEM_STATE_CHANGED event. So the setState is overridden to no-op and all the + * correct state changes are made with forceSetState + */ + + @Override + public synchronized void setState(boolean b) { + // No Op + } + + private void forceSetState(boolean b) { + super.setState(b); + } }