xref: /qemu/include/ui/kbd-state.h (revision 54294b23e16dfaeb72e0ffa8b9f13ca8129edfce)
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