Even if we ignore the modifiers, we still have to respect
the active group when we go looking for the level 3 shift key.


git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@5117 3789f03b-4d11-0410-bbf8-ca57d06f2519
diff --git a/unix/xserver/hw/vnc/InputXKB.cc b/unix/xserver/hw/vnc/InputXKB.cc
index 7bc2377..4c04ef9 100644
--- a/unix/xserver/hw/vnc/InputXKB.cc
+++ b/unix/xserver/hw/vnc/InputXKB.cc
@@ -210,20 +210,25 @@
 
 unsigned InputDevice::getLevelThreeMask(void)
 {
+	unsigned state;
 	KeyCode keycode;
 	XkbDescPtr xkb;
 	XkbAction *act;
 
-	keycode = keysymToKeycode(XK_ISO_Level3_Shift, 0, NULL);
+	/* Group state is still important */
+	state = getKeyboardState();
+	state &= ~0xff;
+
+	keycode = keysymToKeycode(XK_ISO_Level3_Shift, state, NULL);
 	if (keycode == 0) {
-		keycode = keysymToKeycode(XK_Mode_switch, 0, NULL);
+		keycode = keysymToKeycode(XK_Mode_switch, state, NULL);
 		if (keycode == 0)
 			return 0;
 	}
 
 	xkb = GetMaster(keyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
 
-	act = XkbKeyActionPtr(xkb, keycode, 0);
+	act = XkbKeyActionPtr(xkb, keycode, state);
 	if (act == NULL)
 		return 0;
 	if (act->type != XkbSA_SetMods)
@@ -338,7 +343,7 @@
 
 	xkb = GetMaster(keyboardDev, KEYBOARD_OR_FLOAT)->key->xkbInfo->desc;
 
-	act = XkbKeyActionPtr(xkb, keycode, 0);
+	act = XkbKeyActionPtr(xkb, keycode, state);
 	if (act == NULL)
 		return 0;
 	if (act->type != XkbSA_SetMods)