259
262
XkbStateFieldFromRec(&inputInfo.keyboard->key->xkbInfo->state);
260
263
winDebug("winRestoreModeKeyStates: state %d\n", internalKeyStates);
263
* NOTE: The C XOR operator, ^, will not work here because it is
264
* a bitwise operator, not a logical operator. C does not
265
* have a logical XOR operator, so we use a macro instead.
268
/* Has the key state changed? */
265
/* Check if modifier keys are pressed, and if so, fake a press */
267
BOOL ctrl = (GetAsyncKeyState(VK_CONTROL) < 0);
268
BOOL shift = (GetAsyncKeyState(VK_SHIFT) < 0);
269
BOOL alt = (GetAsyncKeyState(VK_LMENU) < 0);
270
BOOL altgr = (GetAsyncKeyState(VK_RMENU) < 0);
275
if (LOGICAL_XOR(internalKeyStates & ControlMask, ctrl))
276
winSendKeyEvent(KEY_LCtrl, ctrl);
278
if (LOGICAL_XOR(internalKeyStates & ShiftMask, shift))
279
winSendKeyEvent(KEY_ShiftL, shift);
281
if (LOGICAL_XOR(internalKeyStates & Mod1Mask, alt))
282
winSendKeyEvent(KEY_Alt, alt);
284
if (LOGICAL_XOR(internalKeyStates & Mod5Mask, altgr))
285
winSendKeyEvent(KEY_AltLang, altgr);
289
Check if latching modifier key states have changed, and if so,
290
fake a press and a release to toggle the modifier to the correct
269
293
dwKeyState = GetKeyState(VK_NUMLOCK) & 0x0001;
270
if (WIN_XOR(internalKeyStates & NumLockMask, dwKeyState)) {
294
if (LOGICAL_XOR(internalKeyStates & NumLockMask, dwKeyState)) {
271
295
winSendKeyEvent(KEY_NumLock, TRUE);
272
296
winSendKeyEvent(KEY_NumLock, FALSE);
275
/* Has the key state changed? */
276
299
dwKeyState = GetKeyState(VK_CAPITAL) & 0x0001;
277
if (WIN_XOR(internalKeyStates & LockMask, dwKeyState)) {
300
if (LOGICAL_XOR(internalKeyStates & LockMask, dwKeyState)) {
278
301
winSendKeyEvent(KEY_CapsLock, TRUE);
279
302
winSendKeyEvent(KEY_CapsLock, FALSE);
282
/* Has the key state changed? */
283
305
dwKeyState = GetKeyState(VK_SCROLL) & 0x0001;
284
if (WIN_XOR(internalKeyStates & ScrollLockMask, dwKeyState)) {
306
if (LOGICAL_XOR(internalKeyStates & ScrollLockMask, dwKeyState)) {
285
307
winSendKeyEvent(KEY_ScrollLock, TRUE);
286
308
winSendKeyEvent(KEY_ScrollLock, FALSE);
289
/* Has the key state changed? */
290
311
dwKeyState = GetKeyState(VK_KANA) & 0x0001;
291
if (WIN_XOR(internalKeyStates & KanaMask, dwKeyState)) {
312
if (LOGICAL_XOR(internalKeyStates & KanaMask, dwKeyState)) {
292
313
winSendKeyEvent(KEY_HKTG, TRUE);
293
314
winSendKeyEvent(KEY_HKTG, FALSE);