Skip to content

Commit 77ce751

Browse files
Thomas Singerakurtakov
authored andcommitted
MenuItem (GTK): allow additional shortcut words #1852
1 parent d2cb26d commit 77ce751

File tree

1 file changed

+47
-37
lines changed
  • bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets

1 file changed

+47
-37
lines changed

bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/MenuItem.java

Lines changed: 47 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1372,50 +1372,60 @@ private MaskKeysym getMaskKeysym() {
13721372
int accelIndex = text.indexOf ('\t');
13731373
if (accelIndex == -1) return null;
13741374
int start = accelIndex + 1;
1375-
int plusIndex = text.indexOf('+', start);
1376-
while (plusIndex != -1) {
1375+
while (true) {
1376+
int plusIndex = text.indexOf('+', start);
1377+
if (plusIndex < 0 || plusIndex == text.length() - 1) {
1378+
break;
1379+
}
1380+
13771381
String maskStr = text.substring(start, plusIndex);
13781382
if (maskStr.equals("Ctrl")) maskKeysym.mask |= GDK.GDK_CONTROL_MASK;
13791383
if (maskStr.equals("Shift")) maskKeysym.mask |= GDK.GDK_SHIFT_MASK;
13801384
if (maskStr.equals("Alt")) maskKeysym.mask |= GDK.GDK_MOD1_MASK;
13811385
start = plusIndex + 1;
1382-
plusIndex = text.indexOf('+', start);
13831386
}
1384-
if ("Enter".equals(text.substring(start))) {
1385-
maskKeysym.keysym = GDK.GDK_ISO_Enter;
1387+
final String word = text.substring(start);
1388+
switch (word) {
1389+
case "Del", "Delete" -> maskKeysym.keysym = GDK.GDK_Delete;
1390+
case "Enter" -> maskKeysym.keysym = GDK.GDK_ISO_Enter;
1391+
case "Ins", "Insert" -> maskKeysym.keysym = GDK.GDK_Insert;
1392+
case "Ret", "Return" -> maskKeysym.keysym = GDK.GDK_Return;
1393+
case "Up" -> maskKeysym.keysym = GDK.GDK_Up;
1394+
case "Down" -> maskKeysym.keysym = GDK.GDK_Down;
1395+
case "Right" -> maskKeysym.keysym = GDK.GDK_Right;
1396+
case "Left" -> maskKeysym.keysym = GDK.GDK_Left;
1397+
case "Page Up" -> maskKeysym.keysym = GDK.GDK_Page_Up;
1398+
case "Page Down" -> maskKeysym.keysym = GDK.GDK_Page_Down;
1399+
case "Keypad +", "Numpad +" -> maskKeysym.keysym = GDK.GDK_KP_Add;
1400+
case "Keypad -", "Numpad -" -> maskKeysym.keysym = GDK.GDK_KP_Subtract;
1401+
case "Keypad *", "Numpad *" -> maskKeysym.keysym = GDK.GDK_KP_Multiply;
1402+
case "Keypad /", "Numpad /" -> maskKeysym.keysym = GDK.GDK_KP_Divide;
1403+
case "ESC", "Escape" -> maskKeysym.keysym = GDK.GDK_Escape;
1404+
case "Backspace" -> maskKeysym.keysym = GDK.GDK_BackSpace;
1405+
case "Home" -> maskKeysym.keysym = GDK.GDK_Home;
1406+
case "End" -> maskKeysym.keysym = GDK.GDK_End;
1407+
case "Tab" -> maskKeysym.keysym = GDK.GDK_Tab;
1408+
case "Space" -> maskKeysym.keysym = GDK.GDK_space;
1409+
case "F1" -> maskKeysym.keysym = GDK.GDK_F1;
1410+
case "F2" -> maskKeysym.keysym = GDK.GDK_F2;
1411+
case "F3" -> maskKeysym.keysym = GDK.GDK_F3;
1412+
case "F4" -> maskKeysym.keysym = GDK.GDK_F4;
1413+
case "F5" -> maskKeysym.keysym = GDK.GDK_F5;
1414+
case "F6" -> maskKeysym.keysym = GDK.GDK_F6;
1415+
case "F7" -> maskKeysym.keysym = GDK.GDK_F7;
1416+
case "F8" -> maskKeysym.keysym = GDK.GDK_F8;
1417+
case "F9" -> maskKeysym.keysym = GDK.GDK_F9;
1418+
case "F10" -> maskKeysym.keysym = GDK.GDK_F10;
1419+
case "F11" -> maskKeysym.keysym = GDK.GDK_F11;
1420+
case "F12" -> maskKeysym.keysym = GDK.GDK_F12;
1421+
case "F13" -> maskKeysym.keysym = GDK.GDK_F13;
1422+
case "F14" -> maskKeysym.keysym = GDK.GDK_F14;
1423+
case "F15" -> maskKeysym.keysym = GDK.GDK_F15;
1424+
default -> {
1425+
if (word.length() == 1) {
1426+
maskKeysym.keysym = Converter.wcsToMbcs (word.charAt(0));
1427+
}
13861428
}
1387-
switch (text.length() - start) {
1388-
case 1:
1389-
maskKeysym.keysym = text.charAt(start);
1390-
maskKeysym.keysym = Converter.wcsToMbcs ((char) maskKeysym.keysym);
1391-
break;
1392-
case 2:
1393-
if (text.charAt(start) == 'F') {
1394-
switch (text.charAt(start + 1)) {
1395-
case '1': maskKeysym.keysym = GDK.GDK_F1; break;
1396-
case '2': maskKeysym.keysym = GDK.GDK_F2; break;
1397-
case '3': maskKeysym.keysym = GDK.GDK_F3; break;
1398-
case '4': maskKeysym.keysym = GDK.GDK_F4; break;
1399-
case '5': maskKeysym.keysym = GDK.GDK_F5; break;
1400-
case '6': maskKeysym.keysym = GDK.GDK_F6; break;
1401-
case '7': maskKeysym.keysym = GDK.GDK_F7; break;
1402-
case '8': maskKeysym.keysym = GDK.GDK_F8; break;
1403-
case '9': maskKeysym.keysym = GDK.GDK_F9; break;
1404-
}
1405-
}
1406-
break;
1407-
case 3:
1408-
if (text.charAt(start) == 'F' && text.charAt(start + 1) == '1') {
1409-
switch (text.charAt(start + 2)) {
1410-
case '0': maskKeysym.keysym = GDK.GDK_F10; break;
1411-
case '1': maskKeysym.keysym = GDK.GDK_F11; break;
1412-
case '2': maskKeysym.keysym = GDK.GDK_F12; break;
1413-
case '3': maskKeysym.keysym = GDK.GDK_F13; break;
1414-
case '4': maskKeysym.keysym = GDK.GDK_F14; break;
1415-
case '5': maskKeysym.keysym = GDK.GDK_F15; break;
1416-
}
1417-
}
1418-
break;
14191429
}
14201430
return maskKeysym;
14211431
}

0 commit comments

Comments
 (0)