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