From b17835835ea99a3bbff73b4df93d52f24c9d94af Mon Sep 17 00:00:00 2001 From: William McBrine Date: Wed, 15 Nov 2006 17:16:23 +0000 Subject: [PATCH] Return-modifiers-as-keys support for OS/2. Note that it returns them on key down, like the X11 port, and not on key up like the Win32 port. --- os2/pdckbd.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/os2/pdckbd.c b/os2/pdckbd.c index 15c63e9e..176496a3 100644 --- a/os2/pdckbd.c +++ b/os2/pdckbd.c @@ -32,7 +32,7 @@ static HMOU mouse_handle = 0; static MOUSE_STATUS old_mouse_status; #endif -RCSID("$Id: pdckbd.c,v 1.55 2006/11/15 16:26:45 wmcbrine Exp $"); +RCSID("$Id: pdckbd.c,v 1.56 2006/11/15 17:16:23 wmcbrine Exp $"); /************************************************************************ * Table for key code translation of function keys in keypad mode * @@ -186,12 +186,12 @@ void PDC_set_keyboard_binary(bool on) if (on) { - kbdinfo.fsMask &= ~KEYBOARD_ASCII_MODE; + kbdinfo.fsMask &= ~(KEYBOARD_ASCII_MODE); kbdinfo.fsMask |= KEYBOARD_BINARY_MODE; } else { - kbdinfo.fsMask &= ~KEYBOARD_BINARY_MODE; + kbdinfo.fsMask &= ~(KEYBOARD_BINARY_MODE); kbdinfo.fsMask |= KEYBOARD_ASCII_MODE; } @@ -388,6 +388,45 @@ int PDC_get_bios_key(void) || keyInfo.fsState & KBDSTF_RIGHTSHIFT) pdc_key_modifiers |= PDC_KEY_MODIFIER_SHIFT; } + + if (keyInfo.fbStatus & KBDTRF_SHIFT_KEY_IN) + { + key = -1; + SP->key_code = TRUE; + + if (keyInfo.fsState & KBDSTF_LEFTALT) + { + key = KEY_ALT_L; + pdc_key_modifiers &= ~(PDC_KEY_MODIFIER_ALT); + } + else if (keyInfo.fsState & KBDSTF_RIGHTALT) + { + key = KEY_ALT_R; + pdc_key_modifiers &= ~(PDC_KEY_MODIFIER_ALT); + } + else if (keyInfo.fsState & KBDSTF_LEFTCONTROL) + { + key = KEY_CONTROL_L; + pdc_key_modifiers &= ~(PDC_KEY_MODIFIER_CONTROL); + } + else if (keyInfo.fsState & KBDSTF_RIGHTCONTROL) + { + key = KEY_CONTROL_R; + pdc_key_modifiers &= ~(PDC_KEY_MODIFIER_CONTROL); + } + else if (keyInfo.fsState & KBDSTF_LEFTSHIFT) + { + key = KEY_SHIFT_L; + pdc_key_modifiers &= ~(PDC_KEY_MODIFIER_SHIFT); + } + else if (keyInfo.fsState & KBDSTF_RIGHTSHIFT) + { + key = KEY_SHIFT_R; + pdc_key_modifiers &= ~(PDC_KEY_MODIFIER_SHIFT); + } + + return key; + } #endif if (scan == 0x1c && key == 0x0a) /* ^Enter */ key = (int)0xfc00; @@ -625,5 +664,16 @@ int PDC_mouse_set(void) int PDC_modifiers_set(void) { - return SP->return_key_modifers ? ERR : OK; + if (SP->return_key_modifiers) + { + kbdinfo.fsMask |= KEYBOARD_SHIFT_REPORT; + PDC_set_keyboard_binary(TRUE); + } + else + { + kbdinfo.fsMask &= ~(KEYBOARD_SHIFT_REPORT); + KbdSetStatus(&kbdinfo, 0); + } + + return OK; }