--- sourceforge.net/trunk/rdesktop/xkeymap.c 2002/07/18 18:28:12 66 +++ sourceforge.net/trunk/rdesktop/xkeymap.c 2002/07/27 23:09:32 70 @@ -35,6 +35,7 @@ extern Display *display; extern char keymapname[16]; extern int keylayout; +extern BOOL enable_compose; static key_translation keymap[KEYMAP_SIZE]; static unsigned int min_keycode; @@ -120,6 +121,14 @@ continue; } + /* compose */ + if (strncmp(line, "enable_compose", 15) == 0) + { + DEBUG_KBD("Enabling compose handling\n"); + enable_compose = True; + continue; + } + /* Comment */ if (line[0] == '#') { @@ -163,6 +172,11 @@ MASK_ADD_BITS(modifiers, MapNumLockMask); } + if (strstr(line_rest, "localstate")) + { + MASK_ADD_BITS(modifiers, MapLocalStateMask); + } + add_to_keymap(keyname, scancode, modifiers, mapname); if (strstr(line_rest, "addupper")) @@ -211,12 +225,22 @@ key_translation -xkeymap_translate_key(KeySym keysym, unsigned int keycode) +xkeymap_translate_key(KeySym keysym, unsigned int keycode, unsigned int state) { key_translation tr = { 0, 0 }; tr = keymap[keysym & KEYMAP_MASK]; + if (tr.modifiers & MapLocalStateMask) + { + /* The modifiers to send for this key should be obtained + from the local state. Currently, only shift is implemented. */ + if (state & ShiftMask) + { + tr.modifiers = MapLeftShiftMask; + } + } + if (tr.scancode != 0) { DEBUG_KBD @@ -253,6 +277,10 @@ return MOUSE_FLAG_BUTTON3; case Button3: /* right */ return MOUSE_FLAG_BUTTON2; + case Button4: /* wheel up */ + return MOUSE_FLAG_BUTTON4; + case Button5: /* wheel down */ + return MOUSE_FLAG_BUTTON5; } return 0;