6911361 vnc has problems with sticky modifier keys
authorStuart Kreitman <Stuart.Kreitman@Sun.COM>
Thu, 17 Dec 2009 15:35:07 -0800
changeset 865 2830e8bf613b
parent 864 0734480a0496
child 866 b7c9e88d1836
6911361 vnc has problems with sticky modifier keys
open-src/xserver/xvnc/Makefile
open-src/xserver/xvnc/upstream-modkeystick.patch
--- a/open-src/xserver/xvnc/Makefile	Thu Dec 17 15:04:42 2009 -0800
+++ b/open-src/xserver/xvnc/Makefile	Thu Dec 17 15:35:07 2009 -0800
@@ -32,7 +32,7 @@
 # or other dealings in this Software without prior written authorization
 # of the copyright holder.
 #
-# ident	"@(#)Makefile	1.22	09/12/05 SMI"
+# ident	"@(#)Makefile	1.23	09/12/17 SMI"
 #
 
 # Package name used in tarballs
@@ -67,6 +67,7 @@
 	vnc-nobuildtime.patch \
 	vnc-nohttpd.patch \
 	vncviewer-connect.patch,-p1 \
+	upstream-modkeystick.patch,-p0 \
 	solaris-port.patch
 
 # Man pages to apply Sun footer to & attributes to list
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/open-src/xserver/xvnc/upstream-modkeystick.patch	Thu Dec 17 15:35:07 2009 -0800
@@ -0,0 +1,37 @@
+--- /dev/null	2009-12-17 01:29:23.000000000 -0800
++++ upstream-modkeystick.patch	2009-12-17 01:28:12.531376950 -0800
+@@ -0,0 +1,34 @@
++open-src/xserver/xvnc/build_32/tigervnc-1.0.0
++--- unix/xserver/hw/vnc/Input.cc.orig	2009-12-16 17:23:13.298295400 -0800
+++++ unix/xserver/hw/vnc/Input.cc	2009-12-16 17:14:56.292383650 -0800
++@@ -456,6 +456,14 @@
++ 	unsigned int i, n;
++ 	int j, k, action;
++ 
+++	/* 
+++	 * Since we are checking the current state to determine if we need
+++	 * to fake modifiers, we must make sure that everything put on the
+++	 * input queue is processed before we start. Otherwise, shift may be
+++	 * stuck down.
+++	 */ 
+++	mieqProcessInputEvents();
+++	
++ 	if (keysym == XK_Caps_Lock) {
++ 		vlog.debug("Ignoring caps lock");
++ 		goto cleanup;
++@@ -617,6 +625,15 @@
++ 		xfree(keymap);
++ 	}
++ #endif
+++
+++	/*
+++	 * When faking a modifier we are putting a keycode (which can
+++	 * currently activate the desired modifier) on the input
+++	 * queue. A future modmap change can change the mapping so
+++	 * that this keycode means something else entirely. Guard
+++	 * against this by processing the queue now.
+++	 */
+++	mieqProcessInputEvents();
++ }
++ 
++ static KeySym KeyCodetoKeySym(KeySymsPtr keymap, int keycode, int col)