--- sourceforge.net/trunk/rdesktop/xkeymap.c 2002/09/24 07:59:14 192 +++ sourceforge.net/trunk/rdesktop/xkeymap.c 2002/09/25 11:17:59 199 @@ -218,12 +218,56 @@ { switch (keysym) { - case XK_Break: /* toggle full screen */ - if (pressed && (get_key_state(XK_Alt_L) || get_key_state(XK_Alt_R))) + case XK_Break: + if (get_key_state(XK_Alt_L) || get_key_state(XK_Alt_R)) { - xwin_toggle_fullscreen(); - return True; + /* toggle full screen */ + if (pressed) + xwin_toggle_fullscreen(); + + } + else + { + /* Send Break sequence E0 46 E0 C6 */ + if (pressed) + { + rdp_send_scancode(ev_time, RDP_KEYPRESS, + (SCANCODE_EXTENDED | 0x46)); + rdp_send_scancode(ev_time, RDP_KEYPRESS, + (SCANCODE_EXTENDED | 0xc6)); + } + /* No break sequence */ + } + + return True; + break; + + case XK_Pause: + /* According to MS Keyboard Scan Code + Specification, pressing Pause should result + in E1 1D 45 E1 9D C5. I'm not exactly sure + of how this is supposed to be sent via + RDP. The code below seems to work, but with + the side effect that Left Ctrl stays + down. Therefore, we release it when Pause + is released. */ + if (pressed) + { + rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xe1, 0); + rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x1d, 0); + rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x45, 0); + rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xe1, 0); + rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x9d, 0); + rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0xc5, 0); + } + else + { + // Release Left Ctrl + rdp_send_input(ev_time, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x1d, + 0); } + + return True; break; case XK_Meta_L: /* Windows keys */ @@ -276,7 +320,7 @@ if (tr.scancode != 0) { DEBUG_KBD(("Found key translation, scancode=0x%x, modifiers=0x%x\n", - tr.scancode, tr.modifiers)); + tr.scancode, tr.modifiers)); return tr; }