static BOOL xf_event_KeyPress(xfContext* xfc, XEvent* event, BOOL app) { KeySym keysym; char str[256]; XLookupString((XKeyEvent*) event, str, sizeof(str), &keysym, NULL); xf_kbd_set_keypress(xfc, event->xkey.keycode, keysym); if (keysym == XK_Insert && ((xf_kbd_key_pressed(xfc, XK_Alt_L) || xf_kbd_key_pressed(xfc, XK_Alt_R)) && (xf_kbd_key_pressed(xfc, XK_Control_L) || xf_kbd_key_pressed(xfc, XK_Control_R))) ) { // Ctrl-Alt-Insert: translate to Ctrl-Alt-Delete xf_kbd_send_key(xfc, TRUE, (BYTE)0x77); return TRUE; } if (xfc->fullscreen_toggle && xf_kbd_handle_special_keys(xfc, keysym)) return TRUE; xf_kbd_send_key(xfc, TRUE, event->xkey.keycode); return TRUE; }
static BOOL xf_event_KeyPress(xfInfo* xfi, XEvent* event, BOOL app) { KeySym keysym; char str[256]; XLookupString((XKeyEvent*) event, str, sizeof(str), &keysym, NULL); xf_kbd_set_keypress(xfi, event->xkey.keycode, keysym); if (xfi->fullscreen_toggle && xf_kbd_handle_special_keys(xfi, keysym)) return TRUE; xf_kbd_send_key(xfi, TRUE, event->xkey.keycode); return TRUE; }
static BOOL xf_event_KeyRelease(xfInfo* xfi, XEvent* event, BOOL app) { XEvent next_event; if (XPending(xfi->display)) { ZeroMemory(&next_event, sizeof(next_event)); XPeekEvent(xfi->display, &next_event); if (next_event.type == KeyPress) { if (next_event.xkey.keycode == event->xkey.keycode) return TRUE; } } xf_kbd_unset_keypress(xfi, event->xkey.keycode); xf_kbd_send_key(xfi, FALSE, event->xkey.keycode); return TRUE; }
boolean xf_event_KeyRelease(xfInfo* xfi, XEvent* event, boolean app) { XEvent next_event; if (XPending(xfi->display)) { memset(&next_event, 0, sizeof(next_event)); XPeekEvent(xfi->display, &next_event); if (next_event.type == KeyPress) { if (next_event.xkey.keycode == event->xkey.keycode) return true; } } xf_kbd_unset_keypress(xfi, event->xkey.keycode); xf_kbd_send_key(xfi, false, event->xkey.keycode); return true; }