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:
Peter Åstrand 2002-09-11 11:11:27 +00:00
parent 9d83ff00e5
commit 2a495de6e8
5 changed files with 24 additions and 28 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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
View File

@ -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);