]> source.dussan.org Git - tigervnc.git/commitdiff
Release all downKeys when the focus is lost, otherwise the state of the keyboard...
authorBrian Hinz <bphinz@users.sourceforge.net>
Thu, 2 Jan 2014 20:35:52 +0000 (20:35 +0000)
committerBrian Hinz <bphinz@users.sourceforge.net>
Thu, 2 Jan 2014 20:35:52 +0000 (20:35 +0000)
git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@5150 3789f03b-4d11-0410-bbf8-ca57d06f2519

java/com/tigervnc/vncviewer/CConn.java
java/com/tigervnc/vncviewer/DesktopWindow.java
java/com/tigervnc/vncviewer/Viewport.java

index e48e93b28d7d1ae6d894b0fb2d47f32647604915..b876751c8ccb37c27e09bca8949938f8f2222673 100644 (file)
@@ -310,7 +310,7 @@ public class CConn extends CConnection implements
           desktop.requestFocus();
       }
       public void focusLost(FocusEvent e) {
-        releaseModifiers();
+        releaseDownKeys();
       }
     });
     viewer.validate();
@@ -1367,27 +1367,10 @@ public class CConn extends CConnection implements
 
   }
 
-  synchronized void releaseModifiers() {
-    if (downKeySym.containsValue(Keysyms.Shift_L))
-      writeKeyEvent(Keysyms.Shift_L, true);
-    if (downKeySym.containsValue(Keysyms.Shift_R))
-      writeKeyEvent(Keysyms.Shift_R, true);
-    if (downKeySym.containsValue(Keysyms.Control_L))
-      writeKeyEvent(Keysyms.Control_L, true);
-    if (downKeySym.containsValue(Keysyms.Control_R))
-      writeKeyEvent(Keysyms.Control_R, true);
-    if (downKeySym.containsValue(Keysyms.Alt_L))
-      writeKeyEvent(Keysyms.Alt_L, true);
-    if (downKeySym.containsValue(Keysyms.Alt_R))
-      writeKeyEvent(Keysyms.Alt_R, true);
-    if (downKeySym.containsValue(Keysyms.Meta_L))
-      writeKeyEvent(Keysyms.Meta_L, true);
-    if (downKeySym.containsValue(Keysyms.Meta_R))
-      writeKeyEvent(Keysyms.Meta_R, true);
-    if (downKeySym.containsValue(Keysyms.Super_L))
-      writeKeyEvent(Keysyms.Super_L, true);
-    if (downKeySym.containsValue(Keysyms.Super_R))
-      writeKeyEvent(Keysyms.Super_R, true);
+  synchronized void releaseDownKeys() {
+    for (Map.Entry<Integer, Integer> entry : downKeySym.entrySet())
+      writeKeyEvent(entry.getValue(), false);
+    downKeySym.clear();
   }
 
   // this is a special ActionListener passed in by the
index 4749eb2a8e52ff0887f6cadd4e1b9bf4e3ccd945..4175746f38c48ad273375bcf832b7fbf4c26c7f5 100644 (file)
@@ -86,7 +86,7 @@ class DesktopWindow extends JPanel implements Runnable, MouseListener,
         checkClipboard();
       }
       public void focusLost(FocusEvent e) {
-        cc.releaseModifiers();
+        cc.releaseDownKeys();
       }
     });
     setFocusTraversalKeysEnabled(false);
index 19c51c94e7e14332df7b83b953b5bcf059b1e26b..a6ce355479f4d500790f6c355b01aa2cb98c2218 100644 (file)
@@ -58,7 +58,7 @@ public class Viewport extends JFrame
           sp.getViewport().getView().requestFocusInWindow();
       }
       public void windowLostFocus(WindowEvent e) {
-        cc.releaseModifiers();
+        cc.releaseDownKeys();
       }
     });
     addWindowListener(new WindowAdapter() {