xref: /qemu/ui/input-barrier.h (revision 6105683d)
1*6105683dSLaurent Vivier /*
2*6105683dSLaurent Vivier  * SPDX-License-Identifier: GPL-2.0-or-later
3*6105683dSLaurent Vivier  *
4*6105683dSLaurent Vivier  * This work is licensed under the terms of the GNU GPL, version 2 or later.
5*6105683dSLaurent Vivier  * See the COPYING file in the top-level directory.
6*6105683dSLaurent Vivier  */
7*6105683dSLaurent Vivier 
8*6105683dSLaurent Vivier #ifndef UI_INPUT_BARRIER_H
9*6105683dSLaurent Vivier #define UI_INPUT_BARRIER_H
10*6105683dSLaurent Vivier 
11*6105683dSLaurent Vivier /* Barrier protocol */
12*6105683dSLaurent Vivier #define BARRIER_VERSION_MAJOR 1
13*6105683dSLaurent Vivier #define BARRIER_VERSION_MINOR 6
14*6105683dSLaurent Vivier 
15*6105683dSLaurent Vivier enum barrierCmd {
16*6105683dSLaurent Vivier     barrierCmdCNoop,
17*6105683dSLaurent Vivier     barrierCmdCClose,
18*6105683dSLaurent Vivier     barrierCmdCEnter,
19*6105683dSLaurent Vivier     barrierCmdCLeave,
20*6105683dSLaurent Vivier     barrierCmdCClipboard,
21*6105683dSLaurent Vivier     barrierCmdCScreenSaver,
22*6105683dSLaurent Vivier     barrierCmdCResetOptions,
23*6105683dSLaurent Vivier     barrierCmdCInfoAck,
24*6105683dSLaurent Vivier     barrierCmdCKeepAlive,
25*6105683dSLaurent Vivier     barrierCmdDKeyDown,
26*6105683dSLaurent Vivier     barrierCmdDKeyRepeat,
27*6105683dSLaurent Vivier     barrierCmdDKeyUp,
28*6105683dSLaurent Vivier     barrierCmdDMouseDown,
29*6105683dSLaurent Vivier     barrierCmdDMouseUp,
30*6105683dSLaurent Vivier     barrierCmdDMouseMove,
31*6105683dSLaurent Vivier     barrierCmdDMouseRelMove,
32*6105683dSLaurent Vivier     barrierCmdDMouseWheel,
33*6105683dSLaurent Vivier     barrierCmdDClipboard,
34*6105683dSLaurent Vivier     barrierCmdDInfo,
35*6105683dSLaurent Vivier     barrierCmdDSetOptions,
36*6105683dSLaurent Vivier     barrierCmdDFileTransfer,
37*6105683dSLaurent Vivier     barrierCmdDDragInfo,
38*6105683dSLaurent Vivier     barrierCmdQInfo,
39*6105683dSLaurent Vivier     barrierCmdEIncompatible,
40*6105683dSLaurent Vivier     barrierCmdEBusy,
41*6105683dSLaurent Vivier     barrierCmdEUnknown,
42*6105683dSLaurent Vivier     barrierCmdEBad,
43*6105683dSLaurent Vivier     /* connection sequence */
44*6105683dSLaurent Vivier     barrierCmdHello,
45*6105683dSLaurent Vivier     barrierCmdHelloBack,
46*6105683dSLaurent Vivier };
47*6105683dSLaurent Vivier 
48*6105683dSLaurent Vivier enum {
49*6105683dSLaurent Vivier    barrierButtonNone,
50*6105683dSLaurent Vivier    barrierButtonLeft,
51*6105683dSLaurent Vivier    barrierButtonMiddle,
52*6105683dSLaurent Vivier    barrierButtonRight,
53*6105683dSLaurent Vivier    barrierButtonExtra0
54*6105683dSLaurent Vivier };
55*6105683dSLaurent Vivier 
56*6105683dSLaurent Vivier struct barrierVersion {
57*6105683dSLaurent Vivier     int16_t major;
58*6105683dSLaurent Vivier     int16_t minor;
59*6105683dSLaurent Vivier };
60*6105683dSLaurent Vivier 
61*6105683dSLaurent Vivier struct barrierMouseButton {
62*6105683dSLaurent Vivier     int8_t buttonid;
63*6105683dSLaurent Vivier };
64*6105683dSLaurent Vivier 
65*6105683dSLaurent Vivier struct barrierEnter {
66*6105683dSLaurent Vivier     int16_t x;
67*6105683dSLaurent Vivier     int16_t y;
68*6105683dSLaurent Vivier     int32_t seqn;
69*6105683dSLaurent Vivier     int16_t modifier;
70*6105683dSLaurent Vivier };
71*6105683dSLaurent Vivier 
72*6105683dSLaurent Vivier struct barrierMousePos {
73*6105683dSLaurent Vivier     int16_t x;
74*6105683dSLaurent Vivier     int16_t y;
75*6105683dSLaurent Vivier };
76*6105683dSLaurent Vivier 
77*6105683dSLaurent Vivier struct barrierKey {
78*6105683dSLaurent Vivier     int16_t keyid;
79*6105683dSLaurent Vivier     int16_t modifier;
80*6105683dSLaurent Vivier     int16_t button;
81*6105683dSLaurent Vivier };
82*6105683dSLaurent Vivier 
83*6105683dSLaurent Vivier struct barrierRepeat {
84*6105683dSLaurent Vivier     int16_t keyid;
85*6105683dSLaurent Vivier     int16_t modifier;
86*6105683dSLaurent Vivier     int16_t repeat;
87*6105683dSLaurent Vivier     int16_t button;
88*6105683dSLaurent Vivier };
89*6105683dSLaurent Vivier 
90*6105683dSLaurent Vivier #define BARRIER_MAX_OPTIONS 32
91*6105683dSLaurent Vivier struct barrierSet {
92*6105683dSLaurent Vivier     int nb;
93*6105683dSLaurent Vivier     struct {
94*6105683dSLaurent Vivier         int id;
95*6105683dSLaurent Vivier         char nul;
96*6105683dSLaurent Vivier         int value;
97*6105683dSLaurent Vivier     } option[BARRIER_MAX_OPTIONS];
98*6105683dSLaurent Vivier };
99*6105683dSLaurent Vivier 
100*6105683dSLaurent Vivier struct barrierMsg {
101*6105683dSLaurent Vivier     enum barrierCmd cmd;
102*6105683dSLaurent Vivier     union {
103*6105683dSLaurent Vivier         struct barrierVersion version;
104*6105683dSLaurent Vivier         struct barrierMouseButton mousebutton;
105*6105683dSLaurent Vivier         struct barrierMousePos mousepos;
106*6105683dSLaurent Vivier         struct barrierEnter enter;
107*6105683dSLaurent Vivier         struct barrierKey key;
108*6105683dSLaurent Vivier         struct barrierRepeat repeat;
109*6105683dSLaurent Vivier         struct barrierSet set;
110*6105683dSLaurent Vivier     };
111*6105683dSLaurent Vivier };
112*6105683dSLaurent Vivier #endif
113