--- sourceforge.net/trunk/rdesktop/xkeymap.c 2003/02/10 12:58:51 318 +++ sourceforge.net/trunk/rdesktop/xkeymap.c 2003/08/27 09:42:55 449 @@ -12,15 +12,19 @@ but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +#ifdef RDP2VNC +#include "vnc/x11stubs.h" +#else #include -#define XK_MISCELLANY -#include +#include +#endif + #include #include #include @@ -34,12 +38,14 @@ extern Display *display; extern char keymapname[16]; extern int keylayout; -extern BOOL enable_compose; +extern int win_button_size; +extern BOOL g_enable_compose; static BOOL keymap_loaded; static key_translation keymap[KEYMAP_SIZE]; static int min_keycode; static uint16 remote_modifier_state = 0; +static uint16 saved_remote_modifier_state = 0; static void update_modifier_state(uint8 scancode, BOOL pressed); @@ -51,7 +57,7 @@ keysym = XStringToKeysym(keyname); if (keysym == NoSymbol) { - warning("Bad keysym %s in keymap %s\n", keyname, mapname); + DEBUG_KBD(("Bad keysym \"%s\" in keymap %s (ignoring)\n", keyname, mapname)); return; } @@ -135,7 +141,7 @@ if (strncmp(line, "enable_compose", 15) == 0) { DEBUG_KBD(("Enabling compose handling\n")); - enable_compose = True; + g_enable_compose = True; continue; } @@ -307,6 +313,13 @@ rdp_send_scancode(ev_time, RDP_KEYRELEASE, SCANCODE_CHAR_LCTRL); } return True; + + case XK_space: + /* Prevent access to the Windows system menu in single app mode */ + if (win_button_size + && (get_key_state(state, XK_Alt_L) || get_key_state(state, XK_Alt_R))) + return True; + } return False; } @@ -347,7 +360,7 @@ warning("No translation for (keysym 0x%lx, %s)\n", keysym, get_ksname(keysym)); /* not in keymap, try to interpret the raw scancode */ - if ((keycode >= min_keycode) && (keycode <= 0x60)) + if (((int) keycode >= min_keycode) && (keycode <= 0x60)) { tr.scancode = keycode - min_keycode; @@ -402,6 +415,21 @@ return ksname; } +void +save_remote_modifiers() +{ + 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)