if (matcher.find()) {
String match = matcher.group();
- // KeyCode from last char in match, lowercase
- keyCode = Character.toLowerCase(matcher.group().charAt(
+ // KeyCode from last char in match, uppercase
+ keyCode = Character.toUpperCase(matcher.group().charAt(
match.length() - 1));
// Given modifiers override this indicated in the caption
--- /dev/null
+package com.vaadin.tests.tickets;\r
+\r
+import com.vaadin.Application;\r
+import com.vaadin.event.ShortcutListener;\r
+import com.vaadin.event.ShortcutAction.KeyCode;\r
+import com.vaadin.ui.Label;\r
+import com.vaadin.ui.Panel;\r
+import com.vaadin.ui.TextField;\r
+import com.vaadin.ui.Window;\r
+\r
+/**\r
+ * Key codes were converted to lower case on the server (overlapping special key\r
+ * codes for function keys etc.) and then back to upper case on the client.\r
+ * Therefore, registering e.g. F8 as a key code resulted in "w" being used as\r
+ * the trigger and F8 being ignored.\r
+ */\r
+public class Ticket5157 extends Application {\r
+\r
+ @Override\r
+ public void init() {\r
+ final Window mainWindow = new Window("Forumtests Application");\r
+ setMainWindow(mainWindow);\r
+\r
+ Panel p = new Panel();\r
+ mainWindow.addComponent(p);\r
+\r
+ Label l = new Label("Panel with F8 bound");\r
+ p.addComponent(l);\r
+\r
+ TextField f = new TextField();\r
+ p.addComponent(f);\r
+\r
+ p.addAction(new ShortcutListener("F8", KeyCode.F8, null) {\r
+\r
+ @Override\r
+ public void handleAction(Object sender, Object target) {\r
+ mainWindow.showNotification(getCaption());\r
+\r
+ }\r
+ });\r
+\r
+ p.addAction(new ShortcutListener("a", KeyCode.A, null) {\r
+\r
+ @Override\r
+ public void handleAction(Object sender, Object target) {\r
+ mainWindow.showNotification(getCaption());\r
+\r
+ }\r
+ });\r
+ }\r
+\r
+}\r