423 |
break; |
break; |
424 |
} |
} |
425 |
|
|
426 |
|
/* NumLock */ |
427 |
|
if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask) |
428 |
|
!= MASK_HAS_BITS(remote_modifier_state, MapNumLockMask)) |
429 |
|
{ |
430 |
|
/* The remote modifier state is not correct */ |
431 |
|
uint16 new_remote_state; |
432 |
|
|
433 |
|
if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask)) |
434 |
|
{ |
435 |
|
DEBUG_KBD(("Remote NumLock state is incorrect, activating NumLock.\n")); |
436 |
|
new_remote_state = KBD_FLAG_NUMLOCK; |
437 |
|
remote_modifier_state = MapNumLockMask; |
438 |
|
} |
439 |
|
else |
440 |
|
{ |
441 |
|
DEBUG_KBD(("Remote NumLock state is incorrect, deactivating NumLock.\n")); |
442 |
|
new_remote_state = 0; |
443 |
|
remote_modifier_state = 0; |
444 |
|
} |
445 |
|
|
446 |
|
rdp_send_input(0, RDP_INPUT_SYNCHRONIZE, 0, new_remote_state, 0); |
447 |
|
} |
448 |
|
|
449 |
/* Shift. Left shift and right shift are treated as equal; either is fine. */ |
/* Shift. Left shift and right shift are treated as equal; either is fine. */ |
450 |
if (MASK_HAS_BITS(tr.modifiers, MapShiftMask) |
if (MASK_HAS_BITS(tr.modifiers, MapShiftMask) |
451 |
!= MASK_HAS_BITS(remote_modifier_state, MapShiftMask)) |
!= MASK_HAS_BITS(remote_modifier_state, MapShiftMask)) |
490 |
} |
} |
491 |
} |
} |
492 |
|
|
|
/* NumLock */ |
|
|
if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask) |
|
|
!= MASK_HAS_BITS(remote_modifier_state, MapNumLockMask)) |
|
|
{ |
|
|
/* The remote modifier state is not correct */ |
|
|
uint16 new_remote_state = 0; |
|
493 |
|
|
|
if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask)) |
|
|
{ |
|
|
DEBUG_KBD(("Remote NumLock state is incorrect, activating NumLock.\n")); |
|
|
new_remote_state |= KBD_FLAG_NUMLOCK; |
|
|
} |
|
|
else |
|
|
{ |
|
|
DEBUG_KBD(("Remote NumLock state is incorrect, deactivating NumLock.\n")); |
|
|
} |
|
|
|
|
|
rdp_send_input(0, RDP_INPUT_SYNCHRONIZE, 0, new_remote_state, 0); |
|
|
update_modifier_state(SCANCODE_CHAR_NUMLOCK, True); |
|
|
} |
|
494 |
} |
} |
495 |
|
|
496 |
|
|