void xf_kbd_focus_in(xfInfo* xfi) { rdpInput* input; uint32 syncFlags; input = xfi->instance->input; /* on focus in send a tab up like mstsc.exe */ input->KeyboardEvent(input, KBD_FLAGS_RELEASE, 0x0F); /* synchronize toggle keys */ syncFlags = xf_kbd_get_toggle_keys_state(xfi); input->SynchronizeEvent(input, syncFlags); }
void xf_kbd_focus_in(xfInfo* xfi) { rdpInput* input; UINT32 syncFlags; int dummy, mouseX, mouseY; Window wdummy; UINT32 state = 0; input = xfi->instance->input; syncFlags = xf_kbd_get_toggle_keys_state(xfi); XQueryPointer(xfi->display, xfi->window->handle, &wdummy, &wdummy, &mouseX, &mouseY, &dummy, &dummy, &state); input->FocusInEvent(input, syncFlags, mouseX, mouseY); }
void xf_kbd_send_key(xfInfo* xfi, boolean down, uint8 keycode) { uint16 flags; uint8 scancode; boolean extended; rdpInput* input; input = xfi->instance->input; scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(keycode, &extended); if (scancode == 0) { /* unknown key */ } else if ((scancode == 0x46) && extended && !xf_kbd_key_pressed(xfi, XK_Control_L) && !xf_kbd_key_pressed(xfi, XK_Control_R)) { /* Pause without Ctrl has to be sent as Ctrl + NumLock. */ if (down) { input->KeyboardEvent(input, KBD_FLAGS_DOWN, 0x1D); /* Ctrl down */ input->KeyboardEvent(input, KBD_FLAGS_DOWN, 0x45); /* NumLock down */ input->KeyboardEvent(input, KBD_FLAGS_RELEASE, 0x1D); /* Ctrl up */ input->KeyboardEvent(input, KBD_FLAGS_RELEASE, 0x45); /* NumLock up */ } } else { flags = (extended) ? KBD_FLAGS_EXTENDED : 0; flags |= (down) ? KBD_FLAGS_DOWN : KBD_FLAGS_RELEASE; input->KeyboardEvent(input, flags, scancode); if ((scancode == 0x3A) && (down == false)) /* caps lock was released */ { uint32 syncFlags; syncFlags = xf_kbd_get_toggle_keys_state(xfi); input->SynchronizeEvent(input, syncFlags); } } }
void xf_kbd_send_key(xfContext* xfc, BOOL down, BYTE keycode) { DWORD rdp_scancode; rdpInput* input; input = xfc->instance->input; rdp_scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(keycode); if (rdp_scancode == RDP_SCANCODE_UNKNOWN) { fprintf(stderr, "Unknown key with X keycode 0x%02x\n", keycode); } else if (rdp_scancode == RDP_SCANCODE_PAUSE && !xf_kbd_key_pressed(xfc, XK_Control_L) && !xf_kbd_key_pressed(xfc, XK_Control_R)) { /* Pause without Ctrl has to be sent as a series of keycodes * in a single input PDU. Pause only happens on "press"; * no code is sent on "release". */ if (down) { freerdp_input_send_keyboard_pause_event(input); } } else { freerdp_input_send_keyboard_event_ex(input, down, rdp_scancode); if ((rdp_scancode == RDP_SCANCODE_CAPSLOCK) && (down == FALSE)) { UINT32 syncFlags; syncFlags = xf_kbd_get_toggle_keys_state(xfc); input->SynchronizeEvent(input, syncFlags); } } }
void xf_kbd_send_key(xfInfo* xfi, BOOL down, BYTE keycode) { DWORD rdp_scancode; rdpInput* input; input = xfi->instance->input; rdp_scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(keycode); if (rdp_scancode == RDP_SCANCODE_UNKNOWN) { fprintf(stderr, "Unknown key with X keycode 0x%02x\n", keycode); } else if (rdp_scancode == RDP_SCANCODE_PAUSE && !xf_kbd_key_pressed(xfi, XK_Control_L) && !xf_kbd_key_pressed(xfi, XK_Control_R)) { /* Pause without Ctrl has to be sent as Ctrl + NumLock. */ if (down) { freerdp_input_send_keyboard_event_ex(input, TRUE, RDP_SCANCODE_LCONTROL); freerdp_input_send_keyboard_event_ex(input, TRUE, RDP_SCANCODE_NUMLOCK); freerdp_input_send_keyboard_event_ex(input, FALSE, RDP_SCANCODE_LCONTROL); freerdp_input_send_keyboard_event_ex(input, FALSE, RDP_SCANCODE_NUMLOCK); } } else { freerdp_input_send_keyboard_event_ex(input, down, rdp_scancode); if ((rdp_scancode == RDP_SCANCODE_CAPSLOCK) && (down == FALSE)) { UINT32 syncFlags; syncFlags = xf_kbd_get_toggle_keys_state(xfi); input->SynchronizeEvent(input, syncFlags); } } }
void xf_kbd_send_key(xfInfo* xfi, boolean down, uint8 keycode) { RDP_SCANCODE rdp_scancode; rdpInput* input; input = xfi->instance->input; rdp_scancode = freerdp_keyboard_get_rdp_scancode_from_x11_keycode(keycode); if (rdp_scancode == RDP_SCANCODE_UNKNOWN) { printf("Unknown key with X keycode 0x%02x\n", keycode); } else if (rdp_scancode == RDP_SCANCODE_PAUSE && !xf_kbd_key_pressed(xfi, XK_Control_L) && !xf_kbd_key_pressed(xfi, XK_Control_R)) { /* Pause without Ctrl has to be sent as Ctrl + NumLock. */ if (down) { freerdp_input_send_keyboard_event_2(input, true, RDP_SCANCODE_LCONTROL); freerdp_input_send_keyboard_event_2(input, true, RDP_SCANCODE_NUMLOCK); freerdp_input_send_keyboard_event_2(input, false, RDP_SCANCODE_LCONTROL); freerdp_input_send_keyboard_event_2(input, false, RDP_SCANCODE_NUMLOCK); } } else { freerdp_input_send_keyboard_event_2(input, down, rdp_scancode); if ((rdp_scancode == RDP_SCANCODE_CAPSLOCK) && (down == false)) { uint32 syncFlags; syncFlags = xf_kbd_get_toggle_keys_state(xfi); input->SynchronizeEvent(input, syncFlags); } } }