xtest1.xml revision a5602400
1<?xml version="1.0" encoding="UTF-8" ?>
2<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
3                   "http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
4
5
6<article id="xtest1">
7
8<articleinfo>
9   <title>X11 INPUT SYNTHESIS EXTENSION PROPOSAL</title>
10   <subtitle>X Consortium Standard</subtitle>
11   <releaseinfo>Version 1.0</releaseinfo>
12   <authorgroup>
13      <author>
14         <firstname>Larry</firstname><surname>Woestman</surname>
15         <affiliation><jobtitle>Member of Technical Staff</jobtitle>
16	   <orgname>Hewlett Packard</orgname></affiliation>
17      </author>
18   </authorgroup>
19   <corpname>X Consortium Standard</corpname>
20   <copyright><year>1993</year><holder>X Consortium</holder></copyright>
21   <affiliation><orgname>X Consortium</orgname></affiliation>
22   <productnumber>X Version 11, Release 7</productnumber>
23
24<abstract>
25<para>
26This is a proposal for an extension to the X11 server and Xlib.
27</para>
28</abstract>
29
30</articleinfo>
31
32<sect1 id="introduction">
33<title>Introduction</title>
34<para>
35This is a proposal for an extension to the X11 server and Xlib.
36It provides two capabilities:
37</para>
38
39<itemizedlist>
40  <listitem>
41    <para>
42It allows a client to generate user input actions in the server without
43requiring a user to be present.
44    </para>
45  </listitem>
46  <listitem>
47    <para>
48It also allows a client to control the
49handling of user input actions by the server.
50    </para>
51  </listitem>
52</itemizedlist>
53
54<para>
55The capability
56to allow a client to generate user input actions in the server
57will be used by some of the X Testing Consortium Xlib tests.
58Both capabilities will be used by the X Testing Consortium client exerciser
59program.
60These capabilities may also be useful in other programs.
61</para>
62
63<para>
64This extension requires modification to device-dependent code in the
65server.  Therefore it is not a 'portable' extension as defined by the
66X11 Server Extensions document.  However, the majority of the code
67and functionality of this extension will be implementation-independent.
68</para>
69
70</sect1>
71
72<sect1 id="conventions_used_in_this_document">
73<title>Conventions Used In This Document</title>
74
75<para>
76The naming conventions used in the Xlib documentation are followed
77with these additions:
78</para>
79
80<itemizedlist>
81  <listitem>
82    <para>
83The names of all functions defined in this extension begin with 'XTest',
84with the first letter of each additional word capitalized.
85    </para>
86  </listitem>
87  <listitem>
88    <para>
89The names of the protocol request structures follow the Xlib convention
90of 'x&lt;name&gt;Req'.
91    </para>
92  </listitem>
93  <listitem>
94    <para>
95The names of the protocol request minor type codes follow the Xlib convention
96of 'X_&lt;name&gt;'.
97    </para>
98  </listitem>
99  <listitem>
100    <para>
101The names of all other constants defined in this extension begin with 'XTest',
102with the rest of the name in upper case letters.
103    </para>
104  </listitem>
105  <listitem>
106    <para>
107All constants and structures defined in this extension will have their
108values specified in the 'xtestext1.h' file (listed in section 5).
109    </para>
110  </listitem>
111</itemizedlist>
112
113</sect1>
114<sect1 id="definition_of_terms">
115<title>Definition Of Terms</title>
116
117<sect2 id="input_actions">
118<title>Input Actions</title>
119<para>
120Input actions are pointer movements, button presses and releases,
121and key presses and releases.  They can be generated by a user or by a client
122(using functions in this extension).
123</para>
124</sect2>
125
126<sect2 id="user_input_actions">
127<title>User Input Actions</title>
128<para>
129User input actions are input actions that are generated by the user
130moving a pointing device (typically a mouse), pressing and releasing buttons on
131the pointing device, and pressing and releasing keys on the keyboard.
132</para>
133</sect2>
134
135</sect1>
136
137<sect1 id="what_does_this_extension_do">
138<title>What Does This Extension Do?</title>
139<para>
140Without this extension, user input actions are processed by the server,
141and are converted into normal X events that are sent to the
142appropriate client or clients.
143</para>
144
145<para>
146This extension adds the following capabilities:
147</para>
148
149<itemizedlist>
150  <listitem>
151    <para>
152Input actions may be sent from a client to the server to be
153processed just as if the user had physically performed them.
154The input actions are provided to the server in the form of X protocol
155requests defined by this extension.
156The information provided to the server includes what action should be
157performed, and how long to delay before processing the action in the server.
158    </para>
159  </listitem>
160  <listitem>
161    <para>
162User input actions may be diverted to a client before being processed by the
163server.
164The effect on the server is as if the user had performed no input action.
165The user input actions are provided to the client in the form of X events
166defined by this extension.
167The information provided to the client includes what user input action
168occurred and the delay between this user input action and the previous user
169input action.
170The client may then do anything it wishes with this information.
171    </para>
172  </listitem>
173  <listitem>
174    <para>
175User input actions may be copied, with one copy going to the server in the
176normal way, and the other copy being sent to a client as described above.
177    </para>
178  </listitem>
179</itemizedlist>
180
181</sect1>
182<sect1 id="functions_in_this_extension">
183<title>Functions In This Extension</title>
184
185<sect2 id="high_level_functions">
186<title>High Level Functions</title>
187
188<para>
189These functions are built on top of the low level functions described later.
190</para>
191
192<sect3 id="xtestmovepointer">
193<title>XTestMovePointer</title>
194
195<funcsynopsis>
196<funcprototype>
197  <funcdef>int <function>XTestMovePointer</function></funcdef>
198    <paramdef>Display <parameter>*display</parameter></paramdef>
199    <paramdef>int <parameter>device_id</parameter></paramdef>
200    <paramdef>unsigned long <parameter>delay</parameter></paramdef>
201    <paramdef>int <parameter>x</parameter></paramdef>
202    <paramdef>int <parameter>y</parameter></paramdef>
203    <paramdef>unsigned int <parameter>count</parameter></paramdef>
204</funcprototype>
205</funcsynopsis>
206
207<variablelist>
208  <varlistentry>
209    <term>display</term>
210    <listitem>
211      <para>
212Specifies the connection to the X server.
213      </para>
214    </listitem>
215  </varlistentry>
216  <varlistentry>
217    <term>device_id</term>
218    <listitem>
219      <para>
220Specifies which pointer device was supposed to have caused the input action.
221This is a provision for future support of multiple (distinguishable) pointer
222devices, and should always be set to 0 for now.
223      </para>
224    </listitem>
225  </varlistentry>
226  <varlistentry>
227    <term>delay</term>
228    <listitem>
229      <para>
230Specifies the time (in milliseconds) to wait before each movement
231of the pointer.
232      </para>
233    </listitem>
234  </varlistentry>
235  <varlistentry>
236    <term>x, y</term>
237    <listitem>
238      <para>
239Specifies the x and y coordinates to move the pointer to relative to the
240root window for the specified display.
241      </para>
242    </listitem>
243  </varlistentry>
244  <varlistentry>
245    <term>count</term>
246    <listitem>
247      <para>
248Specifies the number of 'delay, x, y' triplets contained in the
249<emphasis>delay</emphasis>,
250<emphasis>x</emphasis> and
251<emphasis>y</emphasis> arrays.
252      </para>
253    </listitem>
254  </varlistentry>
255</variablelist>
256
257<para>
258The
259<function>XTestMovePointer</function>
260function creates input actions to be sent to the the server.
261The input actions will be accumulated in a request defined by this extension
262until the request is full or the XTestFlush function is called.
263They will then be sent to the server.
264When the input actions are sent to the server, the input actions will cause
265the server to think that the pointer was moved to the specified position(s),
266with the specified delay before each input action.
267</para>
268<para>
269The
270<function>XTestMovePointer</function>
271function will return -1 if there is an error, and 0 otherwise.
272</para>
273</sect3>
274
275<sect3 id="xtestpressbutton">
276<title>XTestPressButton</title>
277
278<funcsynopsis>
279<funcprototype>
280  <funcdef>int <function>XTestPressButton</function></funcdef>
281    <paramdef>Display <parameter>*display</parameter></paramdef>
282    <paramdef>int <parameter>device_id</parameter></paramdef>
283    <paramdef>unsigned long <parameter>delay</parameter></paramdef>
284    <paramdef>unsigned int <parameter>button_number</parameter></paramdef>
285    <paramdef>unsigned int <parameter>button_action</parameter></paramdef>
286</funcprototype>
287</funcsynopsis>
288
289
290<!-- .VL 15 -->
291<variablelist>
292  <varlistentry>
293    <term>display</term>
294    <listitem>
295      <para>
296Specifies the connection to the X server.
297      </para>
298    </listitem>
299  </varlistentry>
300  <varlistentry>
301    <term>device_id</term>
302    <listitem>
303      <para>
304Specifies which button device was supposed to have caused the input action.
305This is a provision for future support of multiple (distinguishable) button
306devices, and should always be set to 0 for now.
307      </para>
308    </listitem>
309  </varlistentry>
310  <varlistentry>
311    <term>delay</term>
312    <listitem>
313      <para>
314Specifies the time (in milliseconds) to wait before the input action.
315      </para>
316    </listitem>
317  </varlistentry>
318  <varlistentry>
319    <term>button_number</term>
320    <listitem>
321      <para>
322Specifies which button is being acted upon.
323      </para>
324    </listitem>
325  </varlistentry>
326  <varlistentry>
327    <term>button_action</term>
328    <listitem>
329      <para>
330Specifies the action to be performed (one of
331<emphasis>XTestPRESS</emphasis>,
332<emphasis>XTestRELEASE</emphasis>, or
333<emphasis>XTestSTROKE</emphasis>).
334      </para>
335    </listitem>
336  </varlistentry>
337</variablelist>
338
339<para>
340The
341<function>XTestPressButton</function>
342function creates input actions to be sent to the the server.
343The input actions will be accumulated in a request defined by this extension
344until the request is full or the XTestFlush function is called.
345They will then be sent to the server.
346When the input actions are sent to the server, the input actions will cause
347the server to think that the specified button was moved as specified.
348</para>
349<para>
350The
351<function>XTestPressButton</function>
352function will return -1 if there is an error, and 0 otherwise.
353</para>
354</sect3>
355
356<sect3 id="xtestpresskey">
357<title>XTestPressKey</title>
358
359<funcsynopsis>
360<funcprototype>
361  <funcdef>int <function>XTestPressKey</function></funcdef>
362    <paramdef>Display <parameter>*display</parameter></paramdef>
363    <paramdef>int <parameter>device_id</parameter></paramdef>
364    <paramdef>unsigned long <parameter>delay</parameter></paramdef>
365    <paramdef>unsigned int <parameter>keycode</parameter></paramdef>
366    <paramdef>unsigned int <parameter>key_action</parameter></paramdef>
367</funcprototype>
368</funcsynopsis>
369
370<!-- .VL 12 -->
371<variablelist>
372  <varlistentry>
373    <term>display</term>
374    <listitem>
375      <para>
376Specifies the connection to the X server.
377      </para>
378    </listitem>
379  </varlistentry>
380  <varlistentry>
381    <term>device_id</term>
382    <listitem>
383      <para>
384Specifies which keyboard device was supposed to have caused the input action.
385This is a provision for future support of multiple (distinguishable) keyboard
386devices, and should always be set to 0 for now.
387      </para>
388    </listitem>
389  </varlistentry>
390  <varlistentry>
391    <term>delay</term>
392    <listitem>
393      <para>
394Specifies the time (in milliseconds) to wait before the input action.
395      </para>
396    </listitem>
397  </varlistentry>
398  <varlistentry>
399    <term>keycode</term>
400    <listitem>
401      <para>
402Specifies which keycode is being acted upon.
403      </para>
404    </listitem>
405  </varlistentry>
406  <varlistentry>
407    <term>key_action</term>
408    <listitem>
409      <para>
410Specifies the action to be performed (one of
411<emphasis>XTestPRESS</emphasis>,
412<emphasis>XTestRELEASE</emphasis>, or
413<emphasis>XTestSTROKE</emphasis>).
414      </para>
415    </listitem>
416  </varlistentry>
417</variablelist>
418
419
420<para>
421The
422<function>XTestPressKey</function>
423function creates input actions to be sent to the the server.
424The input actions will be accumulated in a request defined by this extension
425until the request is full or the XTestFlush function is called.
426They will then be sent to the server.
427When the input actions are sent to the server, the input actions will cause
428the server to think that the specified key on the keyboard was moved as
429specified.
430</para>
431
432<para>
433The
434<function>XTestPressKey</function>
435function will return -1 if there is an error, and 0 otherwise.
436</para>
437
438</sect3>
439<sect3 id="xtestflush">
440<title>XTestFlush</title>
441
442<funcsynopsis>
443<funcprototype>
444  <funcdef>int <function>XTestFlush</function></funcdef>
445    <paramdef>Display <parameter>*display</parameter></paramdef>
446</funcprototype>
447</funcsynopsis>
448
449<!-- .VL 9 -->
450<variablelist>
451  <varlistentry>
452    <term>display</term>
453    <listitem>
454      <para>
455Specifies the connection to the X server.
456      </para>
457    </listitem>
458  </varlistentry>
459</variablelist>
460
461<para>
462The
463<function>XTestFlush</function>
464will send any remaining input actions to the server.
465</para>
466
467<para>
468The
469<function>XTestFlush</function>
470function will return -1 if there is an error, and 0 otherwise.
471</para>
472
473</sect3>
474</sect2>
475
476<!-- .H 2 Low~Level~Functions -->
477<sect2 id="low_level_functions">
478<title>Low Level Functions</title>
479
480<!-- .H 3 XTestGetInput -->
481<sect3 id="xtestgetinput">
482<title>XTestGetInput</title>
483
484<funcsynopsis>
485<funcprototype>
486  <funcdef>int <function>XTestGetInput</function></funcdef>
487    <paramdef>Display <parameter>*display</parameter></paramdef>
488    <paramdef>int <parameter>action_handling</parameter></paramdef>
489</funcprototype>
490</funcsynopsis>
491
492
493<variablelist>
494  <varlistentry>
495    <term>display</term>
496    <listitem>
497      <para>
498Specifies the connection to the X server.
499      </para>
500    </listitem>
501  </varlistentry>
502  <varlistentry>
503    <term>action_handling</term>
504    <listitem>
505      <para>
506Specifies to the server what to do with the user input actions.  (one of
5070, <emphasis>XTestPACKED_MOTION</emphasis> or
508<emphasis>XTestPACKED_ACTIONS</emphasis>; optionally 'or'ed
509with <emphasis>XTestEXCLUSIVE</emphasis>).
510      </para>
511    </listitem>
512  </varlistentry>
513</variablelist>
514
515
516<para>
517The
518<function>XTestGetInput</function>
519function tells the server to begin putting information about user input actions
520into events to be sent to the client that called this function.  These events
521can be read via the Xlib <function>XNextEvent</function>fR function.
522</para>
523
524<para>
525The server assigns an event type of
526<emphasis>XTestInputActionType</emphasis> to these events
527to distinguish them from other events.
528Since the actual value of the event type may vary depending on how many
529extensions are included with an X11 implementation,
530<emphasis>XTestInputActionType</emphasis> is a variable that will be
531contained in the Xlib
532part of this extension.  It may be referenced as follows:
533</para>
534
535<para>
536extern int XTestInputActionType;
537</para>
538
539<itemizedlist>
540  <listitem>
541    <para>
542An <emphasis>action_handling</emphasis> value of 0 causes the server
543to send one user input action in each
544<emphasis>XTestInputActionType</emphasis> event.
545This can sometimes cause performance problems.
546    </para>
547  </listitem>
548  <listitem>
549    <para>
550An <emphasis>action_handling</emphasis> value of
551<emphasis>XTestPACKED_ACTIONS</emphasis> causes the server
552to pack as many user input actions as possible into a
553<emphasis>XTestInputActionType</emphasis> event.
554This is needed if user input actions are happening rapidly (such as
555when the user moves the pointer) to keep performance at a reasonable level.
556    </para>
557  </listitem>
558  <listitem>
559    <para>
560An <emphasis>action_handling</emphasis> value of
561<emphasis>XTestPACKED_MOTION</emphasis> causes the server
562to pack only user input actions associated with moving the pointer.
563This allows the
564client to receive button and key motions as they happen without waiting for the
565event to fill up, while still keeping performance at a reasonable level.
566    </para>
567  </listitem>
568  <listitem>
569    <para>
570An <emphasis>action_handling</emphasis> value with
571<emphasis>XTestEXCLUSIVE</emphasis> 'or'ed in
572causes the server to send user input actions only to the client.
573The effect on the server is as if the user had performed no input actions.
574    </para>
575  </listitem>
576  <listitem>
577    <para>
578An <emphasis>action_handling</emphasis> value without
579<emphasis>XTestEXCLUSIVE</emphasis>
580causes the server to copy user input actions, sending one copy to the
581client, and handling the other copy normally (as it would if this extension
582were not installed).
583    </para>
584  </listitem>
585</itemizedlist>
586
587<para>
588There are four types of input actions that are passed from the server
589to the client.  They are:
590</para>
591
592<variablelist>
593  <varlistentry>
594    <term>key/button~state~change</term>
595    <listitem>
596      <para>
597This type of input action contains the keycode of the key or button that
598changed state;
599whether the key or button is up or down,
600and the time delay between this input action and the previous input action.
601      </para>
602    </listitem>
603  </varlistentry>
604  <varlistentry>
605    <term>pointer~motions</term>
606    <listitem>
607      <para>
608This type of input action contains information about the motion of the
609pointer when the pointer has only moved a short distance.
610If the pointer has moved a long distance,
611the pointer jump input action is used.
612      </para>
613    </listitem>
614  </varlistentry>
615  <varlistentry>
616    <term>pointer~jumps</term>
617    <listitem>
618      <para>
619This type of input action contains information about the motion of the
620pointer when the pointer has moved a long distance.
621      </para>
622    </listitem>
623  </varlistentry>
624  <varlistentry>
625    <term>delays</term>
626    <listitem>
627      <para>
628This type of input action is used when the delay between input actions is too
629large to be held in the other input actions.
630      </para>
631    </listitem>
632  </varlistentry>
633</variablelist>
634
635<para>
636The
637<function>XTestGetInput</function>
638function will return -1 if there is an error, and 0 otherwise.
639</para>
640<para>
641An error code of <emphasis>BadAccess</emphasis> means that another client
642has already requested that user input actions be sent to it.
643</para>
644
645</sect3>
646
647<!-- .H 3 XTestStopInput -->
648<sect3 id="xteststopinput">
649<title>XTestStopInput</title>
650
651<funcsynopsis>
652<funcprototype>
653  <funcdef>int <function>XTestStopInput</function></funcdef>
654    <paramdef>Display <parameter>*display</parameter></paramdef>
655</funcprototype>
656</funcsynopsis>
657
658
659
660<variablelist>
661  <varlistentry>
662    <term>display</term>
663    <listitem>
664      <para>
665Specifies the connection to the X server.
666      </para>
667    </listitem>
668  </varlistentry>
669</variablelist>
670
671<para>
672The
673<function>XTestStopInput</function>
674function tells the server to stop putting information about user input actions
675into events.
676The server will process user input actions normally (as it would
677if this extension were not in the server).
678</para>
679
680<para>
681The
682<function>XTestStopInput</function>
683function will return -1 if there is an error, and 0 otherwise.
684</para>
685
686<para>
687An error code of <emphasis>BadAccess</emphasis> means that a request
688was made to stop input when input has never been started.
689</para>
690
691</sect3>
692
693<!-- .H 3 XTestFakeInput -->
694<sect3 id="xtestfakeinput">
695<title>XTestFakeInput</title>
696
697<funcsynopsis>
698<funcprototype>
699  <funcdef>int <function>XTestFakeInput</function></funcdef>
700    <paramdef>Display <parameter>*display</parameter></paramdef>
701    <paramdef>char <parameter>*action_list_addr</parameter></paramdef>
702    <paramdef>int <parameter>action_list_size</parameter></paramdef>
703    <paramdef>int <parameter>ack_flag</parameter></paramdef>
704</funcprototype>
705</funcsynopsis>
706
707
708<!-- .VL 18 -->
709
710<variablelist>
711  <varlistentry>
712    <term>display</term>
713    <listitem>
714      <para>
715Specifies the connection to the X server.
716      </para>
717    </listitem>
718  </varlistentry>
719  <varlistentry>
720    <term>action_list_addr</term>
721    <listitem>
722      <para>
723Specifies the address of an list of input actions to be sent to the server.
724      </para>
725    </listitem>
726  </varlistentry>
727  <varlistentry>
728    <term>action_list_size</term>
729    <listitem>
730      <para>
731Specifies the size (in bytes) of the list of input actions.
732It may be no larger than <emphasis>XTestMAX_ACTION_LIST_SIZE</emphasis> bytes.
733      </para>
734    </listitem>
735  </varlistentry>
736  <varlistentry>
737    <term>ack_flag</term>
738    <listitem>
739      <para>
740Specifies whether the server needs to send an event to indicate that its
741input action buffer is empty (one of
742<emphasis>XTestFAKE_ACK_NOT_NEEDED</emphasis> or
743<emphasis>XTestFAKE_ACK_REQUEST</emphasis>).
744      </para>
745    </listitem>
746  </varlistentry>
747</variablelist>
748
749<para>
750The
751<function>XTestFakeInput</function>
752function tells the server to take the specified user input actions and process
753them as if the user had physically performed them.
754</para>
755
756<para>
757The server can only accept a limited number of input actions at one
758time.  This limit can be determined by the
759<function>XTestQueryInputSize</function> function
760in this extension.
761</para>
762
763<para>
764The client should set <emphasis>ack_flag</emphasis> to
765<emphasis>XTestFAKE_ACK_NOT_NEEDED</emphasis>
766on calls to <emphasis>XTestFakeInput</emphasis> that do not reach this limit.
767</para>
768
769<para>
770The client should set <emphasis>ack_flag</emphasis> to
771<emphasis>XTestFAKE_ACK_REQUEST</emphasis>
772on the call to <emphasis>XTestFakeInput</emphasis> that reaches this limit.
773</para>
774
775<para>
776When the server sees an <emphasis>ack_flag</emphasis> value of
777<emphasis>XTestFAKE_ACK_REQUEST</emphasis>
778it finishes processing its input action buffer, then sends an event with
779type <emphasis>XTestFakeAckType</emphasis> to the client.
780When the client reads this event, it knows that it is safe to resume
781sending input actions to the server.
782</para>
783
784<para>
785Since the actual value of the event type may vary depending on how many
786extensions are included with an X11 implementation,
787<emphasis>XTestFakeAckType</emphasis> is a variable that is contained
788in the Xlib part of this extension.  It may be referenced as follows:
789</para>
790
791<para>
792extern int XTestFakeAckType;
793</para>
794
795<para>
796There are four types of input actions that are passed from the client
797to the server.  They are:
798</para>
799
800<variablelist>
801  <varlistentry>
802    <term>key/button~state~change</term>
803    <listitem>
804      <para>
805This type of input action contains the keycode of the key or button that
806is to change state;
807whether the key or button is to be up or down,
808and the time to delay before changing the state of the key or button.
809      </para>
810    </listitem>
811  </varlistentry>
812  <varlistentry>
813    <term>pointer~motions</term>
814    <listitem>
815      <para>
816This type of input action contains information about the motion of the
817pointer when the pointer is to be moved a short distance,
818and the time to delay before moving the pointer.
819If the pointer is to be moved a long distance,
820the pointer jump input action must be used.
821      </para>
822    </listitem>
823  </varlistentry>
824  <varlistentry>
825    <term>pointer~jumps</term>
826    <listitem>
827      <para>
828This type of input action contains information about the motion of the
829pointer when the pointer is to be moved a long distance,
830and the time to delay before moving the pointer.
831      </para>
832    </listitem>
833  </varlistentry>
834  <varlistentry>
835    <term>delays</term>
836    <listitem>
837      <para>
838This type of input action is used when the delay between input actions is too
839large to be held in the other input actions.
840      </para>
841    </listitem>
842  </varlistentry>
843</variablelist>
844
845
846<para>
847The
848<function>XTestFakeInput</function>
849function will return -1 if there is an error, and 0 otherwise.
850</para>
851
852<para>
853An error code of \fIBadAccess\fR means that another client has already
854sent user input actions to the server, and the server has not finished
855processing the user input actions.
856</para>
857
858</sect3>
859
860<!-- .H 3 XTestQueryInputSize -->
861<sect3 id="xtestqueryinputsize">
862<title>XTestQueryInputSize</title>
863
864<funcsynopsis>
865<funcprototype>
866  <funcdef>int <function>XTestQueryInputSize</function></funcdef>
867    <paramdef>Display <parameter>*display</parameter></paramdef>
868    <paramdef>unsigned long <parameter>size_return</parameter></paramdef>
869</funcprototype>
870</funcsynopsis>
871
872
873<variablelist>
874  <varlistentry>
875    <term>display</term>
876    <listitem>
877      <para>
878Specifies the connection to the X server.
879      </para>
880    </listitem>
881  </varlistentry>
882  <varlistentry>
883    <term>size_return</term>
884    <listitem>
885      <para>
886Returns the number of input actions that the server's input action buffer can
887hold.
888      </para>
889    </listitem>
890  </varlistentry>
891</variablelist>
892
893<para>
894The
895<function>XTestQueryInputSize</function>
896function asks the server to return the number of input actions that it can hold
897in its input action buffer in the unsigned long pointed to by \fIsize_return\fR.
898</para>
899<para>
900The
901<function>XTestQueryInputSize</function>
902function will return -1 if there is an error, and 0 otherwise.
903</para>
904</sect3>
905
906<!-- .H 3 XTestReset -->
907<sect3 id="xtestreset">
908<title>XTestReset</title>
909
910<funcsynopsis>
911<funcprototype>
912  <funcdef>int <function>XTestReset</function></funcdef>
913    <paramdef>Display <parameter>*display</parameter></paramdef>
914</funcprototype>
915</funcsynopsis>
916
917
918<variablelist>
919  <varlistentry>
920    <term>display</term>
921    <listitem>
922      <para>
923Specifies the connection to the X server.
924      </para>
925    </listitem>
926  </varlistentry>
927</variablelist>
928
929<para>
930The
931<function>XTestReset</function>
932function tells the server to set everything having to do with this extension
933back to its initial state.  After this call the server will act as if this
934extension were not installed until one of the extension functions is called by
935a client.  This function is not normally needed, but is included in case a
936client wishes to clean up the server state, such as after a serious error.
937</para>
938
939<para>
940The
941<function>XTestReset</function>
942function will return -1 if there is an error, and 0 otherwise.
943</para>
944
945</sect3>
946</sect2>
947</sect1>
948
949<!-- .H 1 'xtestext1.h'~File~Listing -->
950<!-- .so xtestext1.h -->
951<!-- .TC 1 1 4 -->
952</article>
953