Revision: 4855
          http://tigervnc.svn.sourceforge.net/tigervnc/?rev=4855&view=rev
Author:   bphinz
Date:     2012-02-14 19:56:17 +0000 (Tue, 14 Feb 2012)
Log Message:
-----------
Applied fix for issue with Win7 and German metakeys. Patch submitted by Albert 
Fluegel

Modified Paths:
--------------
    trunk/java/com/tigervnc/vncviewer/CConn.java

Modified: trunk/java/com/tigervnc/vncviewer/CConn.java
===================================================================
--- trunk/java/com/tigervnc/vncviewer/CConn.java        2012-02-13 12:34:17 UTC 
(rev 4854)
+++ trunk/java/com/tigervnc/vncviewer/CConn.java        2012-02-14 19:56:17 UTC 
(rev 4855)
@@ -1228,16 +1228,19 @@
     if (ev.getID() != KeyEvent.KEY_PRESSED && !ev.isActionKey())
       return;
 
-    int keysym;
+    int keysym, keycode, currentModifiers;
 
+    currentModifiers = ev.getModifiers();
+    keycode = ev.getKeyCode();
+
     if (!ev.isActionKey()) {
       vlog.debug("key press "+ev.getKeyChar());
       if (ev.getKeyChar() < 32) {
         // if the ctrl modifier key is down, send the equivalent ASCII since we
         // will send the ctrl modifier anyway
 
-        if ((ev.getModifiers() & KeyEvent.CTRL_MASK) != 0) {
-          if ((ev.getModifiers() & KeyEvent.SHIFT_MASK) != 0) {
+        if ((currentModifiers & KeyEvent.CTRL_MASK) != 0) {
+          if ((currentModifiers & KeyEvent.SHIFT_MASK) != 0) {
             keysym = ev.getKeyChar() + 64;
             if (keysym == -1)
               return;
@@ -1246,7 +1249,7 @@
             if (keysym == 127) keysym = 95;
           }
         } else {
-          switch (ev.getKeyCode()) {
+          switch (keycode) {
           case KeyEvent.VK_BACK_SPACE: keysym = Keysyms.BackSpace; break;
           case KeyEvent.VK_TAB:        keysym = Keysyms.Tab; break;
           case KeyEvent.VK_ENTER:      keysym = Keysyms.Return; break;
@@ -1262,12 +1265,26 @@
         keysym = UnicodeToKeysym.translate(ev.getKeyChar());
         if (keysym == -1)
           return;
+
+        // Windows 7 or some Java version send key events that require the
+        // following special treatment with the German Alt-Gr Key. They send
+        // ALT + CTRL before the normal key event. They should be suppressed
+        if ((currentModifiers & KeyEvent.CTRL_MASK) != 0
+               && (currentModifiers & KeyEvent.ALT_MASK) != 0
+               && ((keysym == 0x5c) || (keysym == 0x7c)        // backslash bar
+                || (keysym == 0x5b) || (keysym == 0x5d)        // [ ]
+                || (keysym == 0x7b) || (keysym == 0x7d)        // { }
+                || (keysym == 0x7e) || (keysym == 0x40)        // ~ @
+                || (keysym == 0x20ac) || (keysym == 0xb5)      // Euro Micro
+                || (keysym == 0xb2) || (keysym == 0xb3))       // ^2 ^3
+                  )
+          currentModifiers &= (~ KeyEvent.CTRL_MASK) & (~ KeyEvent.ALT_MASK);
       }
 
     } else {
       // KEY_ACTION
-      vlog.debug("key action "+ev.getKeyCode());
-      switch (ev.getKeyCode()) {
+      vlog.debug("key action " + keycode);
+      switch (keycode) {
       case KeyEvent.VK_HOME:         keysym = Keysyms.Home; break;
       case KeyEvent.VK_END:          keysym = Keysyms.End; break;
       case KeyEvent.VK_PAGE_UP:      keysym = Keysyms.Page_Up; break;
@@ -1295,7 +1312,7 @@
       }
     }
 
-    writeModifiers(ev.getModifiers());
+    writeModifiers(currentModifiers);
     writeKeyEvent(keysym, true);
     writeKeyEvent(keysym, false);
     writeModifiers(0);

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Keep Your Developer Skills Current with LearnDevNow!
The most comprehensive online learning library for Microsoft developers
is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3,
Metro Style Apps, more. Free future releases when you subscribe now!
http://p.sf.net/sfu/learndevnow-d2d
_______________________________________________
Tigervnc-commits mailing list
Tigervnc-commits@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/tigervnc-commits

Reply via email to