Inhibited keys are defined in keymap files; not hardcoded
git-svn-id: svn://svn.code.sf.net/p/rdesktop/code/trunk/rdesktop@115 423420c4-83ab-492f-b58f-81f9feb106b5
This commit is contained in:
parent
9d83ff00e5
commit
2a495de6e8
@ -251,6 +251,8 @@ enum RDP_INPUT_DEVICE
|
||||
|
||||
#define MapLocalStateMask (1<<10)
|
||||
|
||||
#define MapInhibitMask (1<<11)
|
||||
|
||||
#define MASK_ADD_BITS(var, mask) (var |= mask)
|
||||
#define MASK_REMOVE_BITS(var, mask) (var &= ~mask)
|
||||
#define MASK_HAS_BITS(var, mask) ((var & mask)>0)
|
||||
|
@ -77,6 +77,8 @@ X 2d shift
|
||||
If flags include "localstate", the modifier to send will be determined
|
||||
by the local modifier state.
|
||||
|
||||
If flags is "inhibit", nothing will be sent to the server.
|
||||
|
||||
|
||||
4) enable_compose
|
||||
|
||||
|
@ -138,3 +138,11 @@ KP_Up 0x48
|
||||
|
||||
KP_9 0x49 numlock
|
||||
KP_Page_Up 0x49
|
||||
|
||||
#
|
||||
# Inhibited keys
|
||||
#
|
||||
Caps_Lock 0x0 inhibit
|
||||
Multi_key 0x0 inhibit
|
||||
Num_Lock 0x0 inhibit
|
||||
KP_Begin 0x0 inhibit
|
||||
|
31
xkeymap.c
31
xkeymap.c
@ -177,6 +177,11 @@ xkeymap_read(char *mapname)
|
||||
MASK_ADD_BITS(modifiers, MapLocalStateMask);
|
||||
}
|
||||
|
||||
if (strstr(line_rest, "inhibit"))
|
||||
{
|
||||
MASK_ADD_BITS(modifiers, MapInhibitMask);
|
||||
}
|
||||
|
||||
add_to_keymap(keyname, scancode, modifiers, mapname);
|
||||
|
||||
if (strstr(line_rest, "addupper"))
|
||||
@ -231,6 +236,13 @@ xkeymap_translate_key(KeySym keysym, unsigned int keycode, unsigned int state)
|
||||
|
||||
tr = keymap[keysym & KEYMAP_MASK];
|
||||
|
||||
if (tr.modifiers & MapInhibitMask)
|
||||
{
|
||||
DEBUG_KBD(("Inhibiting key\n"));
|
||||
tr.scancode = 0;
|
||||
return tr;
|
||||
}
|
||||
|
||||
if (tr.modifiers & MapLocalStateMask)
|
||||
{
|
||||
/* The modifiers to send for this key should be obtained
|
||||
@ -298,25 +310,6 @@ get_ksname(KeySym keysym)
|
||||
return ksname;
|
||||
}
|
||||
|
||||
BOOL
|
||||
inhibit_key(KeySym keysym)
|
||||
{
|
||||
switch (keysym)
|
||||
{
|
||||
case XK_Caps_Lock:
|
||||
return True;
|
||||
break;
|
||||
case XK_Multi_key:
|
||||
return True;
|
||||
break;
|
||||
case XK_Num_Lock:
|
||||
return True;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return False;
|
||||
}
|
||||
|
||||
void
|
||||
ensure_remote_modifiers(uint32 ev_time, key_translation tr)
|
||||
|
9
xwin.c
9
xwin.c
@ -586,12 +586,6 @@ xwin_process_events()
|
||||
ksname = get_ksname(keysym);
|
||||
DEBUG_KBD(("\nKeyPress for (keysym 0x%lx, %s)\n", keysym, ksname));
|
||||
|
||||
if (inhibit_key(keysym))
|
||||
{
|
||||
DEBUG_KBD(("Inhibiting key\n"));
|
||||
break;
|
||||
}
|
||||
|
||||
tr = xkeymap_translate_key(keysym,
|
||||
xevent.xkey.keycode, xevent.xkey.state);
|
||||
|
||||
@ -610,9 +604,6 @@ xwin_process_events()
|
||||
DEBUG_KBD(("\nKeyRelease for (keysym 0x%lx, %s)\n", keysym,
|
||||
ksname));
|
||||
|
||||
if (inhibit_key(keysym))
|
||||
break;
|
||||
|
||||
tr = xkeymap_translate_key(keysym,
|
||||
xevent.xkey.keycode, xevent.xkey.state);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user