1 /* 2 * This work is licensed under the terms of the GNU GPL, version 2 or 3 * (at your option) any later version. See the COPYING file in the 4 * top-level directory. 5 */ 6 7 #ifndef QEMU_UI_KBD_STATE_H 8 #define QEMU_UI_KBD_STATE_H 9 10 #include "qapi/qapi-types-ui.h" 11 12 typedef enum QKbdModifier QKbdModifier; 13 14 enum QKbdModifier { 15 QKBD_MOD_NONE = 0, 16 17 QKBD_MOD_SHIFT, 18 QKBD_MOD_CTRL, 19 QKBD_MOD_ALT, 20 QKBD_MOD_ALTGR, 21 22 QKBD_MOD_NUMLOCK, 23 QKBD_MOD_CAPSLOCK, 24 25 QKBD_MOD__MAX 26 }; 27 28 typedef struct QKbdState QKbdState; 29 30 /** 31 * qkbd_state_init: init keyboard state tracker. 32 * 33 * Allocates and initializes keyboard state struct. 34 * 35 * @con: QemuConsole for this state tracker. Gets passed down to 36 * qemu_input_*() functions when sending key events to the guest. 37 */ 38 QKbdState *qkbd_state_init(QemuConsole *con); 39 40 /** 41 * qkbd_state_free: free keyboard tracker state. 42 * 43 * @kbd: state tracker state. 44 */ 45 void qkbd_state_free(QKbdState *kbd); 46 47 /** 48 * qkbd_state_key_event: process key event. 49 * 50 * Update keyboard state, send event to the guest. 51 * 52 * This function takes care to not send suspious events (keyup event 53 * for a key not pressed for example). 54 * 55 * @kbd: state tracker state. 56 * @qcode: the key pressed or released. 57 * @down: true for key down events, false otherwise. 58 */ 59 void qkbd_state_key_event(QKbdState *kbd, QKeyCode qcode, bool down); 60 61 /** 62 * qkbd_state_set_delay: set key press delay. 63 * 64 * When set the specified delay will be added after each key event, 65 * using qemu_input_event_send_key_delay(). 66 * 67 * @kbd: state tracker state. 68 * @delay_ms: the delay in milliseconds. 69 */ 70 void qkbd_state_set_delay(QKbdState *kbd, int delay_ms); 71 72 /** 73 * qkbd_state_key_get: get key state. 74 * 75 * Returns true when the key is down. 76 * 77 * @kbd: state tracker state. 78 * @qcode: the key to query. 79 */ 80 bool qkbd_state_key_get(QKbdState *kbd, QKeyCode qcode); 81 82 /** 83 * qkbd_state_modifier_get: get modifier state. 84 * 85 * Returns true when the modifier is active. 86 * 87 * @kbd: state tracker state. 88 * @mod: the modifier to query. 89 */ 90 bool qkbd_state_modifier_get(QKbdState *kbd, QKbdModifier mod); 91 92 /** 93 * qkbd_state_lift_all_keys: lift all pressed keys. 94 * 95 * This sends key up events to the guest for all keys which are in 96 * down state. 97 * 98 * @kbd: state tracker state. 99 */ 100 void qkbd_state_lift_all_keys(QKbdState *kbd); 101 102 /** 103 * qkbd_state_switch_console: Switch console. 104 * 105 * This sends key up events to the previous console for all keys which are in 106 * down state to prevent keys being stuck, and remembers the new console. 107 * 108 * @kbd: state tracker state. 109 * @con: new QemuConsole for this state tracker. 110 */ 111 void qkbd_state_switch_console(QKbdState *kbd, QemuConsole *con); 112 113 #endif /* QEMU_UI_KBD_STATE_H */ 114