1 /************************************************************
2 
3 Copyright 1996 by Thomas E. Dickey <dickey@clark.net>
4 
5                         All Rights Reserved
6 
7 Permission to use, copy, modify, and distribute this software and its
8 documentation for any purpose and without fee is hereby granted,
9 provided that the above copyright notice appear in all copies and that
10 both that copyright notice and this permission notice appear in
11 supporting documentation, and that the name of the above listed
12 copyright holder(s) not be used in advertising or publicity pertaining
13 to distribution of the software without specific, written prior
14 permission.
15 
16 THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM ALL WARRANTIES WITH REGARD
17 TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
18 AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE
19 LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
20 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23 
24 ********************************************************/
25 
26 /********************************************************************
27  * Interface of 'exevents.c'
28  */
29 
30 #ifndef EXEVENTS_H
31 #define EXEVENTS_H
32 
33 #include <X11/extensions/XIproto.h>
34 #include "inputstr.h"
35 
36 /***************************************************************
37  *              Interface available to drivers                 *
38  ***************************************************************/
39 
40 /**
41  * Scroll flags for ::SetScrollValuator.
42  */
43 enum ScrollFlags {
44     SCROLL_FLAG_NONE = 0,
45     /**
46      * Do not emulate legacy button events for valuator events on this axis.
47      */
48     SCROLL_FLAG_DONT_EMULATE = (1 << 1),
49     /**
50      * This axis is the preferred axis for valuator emulation for this axis'
51      * scroll type.
52      */
53     SCROLL_FLAG_PREFERRED = (1 << 2)
54 };
55 
56 extern _X_EXPORT int InitProximityClassDeviceStruct(DeviceIntPtr /* dev */ );
57 
58 extern _X_EXPORT Bool InitValuatorAxisStruct(DeviceIntPtr /* dev */ ,
59                                              int /* axnum */ ,
60                                              Atom /* label */ ,
61                                              int /* minval */ ,
62                                              int /* maxval */ ,
63                                              int /* resolution */ ,
64                                              int /* min_res */ ,
65                                              int /* max_res */ ,
66                                              int /* mode */ );
67 
68 extern _X_EXPORT Bool SetScrollValuator(DeviceIntPtr /* dev */ ,
69                                         int /* axnum */ ,
70                                         enum ScrollType /* type */ ,
71                                         double /* increment */ ,
72                                         int /* flags */ );
73 
74 /* Input device properties */
75 extern _X_EXPORT void XIDeleteAllDeviceProperties(DeviceIntPtr  /* device */
76     );
77 
78 extern _X_EXPORT int XIDeleteDeviceProperty(DeviceIntPtr /* device */ ,
79                                             Atom /* property */ ,
80                                             Bool        /* fromClient */
81     );
82 
83 extern _X_EXPORT int XIChangeDeviceProperty(DeviceIntPtr /* dev */ ,
84                                             Atom /* property */ ,
85                                             Atom /* type */ ,
86                                             int /* format */ ,
87                                             int /* mode */ ,
88                                             unsigned long /* len */ ,
89                                             const void * /* value */ ,
90                                             Bool        /* sendevent */
91     );
92 
93 extern _X_EXPORT int XIGetDeviceProperty(DeviceIntPtr /* dev */ ,
94                                          Atom /* property */ ,
95                                          XIPropertyValuePtr *   /* value */
96     );
97 
98 extern _X_EXPORT int XISetDevicePropertyDeletable(DeviceIntPtr /* dev */ ,
99                                                   Atom /* property */ ,
100                                                   Bool  /* deletable */
101     );
102 
103 extern _X_EXPORT long XIRegisterPropertyHandler(DeviceIntPtr dev,
104                                                 int (*SetProperty) (DeviceIntPtr
105                                                                     dev,
106                                                                     Atom
107                                                                     property,
108                                                                     XIPropertyValuePtr
109                                                                     prop,
110                                                                     BOOL
111                                                                     checkonly),
112                                                 int (*GetProperty) (DeviceIntPtr
113                                                                     dev,
114                                                                     Atom
115                                                                     property),
116                                                 int (*DeleteProperty)
117                                                 (DeviceIntPtr dev,
118                                                  Atom property)
119     );
120 
121 extern _X_EXPORT void XIUnregisterPropertyHandler(DeviceIntPtr dev, long id);
122 
123 extern _X_EXPORT Atom XIGetKnownProperty(const char *name);
124 
125 extern _X_EXPORT DeviceIntPtr XIGetDevice(xEvent *ev);
126 
127 extern _X_EXPORT int XIPropToInt(XIPropertyValuePtr val,
128                                  int *nelem_return, int **buf_return);
129 
130 extern _X_EXPORT int XIPropToFloat(XIPropertyValuePtr val,
131                                    int *nelem_return, float **buf_return);
132 
133 /****************************************************************************
134  *                      End of driver interface                             *
135  ****************************************************************************/
136 
137 /**
138  * Attached to the devPrivates of each client. Specifies the version number as
139  * supported by the client.
140  */
141 typedef struct _XIClientRec {
142     int major_version;
143     int minor_version;
144 } XIClientRec, *XIClientPtr;
145 
146 typedef struct _GrabParameters {
147     int grabtype;               /* CORE, etc. */
148     unsigned int ownerEvents;
149     unsigned int this_device_mode;
150     unsigned int other_devices_mode;
151     Window grabWindow;
152     Window confineTo;
153     Cursor cursor;
154     unsigned int modifiers;
155 } GrabParameters;
156 
157 extern int
158  UpdateDeviceState(DeviceIntPtr /* device */ ,
159                    DeviceEvent * /*  xE    */ );
160 
161 extern void
162  ProcessOtherEvent(InternalEvent * /* ev */ ,
163                    DeviceIntPtr /* other */ );
164 
165 extern int
166  CheckGrabValues(ClientPtr /* client */ ,
167                  GrabParameters * /* param */ );
168 
169 extern int
170  GrabButton(ClientPtr /* client */ ,
171             DeviceIntPtr /* dev */ ,
172             DeviceIntPtr /* modifier_device */ ,
173             int /* button */ ,
174             GrabParameters * /* param */ ,
175             enum InputLevel /* grabtype */ ,
176             GrabMask * /* eventMask */ );
177 
178 extern int
179  GrabKey(ClientPtr /* client */ ,
180          DeviceIntPtr /* dev */ ,
181          DeviceIntPtr /* modifier_device */ ,
182          int /* key */ ,
183          GrabParameters * /* param */ ,
184          enum InputLevel /* grabtype */ ,
185          GrabMask * /* eventMask */ );
186 
187 extern int
188  GrabWindow(ClientPtr /* client */ ,
189             DeviceIntPtr /* dev */ ,
190             int /* type */ ,
191             GrabParameters * /* param */ ,
192             GrabMask * /* eventMask */ );
193 
194 extern int
195  GrabTouch(ClientPtr /* client */ ,
196            DeviceIntPtr /* dev */ ,
197            DeviceIntPtr /* mod_dev */ ,
198            GrabParameters * /* param */ ,
199            GrabMask * /* eventMask */ );
200 
201 extern int
202  SelectForWindow(DeviceIntPtr /* dev */ ,
203                  WindowPtr /* pWin */ ,
204                  ClientPtr /* client */ ,
205                  Mask /* mask */ ,
206                  Mask /* exclusivemasks */ );
207 
208 extern int
209  AddExtensionClient(WindowPtr /* pWin */ ,
210                     ClientPtr /* client */ ,
211                     Mask /* mask */ ,
212                     int /* mskidx */ );
213 
214 extern void
215  RecalculateDeviceDeliverableEvents(WindowPtr /* pWin */ );
216 
217 extern int
218  InputClientGone(WindowPtr /* pWin */ ,
219                  XID /* id */ );
220 
221 extern void
222  WindowGone(WindowPtr /* win */ );
223 
224 extern int
225  SendEvent(ClientPtr /* client */ ,
226            DeviceIntPtr /* d */ ,
227            Window /* dest */ ,
228            Bool /* propagate */ ,
229            xEvent * /* ev */ ,
230            Mask /* mask */ ,
231            int /* count */ );
232 
233 extern int
234  SetButtonMapping(ClientPtr /* client */ ,
235                   DeviceIntPtr /* dev */ ,
236                   int /* nElts */ ,
237                   BYTE * /* map */ );
238 
239 extern int
240  ChangeKeyMapping(ClientPtr /* client */ ,
241                   DeviceIntPtr /* dev */ ,
242                   unsigned /* len */ ,
243                   int /* type */ ,
244                   KeyCode /* firstKeyCode */ ,
245                   CARD8 /* keyCodes */ ,
246                   CARD8 /* keySymsPerKeyCode */ ,
247                   KeySym * /* map */ );
248 
249 extern void
250  DeleteWindowFromAnyExtEvents(WindowPtr /* pWin */ ,
251                               Bool /* freeResources */ );
252 
253 extern int
254  MaybeSendDeviceMotionNotifyHint(deviceKeyButtonPointer * /* pEvents */ ,
255                                  Mask /* mask */ );
256 
257 extern void
258  CheckDeviceGrabAndHintWindow(WindowPtr /* pWin */ ,
259                               int /* type */ ,
260                               deviceKeyButtonPointer * /* xE */ ,
261                               GrabPtr /* grab */ ,
262                               ClientPtr /* client */ ,
263                               Mask /* deliveryMask */ );
264 
265 extern void
266  MaybeStopDeviceHint(DeviceIntPtr /* dev */ ,
267                      ClientPtr /* client */ );
268 
269 extern int
270  DeviceEventSuppressForWindow(WindowPtr /* pWin */ ,
271                               ClientPtr /* client */ ,
272                               Mask /* mask */ ,
273                               int /* maskndx */ );
274 
275 extern void
276  SendEventToAllWindows(DeviceIntPtr /* dev */ ,
277                        Mask /* mask */ ,
278                        xEvent * /* ev */ ,
279                        int /* count */ );
280 
281 extern void
282  TouchRejected(DeviceIntPtr /* sourcedev */ ,
283                TouchPointInfoPtr /* ti */ ,
284                XID /* resource */ ,
285                TouchOwnershipEvent * /* ev */ );
286 
287 extern _X_HIDDEN void XI2EventSwap(xGenericEvent * /* from */ ,
288                                    xGenericEvent * /* to */ );
289 
290 /* For an event such as MappingNotify which affects client interpretation
291  * of input events sent by device dev, should we notify the client, or
292  * would it merely be irrelevant and confusing? */
293 extern int
294  XIShouldNotify(ClientPtr client, DeviceIntPtr dev);
295 
296 extern void
297  XISendDeviceChangedEvent(DeviceIntPtr device, DeviceChangedEvent *dce);
298 
299 extern int
300 
301 XISetEventMask(DeviceIntPtr dev, WindowPtr win, ClientPtr client,
302                unsigned int len, unsigned char *mask);
303 
304 extern int
305  XICheckInvalidMaskBits(ClientPtr client, unsigned char *mask, int len);
306 
307 #endif                          /* EXEVENTS_H */
308