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);
|
||||
uint16 xkeymap_translate_button(unsigned int button);
|
||||
char *get_ksname(uint32 keysym);
|
||||
void save_remote_modifiers(void);
|
||||
void restore_remote_modifiers(uint32 ev_time);
|
||||
void save_remote_modifiers(uint8 scancode);
|
||||
void restore_remote_modifiers(uint32 ev_time, uint8 scancode);
|
||||
void ensure_remote_modifiers(uint32 ev_time, key_translation tr);
|
||||
void reset_modifier_keys(unsigned int state);
|
||||
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;
|
||||
}
|
||||
|
||||
void
|
||||
save_remote_modifiers()
|
||||
static BOOL
|
||||
is_modifier(uint8 scancode)
|
||||
{
|
||||
saved_remote_modifier_state = remote_modifier_state;
|
||||
}
|
||||
|
||||
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)
|
||||
switch (scancode)
|
||||
{
|
||||
case SCANCODE_CHAR_LSHIFT:
|
||||
case SCANCODE_CHAR_RSHIFT:
|
||||
@ -481,10 +464,41 @@ ensure_remote_modifiers(uint32 ev_time, key_translation tr)
|
||||
case SCANCODE_CHAR_LWIN:
|
||||
case SCANCODE_CHAR_RWIN:
|
||||
case SCANCODE_CHAR_NUMLOCK:
|
||||
return;
|
||||
return True;
|
||||
default:
|
||||
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 */
|
||||
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)
|
||||
break;
|
||||
|
||||
save_remote_modifiers();
|
||||
save_remote_modifiers(tr.scancode);
|
||||
ensure_remote_modifiers(ev_time, tr);
|
||||
rdp_send_scancode(ev_time, RDP_KEYPRESS, tr.scancode);
|
||||
restore_remote_modifiers(ev_time);
|
||||
restore_remote_modifiers(ev_time, tr.scancode);
|
||||
|
||||
break;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user