Blob Blame History Raw
diff -up tigervnc-1.3.0/unix/xserver/hw/vnc/InputXKB.cc.key_is_down tigervnc-1.3.0/unix/xserver/hw/vnc/InputXKB.cc
--- tigervnc-1.3.0/unix/xserver/hw/vnc/InputXKB.cc.key_is_down	2013-07-24 12:54:41.461930866 +0100
+++ tigervnc-1.3.0/unix/xserver/hw/vnc/InputXKB.cc	2013-07-24 13:04:39.743663652 +0100
@@ -321,7 +321,11 @@ std::list<KeyCode> InputDevice::releaseS
 		XkbAction *act;
 		unsigned char mask;
 
-		if (!key_is_down(master, key, KEY_PROCESSED))
+		int bit;
+		BYTE *kptr;
+		kptr = &master->key->down[key >> 3];
+		bit = 1 << (key & 7);
+		if (*kptr & bit)
 			continue;
 
 		act = XkbKeyActionPtr(xkb, key, state);
@@ -402,7 +406,11 @@ std::list<KeyCode> InputDevice::releaseL
 		XkbAction *act;
 		unsigned char key_mask;
 
-		if (!key_is_down(master, key, KEY_PROCESSED))
+		int bit;
+		BYTE *kptr;
+		kptr = &master->key->down[key >> 3];
+		bit = 1 << (key & 7);
+		if (*kptr & bit)
 			continue;
 
 		act = XkbKeyActionPtr(xkb, key, state);
@@ -638,6 +646,8 @@ void InputDevice::vncXkbProcessDeviceEve
 
 	if (event->device_event.sourceid == self->keyboardDev->id) {
 		XkbControlsPtr ctrls;
+		int bit;
+		BYTE *kptr;
 
 		/*
 		 * We need to bypass AccessX since it is timing sensitive and
@@ -651,8 +661,10 @@ void InputDevice::vncXkbProcessDeviceEve
 		 * This flag needs to be set for key repeats to be properly
 		 * respected.
 		 */
+		kptr = &dev->key->down[event->device_event.detail.key >> 3];
+		bit = 1 << (event->device_event.detail.key & 7);
 		if ((event->device_event.type == ET_KeyPress) &&
-		    key_is_down(dev, event->device_event.detail.key, KEY_PROCESSED))
+		    (*kptr & bit))
 			event->device_event.key_repeat = TRUE;
 	}