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