Kbd fix: Shift was always reset after press
git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@469 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
96d03ad363
commit
d9019bc77b
4
proto.h
4
proto.h
@ -116,8 +116,8 @@ BOOL handle_special_keys(uint32 keysym, unsigned int state, uint32 ev_time, BOOL
|
|||||||
key_translation xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state);
|
key_translation xkeymap_translate_key(uint32 keysym, unsigned int keycode, unsigned int state);
|
||||||
uint16 xkeymap_translate_button(unsigned int button);
|
uint16 xkeymap_translate_button(unsigned int button);
|
||||||
char *get_ksname(uint32 keysym);
|
char *get_ksname(uint32 keysym);
|
||||||
void save_remote_modifiers(void);
|
void save_remote_modifiers(uint8 scancode);
|
||||||
void restore_remote_modifiers(uint32 ev_time);
|
void restore_remote_modifiers(uint32 ev_time, uint8 scancode);
|
||||||
void ensure_remote_modifiers(uint32 ev_time, key_translation tr);
|
void ensure_remote_modifiers(uint32 ev_time, key_translation tr);
|
||||||
void reset_modifier_keys(unsigned int state);
|
void reset_modifier_keys(unsigned int state);
|
||||||
void rdp_send_scancode(uint32 time, uint16 flags, uint8 scancode);
|
void rdp_send_scancode(uint32 time, uint16 flags, uint8 scancode);
|
||||||
|
56
xkeymap.c
56
xkeymap.c
@ -450,27 +450,10 @@ get_ksname(uint32 keysym)
|
|||||||
return ksname;
|
return ksname;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static BOOL
|
||||||
save_remote_modifiers()
|
is_modifier(uint8 scancode)
|
||||||
{
|
{
|
||||||
saved_remote_modifier_state = remote_modifier_state;
|
switch (scancode)
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
restore_remote_modifiers(uint32 ev_time)
|
|
||||||
{
|
|
||||||
key_translation dummy;
|
|
||||||
|
|
||||||
dummy.scancode = 0;
|
|
||||||
dummy.modifiers = saved_remote_modifier_state;
|
|
||||||
ensure_remote_modifiers(ev_time, dummy);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ensure_remote_modifiers(uint32 ev_time, key_translation tr)
|
|
||||||
{
|
|
||||||
/* If this key is a modifier, do nothing */
|
|
||||||
switch (tr.scancode)
|
|
||||||
{
|
{
|
||||||
case SCANCODE_CHAR_LSHIFT:
|
case SCANCODE_CHAR_LSHIFT:
|
||||||
case SCANCODE_CHAR_RSHIFT:
|
case SCANCODE_CHAR_RSHIFT:
|
||||||
@ -481,10 +464,41 @@ ensure_remote_modifiers(uint32 ev_time, key_translation tr)
|
|||||||
case SCANCODE_CHAR_LWIN:
|
case SCANCODE_CHAR_LWIN:
|
||||||
case SCANCODE_CHAR_RWIN:
|
case SCANCODE_CHAR_RWIN:
|
||||||
case SCANCODE_CHAR_NUMLOCK:
|
case SCANCODE_CHAR_NUMLOCK:
|
||||||
return;
|
return True;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return False;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
save_remote_modifiers(uint8 scancode)
|
||||||
|
{
|
||||||
|
if (is_modifier(scancode))
|
||||||
|
return;
|
||||||
|
|
||||||
|
saved_remote_modifier_state = remote_modifier_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
restore_remote_modifiers(uint32 ev_time, uint8 scancode)
|
||||||
|
{
|
||||||
|
key_translation dummy;
|
||||||
|
|
||||||
|
if (is_modifier(scancode))
|
||||||
|
return;
|
||||||
|
|
||||||
|
dummy.scancode = 0;
|
||||||
|
dummy.modifiers = saved_remote_modifier_state;
|
||||||
|
ensure_remote_modifiers(ev_time, dummy);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ensure_remote_modifiers(uint32 ev_time, key_translation tr)
|
||||||
|
{
|
||||||
|
/* If this key is a modifier, do nothing */
|
||||||
|
if (is_modifier(tr.scancode))
|
||||||
|
return;
|
||||||
|
|
||||||
/* NumLock */
|
/* NumLock */
|
||||||
if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask)
|
if (MASK_HAS_BITS(tr.modifiers, MapNumLockMask)
|
||||||
|
4
xwin.c
4
xwin.c
@ -833,10 +833,10 @@ xwin_process_events(void)
|
|||||||
if (tr.scancode == 0)
|
if (tr.scancode == 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
save_remote_modifiers();
|
save_remote_modifiers(tr.scancode);
|
||||||
ensure_remote_modifiers(ev_time, tr);
|
ensure_remote_modifiers(ev_time, tr);
|
||||||
rdp_send_scancode(ev_time, RDP_KEYPRESS, tr.scancode);
|
rdp_send_scancode(ev_time, RDP_KEYPRESS, tr.scancode);
|
||||||
restore_remote_modifiers(ev_time);
|
restore_remote_modifiers(ev_time, tr.scancode);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user