--- xorg-x11-6.8.2/xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c 2005-04-28 17:57:18 +0400 +++ xorg-x11-6.8.1.99/xc/programs/Xserver/hw/xfree86/input/keyboard/kbd.c 2005-05-10 20:12:44 +0400 @@ -204,6 +204,10 @@ pInfo->type_name = XI_KEYBOARD; pInfo->flags = XI86_KEYBOARD_CAPABLE; pInfo->device_control = KbdProc; + /* + * We don't specify our own read_input function. We expect + * an OS specific readInput() function to handle this. + */ pInfo->read_input = NULL; pInfo->motion_history_proc = NULL; pInfo->history_size = 0; @@ -537,6 +541,10 @@ unsigned long changeLock = 0; static int lockkeys = 0; +#ifdef DEBUG + ErrorF("kbd driver rec scancode: 0x02%x %s\n", scanCode, down?"down":"up"); +#endif + /* Disable any keyboard processing while in suspend */ if (xf86inSuspend) return; @@ -596,10 +604,12 @@ * they need to get the same key code as the base key on the same * physical keyboard key. */ - if (scanCode == KEY_SysReqest) - scanCode = KEY_Print; - else if (scanCode == KEY_Break) - scanCode = KEY_Pause; + if (!xf86IsPc98()) { + if (ModifierDown(AltMask) && (scanCode == KEY_SysReqest)) + scanCode = KEY_Print; + else if (scanCode == KEY_Break) + scanCode = KEY_Pause; + } #endif /* --- xorg-x11-6.8.2/xc/programs/Xserver/hw/xfree86/os-support/shared/at_scancode.c 2005-04-28 17:57:33 +0400 +++ xorg-x11-6.8.1.99/xc/programs/Xserver/hw/xfree86/os-support/shared/at_scancode.c 2005-05-10 20:12:47 +0400 @@ -43,6 +43,9 @@ case KEY_Prefix1: pKbd->scanPrefix = *scanCode; /* special prefixes */ return TRUE; + } + if (!xf86IsPc98()) { + switch (*scanCode) { case 0x59: *scanCode = KEY_0x59; break; case 0x5a: *scanCode = KEY_0x5A; break; case 0x5b: *scanCode = KEY_0x5B; break; @@ -71,6 +74,7 @@ case 0x74: *scanCode = KEY_0x74; break; case 0x75: *scanCode = KEY_0x75; break; case 0x76: *scanCode = KEY_0x76; break; + } } break; case KEY_Prefix0: