]> source.dussan.org Git - tigervnc.git/commitdiff
Attempt to handle Ctrl+key
authorPierre Ossman <ossman@cendio.se>
Fri, 22 Aug 2014 13:09:54 +0000 (15:09 +0200)
committerPierre Ossman <ossman@cendio.se>
Fri, 22 Aug 2014 13:09:54 +0000 (15:09 +0200)
Hacky attempt to try to figure out the actual key pressed when
FLTK is giving us control codes.

vncviewer/Viewport.cxx

index 2209fe5863862e236c55bccb6c915b02d23a181a..16b34e6cb14181b034db2fe8f4ecd21afe6b659b 100644 (file)
@@ -30,6 +30,7 @@
 
 // FLTK can pull in the X11 headers on some systems
 #ifndef XK_VoidSymbol
+#define XK_LATIN1
 #define XK_MISCELLANY
 #define XK_XKB_KEYS
 #include <rfb/keysymdef.h>
@@ -821,11 +822,26 @@ rdr::U32 Viewport::translateKeyEvent(void)
   }
 
   // Unknown special key?
-  if (keyText[0] == '\0') {
+  if (keyTextLen == 0) {
     vlog.error(_("Unknown FLTK key code %d (0x%04x)"), keyCode, keyCode);
     return NoSymbol;
   }
 
+  // Control character?
+  if ((keyTextLen == 1) && ((keyText[0] < 0x20) | (keyText[0] == 0x7f))) {
+    if (keyText[0] == 0x00)
+      return XK_2;
+    else if (keyText[0] < 0x1b) {
+      if (!!Fl::event_state(FL_SHIFT) != !!Fl::event_state(FL_CAPS_LOCK))
+        return keyText[0] + XK_A - 0x01;
+      else
+        return keyText[0] + XK_a - 0x01;
+    } else if (keyText[0] < 0x20)
+      return keyText[0] + XK_3 - 0x1b;
+    else
+      return XK_8;
+  }
+
   // Look up the symbol the key produces and translate that from Unicode
   // to a X11 keysym.
   if (fl_utf_nb_char((const unsigned char*)keyText, strlen(keyText)) != 1) {