]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/ScintillaWX.cpp
fixed yet another bug in wxActivateEvent handling
[wxWidgets.git] / src / stc / ScintillaWX.cpp
index 127c172a909523365d4a076007c35b78ab1b381c..62d53360e554278171c136d233e6f321eb4d2b47 100644 (file)
@@ -428,30 +428,47 @@ void ScintillaWX::DoAddChar(char ch) {
 }
 
 int  ScintillaWX::DoKeyDown(int key, bool shift, bool ctrl, bool alt, bool* consumed) {
+#ifdef __WXGTK__
+    // Ctrl chars (A-Z) end up with the wrong keycode on wxGTK...
+    if (ctrl && key >= 1 && key <= 26)
+        key += 'A' - 1;
+#endif
+
     switch (key) {
-        case WXK_DOWN: key = SCK_DOWN; break;
-        case WXK_UP: key = SCK_UP; break;
-        case WXK_LEFT: key = SCK_LEFT; break;
-        case WXK_RIGHT: key = SCK_RIGHT; break;
-        case WXK_HOME: key = SCK_HOME; break;
-        case WXK_END: key = SCK_END; break;
-        case WXK_PRIOR: key = SCK_PRIOR; break;
-        case WXK_NEXT: key = SCK_NEXT; break;
-        case WXK_DELETE: key = SCK_DELETE; break;
-        case WXK_INSERT: key = SCK_INSERT; break;
-        case WXK_ESCAPE: key = SCK_ESCAPE; break;
-        case WXK_BACK: key = SCK_BACK; break;
-        case WXK_TAB: key = SCK_TAB; break;
-        case WXK_RETURN: key = SCK_RETURN; break;
-        case WXK_ADD: key = SCK_ADD; break;
-        case WXK_SUBTRACT: key = SCK_SUBTRACT; break;
-        case WXK_DIVIDE: key = SCK_DIVIDE; break;
-        case WXK_CONTROL: key = 0; break;
-        case WXK_ALT: key = 0; break;
-        case WXK_SHIFT: key = 0; break;
+    case WXK_DOWN: key = SCK_DOWN; break;
+    case WXK_UP: key = SCK_UP; break;
+    case WXK_LEFT: key = SCK_LEFT; break;
+    case WXK_RIGHT: key = SCK_RIGHT; break;
+    case WXK_HOME: key = SCK_HOME; break;
+    case WXK_END: key = SCK_END; break;
+    case WXK_PRIOR: key = SCK_PRIOR; break;
+    case WXK_NEXT: key = SCK_NEXT; break;
+    case WXK_DELETE: key = SCK_DELETE; break;
+    case WXK_INSERT: key = SCK_INSERT; break;
+    case WXK_ESCAPE: key = SCK_ESCAPE; break;
+    case WXK_BACK: key = SCK_BACK; break;
+    case WXK_TAB: key = SCK_TAB; break;
+    case WXK_RETURN: key = SCK_RETURN; break;
+    case WXK_ADD:
+    case WXK_NUMPAD_ADD:
+        key = SCK_ADD; break;
+    case WXK_SUBTRACT:
+    case WXK_NUMPAD_SUBTRACT:
+        key = SCK_SUBTRACT; break;
+    case WXK_DIVIDE:
+    case WXK_NUMPAD_DIVIDE:
+        key = SCK_DIVIDE; break;
+    case WXK_CONTROL: key = 0; break;
+    case WXK_ALT: key = 0; break;
+    case WXK_SHIFT: key = 0; break;
+    case WXK_MENU: key = 0; break;
     }
 
-    return KeyDown(key, shift, ctrl, alt, consumed);
+    int rv = KeyDown(key, shift, ctrl, alt, consumed);
+    if (key)
+        return rv;
+    else
+        return 1;
 }