Vitaliy Margolen wine-patches@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.