147ddfab1SGerd Hoffmann /* 247ddfab1SGerd Hoffmann * This work is licensed under the terms of the GNU GPL, version 2 or 347ddfab1SGerd Hoffmann * (at your option) any later version. See the COPYING file in the 447ddfab1SGerd Hoffmann * top-level directory. 547ddfab1SGerd Hoffmann */ 6177d9e0dSMarkus Armbruster 747ddfab1SGerd Hoffmann #ifndef QEMU_UI_KBD_STATE_H 8177d9e0dSMarkus Armbruster #define QEMU_UI_KBD_STATE_H 947ddfab1SGerd Hoffmann 1047ddfab1SGerd Hoffmann #include "qapi/qapi-types-ui.h" 1147ddfab1SGerd Hoffmann 1247ddfab1SGerd Hoffmann typedef enum QKbdModifier QKbdModifier; 1347ddfab1SGerd Hoffmann 1447ddfab1SGerd Hoffmann enum QKbdModifier { 1547ddfab1SGerd Hoffmann QKBD_MOD_NONE = 0, 1647ddfab1SGerd Hoffmann 1747ddfab1SGerd Hoffmann QKBD_MOD_SHIFT, 1847ddfab1SGerd Hoffmann QKBD_MOD_CTRL, 1947ddfab1SGerd Hoffmann QKBD_MOD_ALT, 2047ddfab1SGerd Hoffmann QKBD_MOD_ALTGR, 2147ddfab1SGerd Hoffmann 2247ddfab1SGerd Hoffmann QKBD_MOD_NUMLOCK, 2347ddfab1SGerd Hoffmann QKBD_MOD_CAPSLOCK, 2447ddfab1SGerd Hoffmann 2547ddfab1SGerd Hoffmann QKBD_MOD__MAX 2647ddfab1SGerd Hoffmann }; 2747ddfab1SGerd Hoffmann 2847ddfab1SGerd Hoffmann typedef struct QKbdState QKbdState; 2947ddfab1SGerd Hoffmann 3047ddfab1SGerd Hoffmann /** 3147ddfab1SGerd Hoffmann * qkbd_state_init: init keyboard state tracker. 3247ddfab1SGerd Hoffmann * 3347ddfab1SGerd Hoffmann * Allocates and initializes keyboard state struct. 3447ddfab1SGerd Hoffmann * 3547ddfab1SGerd Hoffmann * @con: QemuConsole for this state tracker. Gets passed down to 3647ddfab1SGerd Hoffmann * qemu_input_*() functions when sending key events to the guest. 3747ddfab1SGerd Hoffmann */ 3847ddfab1SGerd Hoffmann QKbdState *qkbd_state_init(QemuConsole *con); 3947ddfab1SGerd Hoffmann 4047ddfab1SGerd Hoffmann /** 4147ddfab1SGerd Hoffmann * qkbd_state_free: free keyboard tracker state. 4247ddfab1SGerd Hoffmann * 4347ddfab1SGerd Hoffmann * @kbd: state tracker state. 4447ddfab1SGerd Hoffmann */ 4547ddfab1SGerd Hoffmann void qkbd_state_free(QKbdState *kbd); 4647ddfab1SGerd Hoffmann 4747ddfab1SGerd Hoffmann /** 4847ddfab1SGerd Hoffmann * qkbd_state_key_event: process key event. 4947ddfab1SGerd Hoffmann * 5047ddfab1SGerd Hoffmann * Update keyboard state, send event to the guest. 5147ddfab1SGerd Hoffmann * 5247ddfab1SGerd Hoffmann * This function takes care to not send suspious events (keyup event 5347ddfab1SGerd Hoffmann * for a key not pressed for example). 5447ddfab1SGerd Hoffmann * 5547ddfab1SGerd Hoffmann * @kbd: state tracker state. 5647ddfab1SGerd Hoffmann * @qcode: the key pressed or released. 5747ddfab1SGerd Hoffmann * @down: true for key down events, false otherwise. 5847ddfab1SGerd Hoffmann */ 5947ddfab1SGerd Hoffmann void qkbd_state_key_event(QKbdState *kbd, QKeyCode qcode, bool down); 6047ddfab1SGerd Hoffmann 6147ddfab1SGerd Hoffmann /** 6247ddfab1SGerd Hoffmann * qkbd_state_set_delay: set key press delay. 6347ddfab1SGerd Hoffmann * 6447ddfab1SGerd Hoffmann * When set the specified delay will be added after each key event, 6547ddfab1SGerd Hoffmann * using qemu_input_event_send_key_delay(). 6647ddfab1SGerd Hoffmann * 6747ddfab1SGerd Hoffmann * @kbd: state tracker state. 68d4761b65SMichael Tokarev * @delay_ms: the delay in milliseconds. 6947ddfab1SGerd Hoffmann */ 7047ddfab1SGerd Hoffmann void qkbd_state_set_delay(QKbdState *kbd, int delay_ms); 7147ddfab1SGerd Hoffmann 7247ddfab1SGerd Hoffmann /** 7347ddfab1SGerd Hoffmann * qkbd_state_key_get: get key state. 7447ddfab1SGerd Hoffmann * 7547ddfab1SGerd Hoffmann * Returns true when the key is down. 7647ddfab1SGerd Hoffmann * 7747ddfab1SGerd Hoffmann * @kbd: state tracker state. 7847ddfab1SGerd Hoffmann * @qcode: the key to query. 7947ddfab1SGerd Hoffmann */ 8047ddfab1SGerd Hoffmann bool qkbd_state_key_get(QKbdState *kbd, QKeyCode qcode); 8147ddfab1SGerd Hoffmann 8247ddfab1SGerd Hoffmann /** 8347ddfab1SGerd Hoffmann * qkbd_state_modifier_get: get modifier state. 8447ddfab1SGerd Hoffmann * 8547ddfab1SGerd Hoffmann * Returns true when the modifier is active. 8647ddfab1SGerd Hoffmann * 8747ddfab1SGerd Hoffmann * @kbd: state tracker state. 8847ddfab1SGerd Hoffmann * @mod: the modifier to query. 8947ddfab1SGerd Hoffmann */ 9047ddfab1SGerd Hoffmann bool qkbd_state_modifier_get(QKbdState *kbd, QKbdModifier mod); 9147ddfab1SGerd Hoffmann 9247ddfab1SGerd Hoffmann /** 9347ddfab1SGerd Hoffmann * qkbd_state_lift_all_keys: lift all pressed keys. 9447ddfab1SGerd Hoffmann * 9547ddfab1SGerd Hoffmann * This sends key up events to the guest for all keys which are in 9647ddfab1SGerd Hoffmann * down state. 9747ddfab1SGerd Hoffmann * 9847ddfab1SGerd Hoffmann * @kbd: state tracker state. 9947ddfab1SGerd Hoffmann */ 10047ddfab1SGerd Hoffmann void qkbd_state_lift_all_keys(QKbdState *kbd); 10147ddfab1SGerd Hoffmann 102*d4c19956SAkihiko Odaki /** 103*d4c19956SAkihiko Odaki * qkbd_state_switch_console: Switch console. 104*d4c19956SAkihiko Odaki * 105*d4c19956SAkihiko Odaki * This sends key up events to the previous console for all keys which are in 106*d4c19956SAkihiko Odaki * down state to prevent keys being stuck, and remembers the new console. 107*d4c19956SAkihiko Odaki * 108*d4c19956SAkihiko Odaki * @kbd: state tracker state. 109*d4c19956SAkihiko Odaki * @con: new QemuConsole for this state tracker. 110*d4c19956SAkihiko Odaki */ 111*d4c19956SAkihiko Odaki void qkbd_state_switch_console(QKbdState *kbd, QemuConsole *con); 112*d4c19956SAkihiko Odaki 11347ddfab1SGerd Hoffmann #endif /* QEMU_UI_KBD_STATE_H */ 114