Vitaliy Margolen <wine-patches(a)kievinfo.com> writes:
- if (vkey) - { - switch (vkey & 0xff) + if (!vkey) return; + + /* Adjust the NUMLOCK state if it has been changed outside wine */ + if (!(key_state_table[VK_NUMLOCK] & 0x01) != !(event->state & NumLockMask)) { - case VK_NUMLOCK: - KEYBOARD_GenerateMsg( VK_NUMLOCK, 0x45, event->type, event_time ); - break; - case VK_CAPITAL: - TRACE("Caps Lock event. (type %d). State before : %#.2x\n",event->type,key_state_table[vkey]); - KEYBOARD_GenerateMsg( VK_CAPITAL, 0x3A, event->type, event_time ); - TRACE("State after : %#.2x\n",key_state_table[vkey]); - break; - default: - /* Adjust the NUMLOCK state if it has been changed outside wine */ - if (!(key_state_table[VK_NUMLOCK] & 0x01) != !(event->state & NumLockMask)) - { - TRACE("Adjusting NumLock state.\n"); - KEYBOARD_GenerateMsg( VK_NUMLOCK, 0x45, KeyPress, event_time ); - KEYBOARD_GenerateMsg( VK_NUMLOCK, 0x45, KeyRelease, event_time ); - } - /* Adjust the CAPSLOCK state if it has been changed outside wine */ - if (!(key_state_table[VK_CAPITAL] & 0x01) != !(event->state & LockMask)) - { - TRACE("Adjusting Caps Lock state.\n"); - KEYBOARD_GenerateMsg( VK_CAPITAL, 0x3A, KeyPress, event_time ); - KEYBOARD_GenerateMsg( VK_CAPITAL, 0x3A, KeyRelease, event_time ); - } - /* Not Num nor Caps : end of intermediary states for both. */ - NumState = FALSE; - CapsState = FALSE; + TRACE("Adjusting NumLock state (%#.2x).\n", key_state_table[VK_NUMLOCK]); + X11DRV_send_keyboard_input( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY, event_time, 0, 0 ); + X11DRV_send_keyboard_input( VK_NUMLOCK, 0x45, KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, event_time, 0, 0 ); + } + /* Adjust the CAPSLOCK state if it has been changed outside wine */ + if (!(key_state_table[VK_CAPITAL] & 0x01) != !(event->state & LockMask)) + { + TRACE("Adjusting Caps Lock state (%#.2x).\n", key_state_table[VK_CAPITAL]); + X11DRV_send_keyboard_input( VK_CAPITAL, 0x3A, 0, event_time, 0, 0 ); + X11DRV_send_keyboard_input( VK_CAPITAL, 0x3A, KEYEVENTF_KEYUP, event_time, 0, 0 ); + }
You still need to handle the case of caps lock or num lock keys differently, otherwise you'll generate duplicate messages. -- Alexandre Julliard julliard(a)winehq.org