diff --git a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java index a51260abc57b..75e0946951f6 100644 --- a/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/encapsulateFields/EncapsulateFieldsDialog.java @@ -73,9 +73,9 @@ public class EncapsulateFieldsDialog extends RefactoringDialog implements Encaps private JTable myTable; private MyTableModel myTableModel; - private final JCheckBox myCbEncapsulateGet = new JCheckBox(); - private final JCheckBox myCbEncapsulateSet = new JCheckBox(); - private final JCheckBox myCbUseAccessorsWhenAccessible = new JCheckBox(); + private final JCheckBox myCbEncapsulateGet = new NonFocusableCheckBox(); + private final JCheckBox myCbEncapsulateSet = new NonFocusableCheckBox(); + private final JCheckBox myCbUseAccessorsWhenAccessible = new NonFocusableCheckBox(); private final JRadioButton myRbFieldPrivate = new JRadioButton(); private final JRadioButton myRbFieldProtected = new JRadioButton(); private final JRadioButton myRbFieldPackageLocal = new JRadioButton(); @@ -88,10 +88,6 @@ public class EncapsulateFieldsDialog extends RefactoringDialog implements Encaps private DocCommentPanel myJavadocPolicy; { - myCbEncapsulateGet.setFocusable(false); - myCbEncapsulateSet.setFocusable(false); - myCbUseAccessorsWhenAccessible.setFocusable(false); - myRbAccessorPackageLocal.setFocusable(false); myRbAccessorPrivate.setFocusable(false); myRbAccessorProtected.setFocusable(false); diff --git a/platform/platform-api/src/com/intellij/ide/ui/UISettings.java b/platform/platform-api/src/com/intellij/ide/ui/UISettings.java index 5cc315a820c1..f4175389bee6 100644 --- a/platform/platform-api/src/com/intellij/ide/ui/UISettings.java +++ b/platform/platform-api/src/com/intellij/ide/ui/UISettings.java @@ -88,6 +88,7 @@ public class UISettings implements PersistentStateComponent, Exporta public boolean OVERRIDE_NONIDEA_LAF_FONTS = false; public boolean SHOW_ICONS_IN_MENUS = true; public boolean DISABLE_MNEMONICS = SystemInfo.isMac; // IDEADEV-33409, should be disabled by default on MacOS + public boolean DISABLE_MNEMONICS_IN_CONTROLS = false; public boolean SORT_LOOKUP_ELEMENTS_LEXICOGRAPHICALLY = false; public int MAX_LOOKUP_WIDTH = 500; public int MAX_LOOKUP_LIST_HEIGHT = 11; diff --git a/platform/platform-api/src/com/intellij/openapi/actionSystem/Presentation.java b/platform/platform-api/src/com/intellij/openapi/actionSystem/Presentation.java index 1512b583e9a6..cadf861a845d 100644 --- a/platform/platform-api/src/com/intellij/openapi/actionSystem/Presentation.java +++ b/platform/platform-api/src/com/intellij/openapi/actionSystem/Presentation.java @@ -15,6 +15,7 @@ */ package com.intellij.openapi.actionSystem; +import com.intellij.ide.ui.UISettings; import com.intellij.util.ui.UIUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; @@ -139,8 +140,14 @@ public final class Presentation implements Cloneable { if (i >= text.length()) break; ch = text.charAt(i); if (ch != '_' && ch != '&') { - myMnemonic = Character.toUpperCase(ch); // mnemonics are case insensitive - myDisplayedMnemonicIndex = i - 1; + if (UISettings.getInstance().DISABLE_MNEMONICS_IN_CONTROLS) { + myMnemonic = 0; + myDisplayedMnemonicIndex = -1; + } + else { + myMnemonic = Character.toUpperCase(ch); // mnemonics are case insensitive + myDisplayedMnemonicIndex = i - 1; + } } } plainText.append(ch); diff --git a/platform/platform-api/src/com/intellij/ui/NonFocusableCheckBox.java b/platform/platform-api/src/com/intellij/ui/NonFocusableCheckBox.java index 74a5297b688c..cd0bea52063d 100644 --- a/platform/platform-api/src/com/intellij/ui/NonFocusableCheckBox.java +++ b/platform/platform-api/src/com/intellij/ui/NonFocusableCheckBox.java @@ -16,6 +16,8 @@ package com.intellij.ui; +import com.intellij.ide.ui.UISettings; + import javax.swing.*; /** @@ -24,10 +26,16 @@ import javax.swing.*; public class NonFocusableCheckBox extends JCheckBox { public NonFocusableCheckBox(String text) { super(text); - setFocusable(false); + initFocusability(); } public NonFocusableCheckBox() { - setFocusable(false); + initFocusability(); + } + + private void initFocusability() { + if (!UISettings.getInstance().DISABLE_MNEMONICS_IN_CONTROLS) { // Or that won't be keyboard accessible at all + setFocusable(false); + } } } diff --git a/platform/platform-api/src/com/intellij/util/ui/DialogUtil.java b/platform/platform-api/src/com/intellij/util/ui/DialogUtil.java index 873a19f1cea6..ea7670d384b2 100644 --- a/platform/platform-api/src/com/intellij/util/ui/DialogUtil.java +++ b/platform/platform-api/src/com/intellij/util/ui/DialogUtil.java @@ -15,6 +15,8 @@ */ package com.intellij.util.ui; +import com.intellij.ide.ui.UISettings; + import javax.swing.*; /** @@ -51,8 +53,15 @@ public class DialogUtil{ } if (mnemonic != '\0') { button.setText(realText.toString()); - button.setMnemonic(mnemonic); - button.setDisplayedMnemonicIndex(index); + if (UISettings.getInstance().DISABLE_MNEMONICS_IN_CONTROLS) { + button.setMnemonic(0); + button.setDisplayedMnemonicIndex(-1); + button.setFocusable(true); + } + else { + button.setMnemonic(mnemonic); + button.setDisplayedMnemonicIndex(index); + } } } } @@ -84,11 +93,18 @@ public class DialogUtil{ } if (mnemonic != '\0') { label.setText(realText.toString()); - label.setDisplayedMnemonic(mnemonic); + if (UISettings.getInstance().DISABLE_MNEMONICS_IN_CONTROLS) { + label.setDisplayedMnemonic(0); + label.setDisplayedMnemonicIndex(-1); + } + else { + label.setDisplayedMnemonic(mnemonic); + label.setDisplayedMnemonicIndex(index); + } + if (target != null) { label.setLabelFor(target); } - label.setDisplayedMnemonicIndex(index); } } } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java index 9b0d4537914b..fa4d1ff12f99 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/AppearanceConfigurable.java @@ -152,6 +152,9 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab update |= settings.DISABLE_MNEMONICS != myComponent.myDisableMnemonics.isSelected(); settings.DISABLE_MNEMONICS = myComponent.myDisableMnemonics.isSelected(); + update |= settings.DISABLE_MNEMONICS_IN_CONTROLS != myComponent.myDisableMnemonicInControlsCheckBox.isSelected(); + settings.DISABLE_MNEMONICS_IN_CONTROLS = myComponent.myDisableMnemonicInControlsCheckBox.isSelected(); + update |= settings.SHOW_ICONS_IN_QUICK_NAVIGATION != myComponent.myHideIconsInQuickNavigation.isSelected(); settings.SHOW_ICONS_IN_QUICK_NAVIGATION = myComponent.myHideIconsInQuickNavigation.isSelected(); @@ -211,6 +214,7 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab myComponent.myLafComboBox.setSelectedItem(LafManager.getInstance().getCurrentLookAndFeel()); myComponent.myOverrideLAFFonts.setSelected(settings.OVERRIDE_NONIDEA_LAF_FONTS); myComponent.myDisableMnemonics.setSelected(settings.DISABLE_MNEMONICS); + myComponent.myDisableMnemonicInControlsCheckBox.setSelected(settings.DISABLE_MNEMONICS_IN_CONTROLS); boolean alphaModeEnabled = WindowManagerEx.getInstanceEx().isAlphaModeSupported(); if (alphaModeEnabled) { @@ -247,6 +251,7 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab isModified |= myComponent.myOverrideLAFFonts.isSelected() != settings.OVERRIDE_NONIDEA_LAF_FONTS; isModified |= myComponent.myDisableMnemonics.isSelected() != settings.DISABLE_MNEMONICS; + isModified |= myComponent.myDisableMnemonicInControlsCheckBox.isSelected() != settings.DISABLE_MNEMONICS_IN_CONTROLS; isModified |= myComponent.myHideIconsInQuickNavigation.isSelected() != settings.SHOW_ICONS_IN_QUICK_NAVIGATION; @@ -318,6 +323,7 @@ public class AppearanceConfigurable extends BaseConfigurable implements Searchab private JCheckBox myHideIconsInQuickNavigation; private JCheckBox myCbDisplayIconsInMenu; private JCheckBox myDisableMnemonics; + private JCheckBox myDisableMnemonicInControlsCheckBox; private JBCheckBox myHideNavigationPopupsCheckBox; private JCheckBox myAllowMergeButtons; diff --git a/platform/platform-impl/src/com/intellij/ide/ui/AppearancePanel.form b/platform/platform-impl/src/com/intellij/ide/ui/AppearancePanel.form index cdb3caab141c..062d2941c78e 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/AppearancePanel.form +++ b/platform/platform-impl/src/com/intellij/ide/ui/AppearancePanel.form @@ -3,7 +3,7 @@ - + @@ -235,7 +235,7 @@ - + @@ -258,7 +258,7 @@ - + @@ -275,6 +275,15 @@ + + + + + + + + + diff --git a/platform/platform-resources-en/src/messages/KeyMapBundle.properties b/platform/platform-resources-en/src/messages/KeyMapBundle.properties index 378d46104f28..b8ee4ef86c4b 100644 --- a/platform/platform-resources-en/src/messages/KeyMapBundle.properties +++ b/platform/platform-resources-en/src/messages/KeyMapBundle.properties @@ -99,3 +99,4 @@ filter.enable.second.stroke.checkbox=Enable filter.first.stroke.input=First Stroke: filter.second.stroke.input=Second Stroke: filter.shortcut.action.text=Shortcut Filter +disable.mnemonic.in.controls.check.box=Disable mnemonic in controls