ff2e381fd7
- moved common (1.3.0.0/1.4.99.901) patches to xserver-kdrive TODO: merge xmodmap and "-mouse tslib" from OE git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4317 311d38ba-8fff-0310-9ca6-ca027cbcb966
45 lines
1.4 KiB
Diff
45 lines
1.4 KiB
Diff
Index: git/hw/kdrive/linux/keyboard.c
|
|
===================================================================
|
|
--- git.orig/hw/kdrive/linux/keyboard.c 2007-11-14 21:30:45.000000000 +0000
|
|
+++ git/hw/kdrive/linux/keyboard.c 2007-11-15 12:00:11.000000000 +0000
|
|
@@ -42,6 +42,8 @@
|
|
#include <sys/ioctl.h>
|
|
|
|
extern int LinuxConsoleFd;
|
|
+static unsigned char mediumraw_data, mediumraw_up;
|
|
+static enum { DEFAULT, EXTBYTE1, EXTBYTE2 } mediumraw_state = DEFAULT;
|
|
|
|
static const KeySym linux_to_x[256] = {
|
|
NoSymbol, NoSymbol, NoSymbol, NoSymbol,
|
|
@@ -701,7 +703,29 @@
|
|
else
|
|
#endif
|
|
scancode = b[0] & 0x7f;
|
|
- KdEnqueueKeyboardEvent (closure, scancode, b[0] & 0x80);
|
|
+ /* This is extended medium raw mode interpreter
|
|
+ see linux/drivers/keyboard.c (kbd->kbdmode == VC_MEDIUMRAW) */
|
|
+ switch (mediumraw_state)
|
|
+ {
|
|
+ case DEFAULT:
|
|
+ if (scancode == 0)
|
|
+ {
|
|
+ mediumraw_state = EXTBYTE1;
|
|
+ mediumraw_up = b[0] & 0x80;
|
|
+ }
|
|
+ else
|
|
+ KdEnqueueKeyboardEvent (closure, scancode, b[0] & 0x80);
|
|
+ break;
|
|
+ case EXTBYTE1:
|
|
+ mediumraw_data = scancode;
|
|
+ mediumraw_state = EXTBYTE2;
|
|
+ break;
|
|
+ case EXTBYTE2:
|
|
+ /* Note: Only codes < 256 will pass correctly through KdEnqueueKeyboardEvent() */
|
|
+ KdEnqueueKeyboardEvent (closure, (int)mediumraw_data << 7 | scancode, mediumraw_up);
|
|
+ mediumraw_state = DEFAULT;
|
|
+ break;
|
|
+ }
|
|
b++;
|
|
}
|
|
}
|