Index: core/execution/src/org/netbeans/core/execution/resources/layer.xml =================================================================== RCS file: /cvs/core/execution/src/org/netbeans/core/execution/resources/layer.xml,v retrieving revision 1.20 diff -u -u -r1.20 layer.xml --- core/execution/src/org/netbeans/core/execution/resources/layer.xml 24 Jun 2004 10:22:54 -0000 1.20 +++ core/execution/src/org/netbeans/core/execution/resources/layer.xml 22 Aug 2004 10:03:27 -0000 @@ -39,10 +39,10 @@ - + - + Index: core/favorites/src/org/netbeans/modules/favorites/resources/layer.xml =================================================================== RCS file: /cvs/core/favorites/src/org/netbeans/modules/favorites/resources/layer.xml,v retrieving revision 1.7 diff -u -u -r1.7 layer.xml --- core/favorites/src/org/netbeans/modules/favorites/resources/layer.xml 24 Jun 2004 10:23:37 -0000 1.7 +++ core/favorites/src/org/netbeans/modules/favorites/resources/layer.xml 22 Aug 2004 10:03:28 -0000 @@ -49,10 +49,10 @@ - + - + Index: core/output/src/org/netbeans/core/output/resources/layer.xml =================================================================== RCS file: /cvs/core/output/src/org/netbeans/core/output/resources/layer.xml,v retrieving revision 1.7 diff -u -u -r1.7 layer.xml --- core/output/src/org/netbeans/core/output/resources/layer.xml 18 May 2004 17:20:45 -0000 1.7 +++ core/output/src/org/netbeans/core/output/resources/layer.xml 22 Aug 2004 10:03:28 -0000 @@ -36,7 +36,7 @@ - + Index: core/output2/src/org/netbeans/core/output2/layer.xml =================================================================== RCS file: /cvs/core/output2/src/org/netbeans/core/output2/layer.xml,v retrieving revision 1.7 diff -u -u -r1.7 layer.xml --- core/output2/src/org/netbeans/core/output2/layer.xml 17 Aug 2004 02:14:38 -0000 1.7 +++ core/output2/src/org/netbeans/core/output2/layer.xml 22 Aug 2004 10:03:28 -0000 @@ -43,7 +43,7 @@ - + Index: core/src/org/netbeans/core/ShortcutsFolder.java =================================================================== RCS file: /cvs/core/src/org/netbeans/core/ShortcutsFolder.java,v retrieving revision 1.19 diff -u -u -r1.19 ShortcutsFolder.java --- core/src/org/netbeans/core/ShortcutsFolder.java 27 Jul 2004 04:19:45 -0000 1.19 +++ core/src/org/netbeans/core/ShortcutsFolder.java 22 Aug 2004 10:03:30 -0000 @@ -17,6 +17,8 @@ import java.awt.*; import java.awt.event.*; import java.util.*; +import java.util.Collection; +import java.util.List; import javax.swing.text.Keymap; import javax.swing.*; @@ -69,7 +71,7 @@ /** Creates new ShortcutsFolder */ - private ShortcutsFolder(DataFolder f) { + ShortcutsFolder(DataFolder f) { super(f); recreate(); } @@ -444,7 +446,19 @@ } } } else { - InstanceDataObject.remove(f, r.instanceName(), r.instanceClass()); + String instanceName = r.instanceName(); + if (!InstanceDataObject.remove(f, instanceName, r.instanceClass())) { + //We may be deleting a wildcard keystroke, and/or the + //order defined in the layer may not be the same as + //what we were fed by the shortcuts editor, so search + //all the possible variants + String[] permutations = getPermutations(instanceName); + for (int i=0; i < permutations.length; i++) { + if (InstanceDataObject.remove(f, permutations[i], r.instanceClass())) { + break; + } + } + } } } else { // It is '.shadow' file FileObject root = f.getPrimaryFile(); @@ -459,6 +473,18 @@ if(foRemove != null) { foRemove.delete(); } + String[] permutations = getPermutations(r.instanceName()); + //We may be deleting a wildcard keystroke, and/or the + //order defined in the layer may not be the same as + //what we were fed by the shortcuts editor, so search + //all the possible variants + for (int i=0; i < permutations.length; i++) { + foRemove = root.getFileObject(permutations[i], "shadow"); + if (foRemove != null) { + foRemove.delete(); + break; + } + } } } } catch (ClassNotFoundException ex) { @@ -468,6 +494,107 @@ } } } + + /** + * There is no required ordering of key modifiers (C, M, S, A), and the + * D (default) wildcard character can map to either C or M depending on + * the platform. So when we need to delete a keybinding, the editor has + * given us one possible ordering, but not necessarily the correct one; it + * has also given us a hard keybinding, but the key may really be bound to + * D. So, for "MAS-F5" (meta-alt-shift F5) on the pc, we need to check + * MSA-F5, SMA-F5, SAM-F5, AMS-F5, ASM-F5; on the mac, we also need to check + * the same permutations of DAS-F5, since it may be registered with the + * wildcard character. + *

+ * Finally, for each permutation, it is legal to separate characters with + * dashes - so for each permutation, we must also check for a hyphenated + * variant - i.e. for MAS-F5, we must check M-A-S-F5. Note that mixed + * hyphenation (M-AS-F5) is not supported. It either is or it isn't. + * + */ + static String[] getPermutations (String name) { + String key = KeyEvent.META_MASK == Toolkit.getDefaultToolkit().getMenuShortcutKeyMask() ? + "M" : "C"; //NOI18N + + int pos = name.lastIndexOf ("-"); //NOI18N + String keyPart = name.substring (pos); + String modsPart = Utilities.replaceString (name.substring (0, pos), "-", ""); + if (modsPart.length() > 1) { + Collection perms = new HashSet(modsPart.length() * modsPart.length()); + int idx = name.indexOf(key); + if (idx != -1) { + //First, try with the wildcard key. Remove all hyphens - we'll + //put them back later + StringBuffer sb = new StringBuffer(modsPart); + sb.replace(idx, idx+1, "D"); + perms.add (sb.toString() + keyPart); + getAllPossibleOrderings (sb.toString(), keyPart, perms); + createHyphenatedPermutation(sb.toString().toCharArray(), perms, keyPart); + } else { + idx = name.indexOf ("D"); //NOI18N + if (idx != -1) { + StringBuffer sb = new StringBuffer(modsPart); + sb.replace(idx, idx+1, key); + perms.add (sb.toString() + keyPart); + getAllPossibleOrderings (sb.toString(), keyPart, perms); + createHyphenatedPermutation(sb.toString().toCharArray(), perms, keyPart); + } + } + getAllPossibleOrderings (modsPart, keyPart, perms); + createHyphenatedPermutation(modsPart.toCharArray(), perms, keyPart); + return (String[]) perms.toArray(new String[perms.size()]); + } else { + return "C".equals (modsPart) ? + new String[] {"D" + keyPart} : new String[0]; + } + } + + /** + * Retrieves all the possible orders for the passed in string, and puts them + * in the passed collection, appending toAppend to each. + */ + static void getAllPossibleOrderings (String s, String toAppend, final Collection store) { + char[] c = s.toCharArray(); + mutate (c, store, 0, toAppend); + String[] result = (String[]) store.toArray(new String[store.size()]); + } + + /** + * Recursively generates all possible orderings of the passed char array + */ + private static void mutate(char[] c, Collection l, int n, String toAppend) { + if (n == c.length) { + l.add (new String(c) + toAppend); + createHyphenatedPermutation(c, l, toAppend); + return; + } + //XXX could be optimized to eliminate duplicates + for (int i=0; i < c.length; i++) { + char x = c[i]; + c[i] = c[n]; + c[n] = x; + if (n < c.length) { + mutate (c, l, n+1, toAppend); + } + } + } + + /** + * Inserts "-" characters between each character in the char array and + * adds the result + toAppend to the collection. + */ + static void createHyphenatedPermutation (char[] c, Collection l, String toAppend) { + if (c.length == 1) { + return; + } + StringBuffer sb = new StringBuffer (new String(c)); + for (int i=c.length-1; i >= 1; i-=1) { + sb.insert (i, '-'); + } + sb.append (toAppend); + l.add (sb.toString()); + } + private static DataObject findForAction (DataFolder actionsFolder, Action a) { if (actionsFolder == null) { Index: core/test/unit/src/org/netbeans/core/ShortcutsFolderTest.java =================================================================== RCS file: core/test/unit/src/org/netbeans/core/ShortcutsFolderTest.java diff -N core/test/unit/src/org/netbeans/core/ShortcutsFolderTest.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ core/test/unit/src/org/netbeans/core/ShortcutsFolderTest.java 22 Aug 2004 10:03:33 -0000 @@ -0,0 +1,326 @@ +/* + * Sun Public License Notice + * + * The contents of this file are subject to the Sun Public License + * Version 1.0 (the "License"). You may not use this file except in + * compliance with the License. A copy of the License is available at + * http://www.sun.com/ + * + * The Original Code is NetBeans. The Initial Developer of the Original + * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun + * Microsystems, Inc. All Rights Reserved. + */ +package org.netbeans.core; + +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.io.File; +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashSet; +import java.util.MissingResourceException; +import java.util.Properties; +import java.util.ResourceBundle; +import java.util.StringTokenizer; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.KeyStroke; +import junit.framework.*; +import org.netbeans.junit.*; +import org.openide.ErrorManager; +import org.openide.cookies.InstanceCookie; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileSystem; +import org.openide.filesystems.LocalFileSystem; +import org.openide.filesystems.Repository; +import org.openide.loaders.DataFolder; +import org.openide.loaders.DataObject; +import org.openide.util.Lookup; +import org.openide.util.LookupListener; +import org.openide.util.Utilities; +import junit.textui.TestRunner; + +/** + * Tests shortcuts folder to ensure it handles wildcard keystrokes correctly. + */ +public class ShortcutsFolderTest extends NbTestCase { + /** Use for internal test execution inside IDE + * @param args command line arguments + */ + public static void main(String[] args) { + TestRunner.run(new NbTestSuite(ShortcutsFolderTest.class)); + } + + /** Constructor required by JUnit. + * @param testName method name to be used as testcase + */ + public ShortcutsFolderTest(String s) { + super(s); + } + + public void testHyphenation (String s) { + HashSet set = new HashSet(); + char[] c = new String("ABCD").toCharArray(); + ShortcutsFolder.createHyphenatedPermutation (c, set, "-F5"); + + assertTrue (set.contains("A-B-C-D-F5")); + } + + public void testPermutations () { + HashSet set = new HashSet(); + + ShortcutsFolder.getAllPossibleOrderings("BANG", "-F5", set); + String[] permutations = new String[] { + "BNAG", "BNGA", "BGNA", "BAGN", "BGAN", + "ANBG", "ABGN", "AGBN", "ANGB", "ABNG", "AGNB", + "NBGA", "NGBA", "NABG", "NGAB", "NBAG", "NAGB", + "GNAB", "GBAN", "GBNA", "GNBA", "GANB", "GABN", + }; + + for (int i=0; i < permutations.length; i++) { + assertTrue ("Permutation of BANG not generated: " + permutations[i], + set.contains(permutations[i] + "-F5")); + } + } + + public void testPermutationsIncludeHyphenatedVariants() { + HashSet set = new HashSet(); + + ShortcutsFolder.getAllPossibleOrderings("BANG", "-F5", set); + String[] permutations = new String[] { + "B-N-A-G", "B-N-G-A", "B-G-N-A", "B-A-G-N", "B-G-A-N", + "A-N-B-G", "A-B-G-N", "A-G-B-N", "A-N-G-B", "A-B-N-G", "A-G-N-B", + "N-B-G-A", "N-G-B-A", "N-A-B-G", "N-G-A-B", "N-B-A-G", "N-A-G-B", + "G-N-A-B", "G-B-A-N", "G-B-N-A", "G-N-B-A", "G-A-N-B", "G-A-B-N", + }; + + for (int i=0; i < permutations.length; i++) { + assertTrue ("Permutation of BANG not generated: " + permutations[i], + set.contains(permutations[i] + "-F5")); + } + } + + public void testPermutationsContainConvertedWildcard () { + String targetChar = (Utilities.getOperatingSystem() & Utilities.OS_MAC) != 0 + ? "M" : "C"; + + String[] s = ShortcutsFolder.getPermutations("DA-F5"); + HashSet set = new HashSet (Arrays.asList(s)); + set.add ("DA-F5"); //Permutations will not contain the passed value + + String[] permutations = new String[] { + targetChar+"A-F5", "A" + targetChar + "-F5", + targetChar+"-A-F5", "A-" + targetChar + "-F5", + "AD-F5", "A-D-F5", "D-A-F5" + }; + + for (int i=0; i < permutations.length; i++) { + assertTrue ("Permutation of DA-F5 not generated:" + + permutations[i] + "-(generated:" + set + ")", + set.contains(permutations[i])); + } + } + + public void testPermutationsIncludeWildcardIfSpecifiedKeyIsToolkitAccelerator () { + String targetChar = (Utilities.getOperatingSystem() & Utilities.OS_MAC) != 0 + ? "M" : "C"; + + String[] s = ShortcutsFolder.getPermutations(targetChar + "A-F5"); + + String[] permutations = new String[] { + "A" + targetChar + "-F5", "A-" + targetChar + "-F5", + "DA-F5", "D-A-F5" + }; + + HashSet set = new HashSet (Arrays.asList(s)); + set.add (targetChar + "A-F5"); //Permutations will not contain the passed value + + for (int i=0; i < permutations.length; i++) { + assertTrue ("Permutation of " + targetChar + "A-F5 not generated:" + + permutations[i] + "-(generated:" + set + ")", + set.contains(permutations[i].intern())); + } + } + + private static String lastDir = null; + private File getTempDir() { + String outdir = System.getProperty("java.io.tmpdir"); //NOI18N + if (!outdir.endsWith(File.separator)) { + outdir += File.separator; + } + String dirname = Long.toHexString(System.currentTimeMillis()); + lastDir = outdir + dirname + File.separator; + File dir = new File (outdir + dirname); + try { + dir.mkdir(); + } catch (Exception ioe) { + ioe.printStackTrace(); + fail ("Exception creating temporary dir for tests " + dirname + " - " + ioe.getMessage()); + } + dir.deleteOnExit(); + return dir; + } + + private static Repository repository = null; + private FileSystem createTestingFilesystem () { + try { + LocalFileSystem result = new LocalFileSystem(); + result.setRootDirectory(getTempDir()); + repository = new Repository (result); + System.setProperty ("org.openide.util.Lookup", "org.netbeans.core.ShortcutsFolderTest$LKP"); + return result; + } catch (Exception e) { + e.printStackTrace(); + fail (e.getMessage()); + } + return null; + } + + private FileObject getFolderForShortcuts(FileSystem fs) { + FileObject result = null; + try { + result = fs.getRoot().getFileObject("Shortcuts"); + if (result == null) { + result = fs.getRoot().createFolder("Shortcuts"); + } + } catch (Exception e) { + e.printStackTrace(); + fail(e.getMessage()); + } + return result; + } + + private ShortcutsFolder createShortcutsFolder(FileSystem fs) { + try { + DataObject dob = DataObject.find(getFolderForShortcuts(fs)); + ShortcutsFolder result = new ShortcutsFolder ((DataFolder)dob); + ShortcutsFolder.shortcutsFolder = result; + return result; + } catch (Exception e) { + e.printStackTrace(); + fail ("Exception creating shortcuts folder on " + fs); + return null; + } + } + + public void testShortcutsFolderDeletesShortcutWhenNameIsMisordered() throws Exception { + FileSystem fs = createTestingFilesystem(); + FileObject fo = getFolderForShortcuts(fs); + + FileObject data1 = fo.createData("AD-F5.instance"); + assertNotNull(data1); + data1.setAttribute("instanceClass", "org.netbeans.core.ShortcutsFolderTest$TestAction"); + + FileObject data2 = fo.createData("AS-F5.instance"); + assertNotNull(data2); + data2.setAttribute("instanceClass", "org.netbeans.core.ShortcutsFolderTest$TestAction"); + + File file = new File (lastDir + "Shortcuts" + File.separator + "AD-F5.instance"); + assertTrue ("Actual file not created: " + file.getPath(), file.exists()); + + + ShortcutsFolder sf = createShortcutsFolder(fs); + System.err.println("Created shortcuts folder " + sf); + + sf.waitShortcutsFinished(); + + DataObject ob = DataObject.find (data1); + assertNotNull("Data object not found: " + data1.getPath(), ob); + System.err.println("Found data object " + data1); + + InstanceCookie ck = (InstanceCookie) ob.getCookie(InstanceCookie.class); + Object obj = ck.instanceCreate(); + + assertTrue ("InstanceCookie was not an instanceof TestAction - " + obj, obj instanceof TestAction); + + System.err.println("Got an instance: " + obj); + + KeyStroke stroke = KeyStroke.getKeyStroke(KeyEvent.VK_F5, KeyEvent.ALT_MASK | Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()); + Action action = (Action) obj; + + ShortcutsFolder.applyChanges(Arrays.asList(new Object[] {new ShortcutsFolder.ChangeRequest (stroke, action, false)})); + + ShortcutsFolder.refreshGlobalMap(); + + FileObject now = fo.getFileObject ("AD-F5.instance"); + assertNull ("File object should be deleted - ", now); + + assertFalse ("File still exists: " + lastDir + "AD-F5.instance", file.exists()); + + file = new File (lastDir + "Shortcuts" + File.separator + "AS-F5.instance"); + assertTrue ("File should not have been deleted: " + file.getPath(), file.exists()); + + } + + public static class TestAction extends AbstractAction { + public void actionPerformed (ActionEvent ae) {} + } + + public static class LKP extends Lookup { + public Object lookup (Class clazz) { + if (Repository.class == clazz) { + return repository; + } + if (ErrorManager.class == clazz) { + return new EM(); + } + return null; + } + + public Lookup.Result lookup (final Lookup.Template tpl) { + Lookup.Result r = new Lookup.Result() { + public Collection allInstances() { + if (tpl.getType() == ErrorManager.class) { + return Arrays.asList(new Object[] { new EM()}); + } else { + return Collections.EMPTY_LIST; + } + } + + public void addLookupListener (LookupListener l) {} + + public void removeLookupListener (LookupListener l){} + }; + + return r; + } + } + + public static class EM extends ErrorManager { + public Throwable attachAnnotations (Throwable t, Annotation[] arr) { + return t; + } + + public void log (int i, String s) { + System.err.println(s); + } + + public Annotation[] findAnnotations (Throwable t) { + return new Annotation[0]; + } + + public Throwable annotate ( + Throwable t, int severity, + String message, String localizedMessage, + Throwable stackTrace, java.util.Date date + ) { + System.err.println(message); + t.printStackTrace(); + return t; + } + + public void notify (int severity, Throwable t) { + t.printStackTrace(); + } + + public ErrorManager getInstance(String name) { + return this; + } + } + +} Index: core/ui/src/org/netbeans/core/ui/MenuWarmUpTask.java =================================================================== RCS file: /cvs/core/ui/src/org/netbeans/core/ui/MenuWarmUpTask.java,v retrieving revision 1.9 diff -u -u -r1.9 MenuWarmUpTask.java --- core/ui/src/org/netbeans/core/ui/MenuWarmUpTask.java 19 Aug 2004 12:45:01 -0000 1.9 +++ core/ui/src/org/netbeans/core/ui/MenuWarmUpTask.java 22 Aug 2004 10:03:34 -0000 @@ -43,35 +43,6 @@ private Component[] comps; - /** - * Issue 32733 - the keyboard shortcut for FIND will use this method to - * determine its visibility. For non-solaris operating systems, there is - * no find key (XXX ask the HP folks about VMS), so that shouldn't be the - * shortcut displayed in the menu. - * - * While this method doesn't really belong in a warmup task, it's silly to - * create an extra class just for this sort of thing. - */ - public static boolean isNotSolaris() { - return Utilities.getOperatingSystem() != Utilities.OS_SOLARIS; - } - - /** - * Used to determine whether to bind Delete or Backspace to DeleteAction - - * mac keyboards don't have a delete key. - */ - public static boolean isMac() { - return Utilities.getOperatingSystem() == Utilities.OS_MAC; - } - - /** - * Used to determine whether to bind Delete or Backspace to DeleteAction - - * mac keyboards don't have a delete key. - */ - public static boolean isNotMac() { - return !isMac(); - } - /** Actually performs pre-heat. */ public void run() { Index: core/ui/src/org/netbeans/core/ui/resources/layer.xml =================================================================== RCS file: /cvs/core/ui/src/org/netbeans/core/ui/resources/layer.xml,v retrieving revision 1.72 diff -u -u -r1.72 layer.xml --- core/ui/src/org/netbeans/core/ui/resources/layer.xml 20 Aug 2004 08:34:31 -0000 1.72 +++ core/ui/src/org/netbeans/core/ui/resources/layer.xml 22 Aug 2004 10:03:35 -0000 @@ -243,7 +243,7 @@ - + @@ -253,21 +253,13 @@ - - - - - - - - - + - + @@ -279,7 +271,7 @@ - + @@ -287,22 +279,20 @@ - + - - - + - + @@ -310,18 +300,18 @@ - + - + - + Index: core/windows/src/org/netbeans/core/windows/resources/layer.xml =================================================================== RCS file: /cvs/core/windows/src/org/netbeans/core/windows/resources/layer.xml,v retrieving revision 1.32 diff -u -u -r1.32 layer.xml --- core/windows/src/org/netbeans/core/windows/resources/layer.xml 27 Jul 2004 15:47:11 -0000 1.32 +++ core/windows/src/org/netbeans/core/windows/resources/layer.xml 22 Aug 2004 10:03:35 -0000 @@ -130,14 +130,15 @@ + - - + + @@ -148,18 +149,18 @@ - + - + - + - + Index: debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/resources/mf-layer.xml =================================================================== RCS file: /cvs/debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/resources/mf-layer.xml,v retrieving revision 1.21 diff -u -u -r1.21 mf-layer.xml --- debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/resources/mf-layer.xml 27 Jul 2004 06:29:12 -0000 1.21 +++ debuggerjpda/ui/src/org/netbeans/modules/debugger/jpda/resources/mf-layer.xml 22 Aug 2004 10:03:50 -0000 @@ -188,13 +188,13 @@ - + - + - + @@ -209,16 +209,16 @@ - + - + - + Index: editor/libsrc/org/netbeans/editor/SettingsDefaults.java =================================================================== RCS file: /cvs/editor/libsrc/org/netbeans/editor/SettingsDefaults.java,v retrieving revision 1.36 diff -u -u -r1.36 SettingsDefaults.java --- editor/libsrc/org/netbeans/editor/SettingsDefaults.java 18 Aug 2004 17:22:18 -0000 1.36 +++ editor/libsrc/org/netbeans/editor/SettingsDefaults.java 22 Aug 2004 10:03:52 -0000 @@ -196,6 +196,22 @@ SettingsNames.STATUS_BAR_BOLD_COLORING }; + + private static final int FIND_NEXT_KEY = + System.getProperty("mrj.version") == null ? + KeyEvent.VK_F3 : KeyEvent.VK_G; + + private static final int FIND_NEXT_MASK = + System.getProperty("mrj.version") == null ? + 0 : KeyEvent.META_DOWN_MASK; + + //#26854 - use Command, not Ctrl, on mac + private static final int MENU_MASK = java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); + + //Default behavior on mac is that alt+arrows is word jumps + private static final int WORD_SELECT_MASK = System.getProperty("mrj.version") == null ? + InputEvent.CTRL_DOWN_MASK : InputEvent.ALT_DOWN_MASK; + public static final MultiKeyBinding[] defaultKeyBindings = new MultiKeyBinding[] { new MultiKeyBinding( @@ -207,7 +223,7 @@ BaseKit.insertBreakAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, MENU_MASK), BaseKit.splitLineAction ), new MultiKeyBinding( @@ -239,7 +255,7 @@ BaseKit.deletePrevCharAction ), /* new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_H, MENU_MASK | InputEvent.SHIFT_MASK), BaseKit.deletePrevCharAction ), */ new MultiKeyBinding( @@ -259,11 +275,11 @@ BaseKit.selectionForwardAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, WORD_SELECT_MASK), BaseKit.nextWordAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, InputEvent.SHIFT_MASK | WORD_SELECT_MASK), BaseKit.selectionNextWordAction ), new MultiKeyBinding( @@ -275,15 +291,15 @@ BaseKit.backwardAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_MASK), BaseKit.selectionBackwardAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, WORD_SELECT_MASK), BaseKit.previousWordAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, InputEvent.SHIFT_MASK | WORD_SELECT_MASK), BaseKit.selectionPreviousWordAction ), new MultiKeyBinding( @@ -299,7 +315,7 @@ BaseKit.selectionDownAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, MENU_MASK), BaseKit.scrollUpAction ), new MultiKeyBinding( @@ -315,7 +331,7 @@ BaseKit.selectionUpAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_UP, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_UP, MENU_MASK), BaseKit.scrollDownAction ), new MultiKeyBinding( @@ -343,11 +359,11 @@ BaseKit.selectionBeginLineAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_HOME, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_HOME, MENU_MASK), BaseKit.beginAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_HOME, InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_HOME, InputEvent.SHIFT_MASK | MENU_MASK), BaseKit.selectionBeginAction ), new MultiKeyBinding( @@ -359,21 +375,21 @@ BaseKit.selectionEndLineAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_END, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_END, MENU_MASK), BaseKit.endAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_END, InputEvent.SHIFT_MASK | InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_END, InputEvent.SHIFT_MASK | MENU_MASK), BaseKit.selectionEndAction ), // clipboard bindings new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_C, MENU_MASK), BaseKit.copyAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, MENU_MASK), BaseKit.copyAction ), new MultiKeyBinding( @@ -385,7 +401,7 @@ BaseKit.cutAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_X, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_X, MENU_MASK), BaseKit.cutAction ), new MultiKeyBinding( @@ -393,7 +409,7 @@ BaseKit.cutAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_V, MENU_MASK), BaseKit.pasteAction ), new MultiKeyBinding( @@ -405,13 +421,13 @@ BaseKit.pasteAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_V, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_V, MENU_MASK | InputEvent.SHIFT_MASK), BaseKit.pasteFormatedAction ), // undo and redo bindings - handled at system level new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_Z, MENU_MASK), BaseKit.undoAction ), new MultiKeyBinding( @@ -419,13 +435,13 @@ BaseKit.undoAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_Y, MENU_MASK), BaseKit.redoAction ), // other bindings new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_A, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_A, MENU_MASK), BaseKit.selectAllAction ), new MultiKeyBinding( @@ -436,15 +452,15 @@ BaseKit.endWordAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_W, MENU_MASK), BaseKit.removeWordAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_U, MENU_MASK), BaseKit.removeLineBeginAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_E, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_E, MENU_MASK), BaseKit.removeLineAction ), new MultiKeyBinding( @@ -452,7 +468,7 @@ BaseKit.toggleTypingModeAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_F2, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_F2, MENU_MASK), BaseKit.toggleBookmarkAction ), new MultiKeyBinding( @@ -460,15 +476,15 @@ BaseKit.gotoNextBookmarkAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0), + KeyStroke.getKeyStroke(FIND_NEXT_KEY, FIND_NEXT_MASK), BaseKit.findNextAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_F3, InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(FIND_NEXT_KEY, FIND_NEXT_MASK | InputEvent.SHIFT_MASK), BaseKit.findPreviousAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_F3, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(FIND_NEXT_KEY, FIND_NEXT_MASK | InputEvent.CTRL_MASK), BaseKit.findSelectionAction ), new MultiKeyBinding( @@ -476,19 +492,19 @@ BaseKit.toggleHighlightSearchAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_L, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_L, MENU_MASK), BaseKit.wordMatchNextAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_K, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_K, MENU_MASK), BaseKit.wordMatchPrevAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_T, MENU_MASK), BaseKit.shiftLineRightAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_D, MENU_MASK), BaseKit.shiftLineLeftAction ), new MultiKeyBinding( @@ -496,7 +512,7 @@ BaseKit.abbrevResetAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_C, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_C, MENU_MASK | InputEvent.SHIFT_MASK), BaseKit.annotationsCyclingAction ), @@ -536,7 +552,7 @@ ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK ), + KeyStroke.getKeyStroke(KeyEvent.VK_F, MENU_MASK | InputEvent.SHIFT_MASK ), BaseKit.formatAction ), new MultiKeyBinding( @@ -582,13 +598,13 @@ ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_M, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_M, MENU_MASK), BaseKit.selectNextParameterAction ), new MultiKeyBinding( new KeyStroke[] { - KeyStroke.getKeyStroke(KeyEvent.VK_J, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_J, MENU_MASK), KeyStroke.getKeyStroke(KeyEvent.VK_S, 0), }, BaseKit.startMacroRecordingAction @@ -596,59 +612,59 @@ new MultiKeyBinding( new KeyStroke[] { - KeyStroke.getKeyStroke(KeyEvent.VK_J, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_J, MENU_MASK), KeyStroke.getKeyStroke(KeyEvent.VK_E, 0), }, BaseKit.stopMacroRecordingAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, MENU_MASK), BaseKit.collapseFoldAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_ADD, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_ADD, MENU_MASK), BaseKit.expandFoldAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_SUBTRACT, MENU_MASK | InputEvent.SHIFT_MASK), BaseKit.collapseAllFoldsAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_ADD, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_ADD, MENU_MASK | InputEvent.SHIFT_MASK), BaseKit.expandAllFoldsAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, MENU_MASK), BaseKit.collapseFoldAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, MENU_MASK), BaseKit.expandFoldAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, MENU_MASK), BaseKit.expandFoldAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, MENU_MASK | InputEvent.SHIFT_MASK), BaseKit.collapseAllFoldsAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_EQUALS, MENU_MASK | InputEvent.SHIFT_MASK), BaseKit.expandAllFoldsAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, MENU_MASK | InputEvent.SHIFT_MASK), BaseKit.expandAllFoldsAction ), Index: editor/libsrc/org/netbeans/editor/ext/ExtSettingsDefaults.java =================================================================== RCS file: /cvs/editor/libsrc/org/netbeans/editor/ext/ExtSettingsDefaults.java,v retrieving revision 1.34 diff -u -u -r1.34 ExtSettingsDefaults.java --- editor/libsrc/org/netbeans/editor/ext/ExtSettingsDefaults.java 12 Aug 2004 12:05:19 -0000 1.34 +++ editor/libsrc/org/netbeans/editor/ext/ExtSettingsDefaults.java 22 Aug 2004 10:03:53 -0000 @@ -72,6 +72,7 @@ public static final Integer defaultJavaDocAutoPopupDelay = new Integer(200); public static final Dimension defaultJavaDocPreferredSize = new Dimension(500, 300); public static final Boolean defaultJavaDocAutoPopup = Boolean.TRUE; + private static int MENU_MASK = java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); public static final MultiKeyBinding[] defaultExtKeyBindings = new MultiKeyBinding[] { @@ -81,7 +82,7 @@ ), */ new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_F, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_F, MENU_MASK), ExtKit.findAction ), new MultiKeyBinding( @@ -89,7 +90,7 @@ ExtKit.findAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_H, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_H, MENU_MASK), ExtKit.replaceAction ), new MultiKeyBinding( @@ -109,11 +110,11 @@ ExtKit.escapeAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, MENU_MASK), ExtKit.matchBraceAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_OPEN_BRACKET, MENU_MASK | InputEvent.SHIFT_MASK), ExtKit.selectionMatchBraceAction ), new MultiKeyBinding( @@ -121,8 +122,8 @@ ExtKit.showPopupMenuAction ), /* new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_U, InputEvent.CTRL_MASK), - // KeyStroke.getKeyStroke(KeyEvent.VK_BRACELEFT, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_U, MENU_MASK), + // KeyStroke.getKeyStroke(KeyEvent.VK_BRACELEFT, MENU_MASK), ExtKit.braceCodeSelectAction ), */ Index: editor/libsrc/org/netbeans/editor/ext/java/JavaSettingsDefaults.java =================================================================== RCS file: /cvs/editor/libsrc/org/netbeans/editor/ext/java/JavaSettingsDefaults.java,v retrieving revision 1.25 diff -u -u -r1.25 JavaSettingsDefaults.java --- editor/libsrc/org/netbeans/editor/ext/java/JavaSettingsDefaults.java 18 Aug 2004 17:22:27 -0000 1.25 +++ editor/libsrc/org/netbeans/editor/ext/java/JavaSettingsDefaults.java 22 Aug 2004 10:03:53 -0000 @@ -154,20 +154,22 @@ } public static MultiKeyBinding[] getJavaKeyBindings() { + int MENU_MASK = java.awt.Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); + return new MultiKeyBinding[] { new MultiKeyBinding( new KeyStroke[] { - KeyStroke.getKeyStroke(KeyEvent.VK_J, InputEvent.CTRL_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_J, MENU_MASK), KeyStroke.getKeyStroke(KeyEvent.VK_D, 0) }, "macro-debug-var" // NOI18N ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_T, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_T, MENU_MASK | InputEvent.SHIFT_MASK), ExtKit.commentAction ), new MultiKeyBinding( - KeyStroke.getKeyStroke(KeyEvent.VK_D, InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + KeyStroke.getKeyStroke(KeyEvent.VK_D, MENU_MASK | InputEvent.SHIFT_MASK), ExtKit.uncommentAction ) }; Index: editor/src/org/netbeans/modules/editor/java/NbJavaSettingsInitializer.java =================================================================== RCS file: /cvs/editor/src/org/netbeans/modules/editor/java/NbJavaSettingsInitializer.java,v retrieving revision 1.30 diff -u -u -r1.30 NbJavaSettingsInitializer.java --- editor/src/org/netbeans/modules/editor/java/NbJavaSettingsInitializer.java 18 Aug 2004 17:22:33 -0000 1.30 +++ editor/src/org/netbeans/modules/editor/java/NbJavaSettingsInitializer.java 22 Aug 2004 10:03:54 -0000 @@ -13,6 +13,7 @@ package org.netbeans.modules.editor.java; +import java.awt.Toolkit; import java.awt.event.KeyEvent; import java.awt.event.InputEvent; import java.util.Map; @@ -98,6 +99,7 @@ } public MultiKeyBinding[] getJavaKeyBindings() { + int mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); return new MultiKeyBinding[] { new MultiKeyBinding( new KeyStroke[] { @@ -127,7 +129,7 @@ ), new MultiKeyBinding( KeyStroke.getKeyStroke(KeyEvent.VK_B, - InputEvent.CTRL_MASK), + mask), JavaKit.gotoSuperImplementationAction ), new MultiKeyBinding( @@ -137,7 +139,7 @@ ), // new MultiKeyBinding( // KeyStroke.getKeyStroke(KeyEvent.VK_S, -// InputEvent.ALT_MASK | InputEvent.CTRL_MASK), +// InputEvent.ALT_MASK | mask), // JavaKit.tryCatchAction // ), new MultiKeyBinding( @@ -146,19 +148,19 @@ ), new MultiKeyBinding( KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, - InputEvent.CTRL_MASK | InputEvent.SHIFT_MASK), + mask | InputEvent.SHIFT_MASK), JavaKit.javaDocShowAction ), new MultiKeyBinding( KeyStroke.getKeyStroke(KeyEvent.VK_A, - InputEvent.CTRL_MASK | InputEvent.ALT_MASK), + mask | InputEvent.ALT_MASK), JavaKit.selectNextElementAction ), new MultiKeyBinding( KeyStroke.getKeyStroke(KeyEvent.VK_A, - InputEvent.CTRL_MASK | InputEvent.ALT_MASK | InputEvent.SHIFT_MASK), + mask | InputEvent.ALT_MASK | InputEvent.SHIFT_MASK), JavaKit.selectPreviousElementAction ) Index: editor/src/org/netbeans/modules/editor/resources/XMLs/DefaultGlobalKeyBindings.xml =================================================================== RCS file: /cvs/editor/src/org/netbeans/modules/editor/resources/XMLs/DefaultGlobalKeyBindings.xml,v retrieving revision 1.10 diff -u -u -r1.10 DefaultGlobalKeyBindings.xml --- editor/src/org/netbeans/modules/editor/resources/XMLs/DefaultGlobalKeyBindings.xml 12 Aug 2004 12:05:20 -0000 1.10 +++ editor/src/org/netbeans/modules/editor/resources/XMLs/DefaultGlobalKeyBindings.xml 22 Aug 2004 10:03:54 -0000 @@ -13,41 +13,42 @@ - + - - - - - + + + + + - - - - + + + + - + - - - + + + - - - - + + + + - + - + + @@ -58,29 +59,29 @@ - + - - - + + + - - + + - + - - + + - + @@ -89,25 +90,25 @@ - + - + - + - + - - - - - - - - - - - + + + + + + + + + + + Index: editor/src/org/netbeans/modules/editor/resources/XMLs/DefaultKeyBindings.xml =================================================================== RCS file: /cvs/editor/src/org/netbeans/modules/editor/resources/XMLs/DefaultKeyBindings.xml,v retrieving revision 1.9 diff -u -u -r1.9 DefaultKeyBindings.xml --- editor/src/org/netbeans/modules/editor/resources/XMLs/DefaultKeyBindings.xml 12 Aug 2004 12:05:20 -0000 1.9 +++ editor/src/org/netbeans/modules/editor/resources/XMLs/DefaultKeyBindings.xml 22 Aug 2004 10:03:54 -0000 @@ -6,15 +6,15 @@ - + - + - - + + - - + + Index: form/src/org/netbeans/modules/form/resources/layer.xml =================================================================== RCS file: /cvs/form/src/org/netbeans/modules/form/resources/layer.xml,v retrieving revision 1.77 diff -u -u -r1.77 layer.xml --- form/src/org/netbeans/modules/form/resources/layer.xml 9 Jul 2004 09:28:54 -0000 1.77 +++ form/src/org/netbeans/modules/form/resources/layer.xml 22 Aug 2004 10:03:59 -0000 @@ -460,7 +460,7 @@ - + Index: i18n/src/org/netbeans/modules/i18n/Layer.xml =================================================================== RCS file: /cvs/i18n/src/org/netbeans/modules/i18n/Layer.xml,v retrieving revision 1.21 diff -u -u -r1.21 Layer.xml --- i18n/src/org/netbeans/modules/i18n/Layer.xml 16 Mar 2004 15:29:41 -0000 1.21 +++ i18n/src/org/netbeans/modules/i18n/Layer.xml 22 Aug 2004 10:04:00 -0000 @@ -16,7 +16,7 @@ - + Index: ide/applemenu/src/org/netbeans/modules/applemenu/layer.xml =================================================================== RCS file: /cvs/ide/applemenu/src/org/netbeans/modules/applemenu/layer.xml,v retrieving revision 1.1 diff -u -u -r1.1 layer.xml --- ide/applemenu/src/org/netbeans/modules/applemenu/layer.xml 8 Jun 2004 12:46:10 -0000 1.1 +++ ide/applemenu/src/org/netbeans/modules/applemenu/layer.xml 22 Aug 2004 10:04:01 -0000 @@ -37,6 +37,24 @@ --> + + + + + + + + + + + + + + + + + + Index: java/src/org/netbeans/modules/java/resources/mf-layer.xml =================================================================== RCS file: /cvs/java/src/org/netbeans/modules/java/resources/mf-layer.xml,v retrieving revision 1.50 diff -u -u -r1.50 mf-layer.xml --- java/src/org/netbeans/modules/java/resources/mf-layer.xml 2 Aug 2004 09:39:52 -0000 1.50 +++ java/src/org/netbeans/modules/java/resources/mf-layer.xml 22 Aug 2004 10:04:15 -0000 @@ -145,7 +145,7 @@ - + Index: junit/src/org/netbeans/modules/junit/resources/layer.xml =================================================================== RCS file: /cvs/junit/src/org/netbeans/modules/junit/resources/layer.xml,v retrieving revision 1.22 diff -u -u -r1.22 layer.xml --- junit/src/org/netbeans/modules/junit/resources/layer.xml 21 Jun 2004 07:20:01 -0000 1.22 +++ junit/src/org/netbeans/modules/junit/resources/layer.xml 22 Aug 2004 10:04:24 -0000 @@ -80,10 +80,10 @@ - + - + Index: monitor/src/org/netbeans/modules/web/monitor/resources/layer.xml =================================================================== RCS file: /cvs/monitor/src/org/netbeans/modules/web/monitor/resources/layer.xml,v retrieving revision 1.14 diff -u -u -r1.14 layer.xml --- monitor/src/org/netbeans/modules/web/monitor/resources/layer.xml 26 May 2004 13:01:53 -0000 1.14 +++ monitor/src/org/netbeans/modules/web/monitor/resources/layer.xml 22 Aug 2004 10:04:31 -0000 @@ -33,7 +33,7 @@ - + Index: openide/src/org/openide/util/Utilities.java =================================================================== RCS file: /cvs/openide/src/org/openide/util/Utilities.java,v retrieving revision 1.142 diff -u -u -r1.142 Utilities.java --- openide/src/org/openide/util/Utilities.java 30 Jul 2004 14:33:20 -0000 1.142 +++ openide/src/org/openide/util/Utilities.java 22 Aug 2004 10:04:42 -0000 @@ -1252,7 +1252,22 @@ } else { // last text must be the key code Integer i = (Integer)names.get (el); + boolean wildcard = (needed & WILDCARD_MASK) != 0; + //Strip out the explicit mask - KeyStroke won't know + //what to do with it + needed = needed & ~WILDCARD_MASK; + if (i != null) { + //#26854 - Default accelerator should be Command on mac + if (wildcard) { + needed |= Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); + if ((getOperatingSystem() & OS_MAC) != 0) { + if (!usableKeyOnMac(i.intValue(), needed)) { + needed &= ~Toolkit.getDefaultToolkit().getMenuShortcutKeyMask(); + needed |= KeyEvent.CTRL_MASK; + } + } + } return KeyStroke.getKeyStroke (i.intValue (), needed); } else { return null; @@ -1263,6 +1278,30 @@ return null; } } + + private static final boolean usableKeyOnMac (int key, int mask) { + //All permutations fail for Q except ctrl + if (key == KeyEvent.VK_Q) return false; + + boolean isMeta = ((mask & KeyEvent.META_MASK) != 0) || + ((mask & KeyEvent.CTRL_DOWN_MASK) != 0); + + boolean isAlt = ((mask & KeyEvent.ALT_MASK) != 0) || + ((mask & KeyEvent.ALT_DOWN_MASK) != 0); + + boolean isOnlyMeta = isMeta && (mask & ~(KeyEvent.META_DOWN_MASK | KeyEvent.META_MASK)) == 0; + + //Mac OS consumes keys Command+ these keys - the app will never see + //them, so CTRL should not be remapped for these + if (isOnlyMeta) { + return key != KeyEvent.VK_H && key != + KeyEvent.VK_SPACE && key != KeyEvent.VK_TAB; + } else if (key == KeyEvent.VK_D && isMeta && isAlt) { + return false; + } else { + return true; + } + } /** Convert a space-separated list of user-friendly key binding names to a list of Swing key strokes. * @param s the string with keys @@ -1283,6 +1322,7 @@ return (KeyStroke[])arr.toArray (new KeyStroke[arr.size ()]); } + private static final int WILDCARD_MASK = 32768; /** Adds characters for modifiers to the buffer. * @param buf buffer to add to @@ -1308,6 +1348,10 @@ buf.append("M"); // NOI18N b = true; } + if ((modif & WILDCARD_MASK) != 0) { + buf.append("D"); + b = true; + } return b; } @@ -1332,6 +1376,9 @@ break; case 'S': m |= KeyEvent.SHIFT_MASK; + break; + case 'D': + m |= WILDCARD_MASK; break; default: throw new NoSuchElementException (); Index: projects/projectui/src/org/netbeans/modules/project/ui/resources/layer.xml =================================================================== RCS file: /cvs/projects/projectui/src/org/netbeans/modules/project/ui/resources/layer.xml,v retrieving revision 1.37 diff -u -u -r1.37 layer.xml --- projects/projectui/src/org/netbeans/modules/project/ui/resources/layer.xml 17 Aug 2004 11:24:59 -0000 1.37 +++ projects/projectui/src/org/netbeans/modules/project/ui/resources/layer.xml 22 Aug 2004 10:04:48 -0000 @@ -490,31 +490,31 @@ - + - + - + - + - + - + - + @@ -538,15 +538,15 @@ - + - + - + Index: vcscore/src/org/netbeans/modules/vcscore/resources/mf-layer.xml =================================================================== RCS file: /cvs/vcscore/src/org/netbeans/modules/vcscore/resources/mf-layer.xml,v retrieving revision 1.43 diff -u -u -r1.43 mf-layer.xml --- vcscore/src/org/netbeans/modules/vcscore/resources/mf-layer.xml 17 Aug 2004 15:14:10 -0000 1.43 +++ vcscore/src/org/netbeans/modules/vcscore/resources/mf-layer.xml 22 Aug 2004 10:05:03 -0000 @@ -52,13 +52,13 @@ - + - + - +