16 |
|
|
17 |
The protocol is a line based protocol following this simple syntax: |
The protocol is a line based protocol following this simple syntax: |
18 |
|
|
19 |
OPERATION[,ARG1[,ARG2,[...]]] |
OPERATION,SERIAL[,ARG1[,ARG2,[...]]] |
20 |
|
|
21 |
|
Each operation will have an increasing serial number. The initial value is |
22 |
|
implementation defined. |
23 |
|
|
24 |
The goal is to have a generic protocol that can be used for other display |
The goal is to have a generic protocol that can be used for other display |
25 |
systems (e.g. VNC) as well. |
systems (e.g. VNC) as well. |
30 |
exist unless it is visible. Note that a minimized window is an exception to |
exist unless it is visible. Note that a minimized window is an exception to |
31 |
this rule. |
this rule. |
32 |
|
|
33 |
|
The protocol has no way of indicating failure, meaning that all commands are |
34 |
|
expected to succeed. If a command fails, the receiving end must send a |
35 |
|
corresponding command back, indicating the actual state. |
36 |
|
|
37 |
Data types |
Data types |
38 |
========== |
========== |
39 |
Window ID are written in hex, like 0x4321. |
Window ID are written in hex, like 0x4321. |
55 |
Allocate structures for a new window. |
Allocate structures for a new window. |
56 |
|
|
57 |
Syntax: |
Syntax: |
58 |
CREATE,<ID>,<PARENT>,<FLAGS> |
CREATE,<SERIAL>,<ID>,<PARENT>,<FLAGS> |
59 |
|
|
60 |
Indicates that a window has appeared on the server. If PARENT is non-zero then |
Indicates that a window has appeared on the server. If PARENT is non-zero then |
61 |
the new window is a child of that window (it's transient for it). The special |
the new window is a child of that window (it's transient for it). The special |
72 |
Remove a window. |
Remove a window. |
73 |
|
|
74 |
Syntax: |
Syntax: |
75 |
DESTROY,<ID>,<FLAGS> |
DESTROY,<SERIAL>,<ID>,<FLAGS> |
76 |
|
|
77 |
Remove the window and deallocate all associated structures. |
Remove the window and deallocate all associated structures. |
78 |
|
|
82 |
Move and/or resize a window. |
Move and/or resize a window. |
83 |
|
|
84 |
Syntax: |
Syntax: |
85 |
POSITION,<ID>,<X>,<Y>,<WIDTH>,<HEIGHT>,<FLAGS> |
POSITION,<SERIAL>,<ID>,<X>,<Y>,<WIDTH>,<HEIGHT>,<FLAGS> |
86 |
|
|
87 |
If the window isn't visible yet (because a |
If the window isn't visible yet (because a |
88 |
STATE hasn't been set or because it's minimized), you must store the position |
STATE hasn't been set or because it's minimized), you must store the position |
95 |
Sets a window title. |
Sets a window title. |
96 |
|
|
97 |
Syntax: |
Syntax: |
98 |
TITLE,<ID>,<TITLE>,<FLAGS> |
TITLE,<SERIAL>,<ID>,<TITLE>,<FLAGS> |
99 |
|
|
100 |
The text is guaranteed to be stripped of control characters (< 0x20). |
The text is guaranteed to be stripped of control characters (< 0x20). |
101 |
|
|
110 |
The window moved in z order. |
The window moved in z order. |
111 |
|
|
112 |
Syntax: |
Syntax: |
113 |
ZCHANGE,<ID>,<BEHIND>,<FLAGS> |
ZCHANGE,<SERIAL>,<ID>,<BEHIND>,<FLAGS> |
114 |
|
|
115 |
The window with the id ID is behind the window with the id BEHIND. If |
The window with the id ID is behind the window with the id BEHIND. If |
116 |
BEHIND is 0, then this window should be brought to the front. |
BEHIND is 0, then this window should be brought to the front. |
121 |
Changes the window's state and/or title. |
Changes the window's state and/or title. |
122 |
|
|
123 |
Syntax: |
Syntax: |
124 |
STATE,<ID>,<STATE>,<FLAGS> |
STATE,<SERIAL>,<ID>,<STATE>,<FLAGS> |
125 |
|
|
126 |
State can have one of three values: |
State can have one of three values: |
127 |
0 : "Normal" window. |
0 : "Normal" window. |
137 |
Debug output from the server component. |
Debug output from the server component. |
138 |
|
|
139 |
Syntax: |
Syntax: |
140 |
DEBUG,<STRING> |
DEBUG,<SERIAL>,<STRING> |
141 |
|
|
142 |
Used for debugging. |
Used for debugging. |
143 |
|
|
147 |
Indicates that a synchronisation has begun. |
Indicates that a synchronisation has begun. |
148 |
|
|
149 |
Syntax: |
Syntax: |
150 |
SYNCBEGIN,<FLAGS> |
SYNCBEGIN,<SERIAL>,<FLAGS> |
151 |
|
|
152 |
Sent when the server starts a synchronisation. The client should flush all |
Sent when the server starts a synchronisation. The client should flush all |
153 |
information at this point. |
information at this point. |
158 |
Indicates that a synchronisation is complete. |
Indicates that a synchronisation is complete. |
159 |
|
|
160 |
Syntac: |
Syntac: |
161 |
SYNCEND,<FLAGS> |
SYNCEND,<SERIAL>,<FLAGS> |
162 |
|
|
163 |
Sent when the last message that is part of the synchronisation has been sent. |
Sent when the last message that is part of the synchronisation has been sent. |
164 |
This may be followed by duplicate messages and/or messages referring invalid |
This may be followed by duplicate messages and/or messages referring invalid |
170 |
Initial message sent by server. |
Initial message sent by server. |
171 |
|
|
172 |
Syntax: |
Syntax: |
173 |
HELLO,<FLAGS> |
HELLO,<SERIAL>,<FLAGS> |
174 |
|
|
175 |
The server starts each connection by sending this message. Normally the client |
The server starts each connection by sending this message. Normally the client |
176 |
will react by sending a SYNC back to the server. The low bit in FLAGS is set if |
will react by sending a SYNC back to the server. The low bit in FLAGS is set if |
177 |
this is a new connection to an existing session. |
this is a new connection to an existing session. |
178 |
|
|
179 |
|
ACK |
180 |
|
--- |
181 |
|
|
182 |
|
Acknowledgement of a request to manipulate a window. |
183 |
|
|
184 |
|
Syntax: |
185 |
|
ACK,<SERIAL>,<ACKSERIAL> |
186 |
|
|
187 |
|
Whenever one of the commands POSITION, ZCHANGE, STATE or FOCUS is executed on |
188 |
|
the server, the server will send an ACK back to the client. The purpose of this |
189 |
|
is to inform the client of when the operation was actually performed, allowing |
190 |
|
high latencies in the channel. |
191 |
|
|
192 |
Client to Server Operations |
Client to Server Operations |
193 |
=========================== |
=========================== |
194 |
|
|
198 |
Request a synchronisation of window information. |
Request a synchronisation of window information. |
199 |
|
|
200 |
Syntax: |
Syntax: |
201 |
SYNC,<FLAGS> |
SYNC,<SERIAL>,<FLAGS> |
202 |
|
|
203 |
For each window, the server will send CREATE, POSITION and STATE, in that |
For each window, the server will send CREATE, POSITION and STATE, in that |
204 |
order, just as if the window was created. Note that a TITLE may also, |
order, just as if the window was created. Note that a TITLE may also, |
230 |
Sets which window has input focus. |
Sets which window has input focus. |
231 |
|
|
232 |
Syntax: |
Syntax: |
233 |
FOCUS,<ID>,<FLAGS> |
FOCUS,<SERIAL>,<ID>,<FLAGS> |
234 |
|
|
235 |
Changes which window that will recieve the keyboard events. Note that this |
Changes which window that will recieve the keyboard events. Note that this |
236 |
might cause the window to change z order. |
might cause the window to change z order. |