input.h 9.86 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
/* $Xorg: input.h,v 1.4 2001/02/09 02:05:15 xorgcvs Exp $ */
/************************************************************

Copyright 1987, 1998  The Open Group

Permission to use, copy, modify, distribute, and sell this software and its
documentation for any purpose is hereby granted without fee, provided that
the above copyright notice appear in all copies and that both that
copyright notice and this permission notice appear in supporting
documentation.

The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Except as contained in this notice, the name of The Open Group shall not be
used in advertising or otherwise to promote the sale, use or other dealings
in this Software without prior written authorization from The Open Group.


Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.

                        All Rights Reserved

Permission to use, copy, modify, and distribute this software and its 
documentation for any purpose and without fee is hereby granted, 
provided that the above copyright notice appear in all copies and that
both that copyright notice and this permission notice appear in 
supporting documentation, and that the name of Digital not be
used in advertising or publicity pertaining to distribution of the
software without specific, written prior permission.  

DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.

********************************************************/
48
/* $XFree86: xc/programs/Xserver/include/input.h,v 3.8 2003/04/27 21:31:04 herrb Exp $ */
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
49

50 51 52
#ifndef INPUT_H
#define INPUT_H

53
#include "misc.h"
54
#include "screenint.h"
55 56
#include <X11/Xmd.h>
#include <X11/Xproto.h>
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
#include "window.h"     /* for WindowPtr */

#define DEVICE_INIT	0
#define DEVICE_ON	1
#define DEVICE_OFF	2
#define DEVICE_CLOSE	3

#define MAP_LENGTH	256
#define DOWN_LENGTH	32	/* 256/8 => number of bytes to hold 256 bits */
#define NullGrab ((GrabPtr)NULL)
#define PointerRootWin ((WindowPtr)PointerRoot)
#define NoneWin ((WindowPtr)None)
#define NullDevice ((DevicePtr)NULL)

#ifndef FollowKeyboard
#define FollowKeyboard 		3
#endif
#ifndef FollowKeyboardWin
#define FollowKeyboardWin  ((WindowPtr) FollowKeyboard)
#endif
#ifndef RevertToFollowKeyboard
#define RevertToFollowKeyboard	3
#endif

typedef unsigned long Leds;
typedef struct _OtherClients *OtherClientsPtr;
typedef struct _InputClients *InputClientsPtr;
typedef struct _DeviceIntRec *DeviceIntPtr;

typedef int (*DeviceProc)(
    DeviceIntPtr /*device*/,
88
    int /*what*/);
89 90 91 92

typedef void (*ProcessInputProc)(
    xEventPtr /*events*/,
    DeviceIntPtr /*device*/,
93
    int /*count*/);
94

95 96 97 98 99 100 101 102 103 104 105
typedef Bool (*DeviceHandleProc)(
    DeviceIntPtr /*device*/,
    void* /*data*/
    );

typedef void (*DeviceUnwrapProc)(
    DeviceIntPtr /*device*/,
    DeviceHandleProc /*proc*/,
    void* /*data*/
    );

106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
typedef struct _DeviceRec {
    pointer	devicePrivate;
    ProcessInputProc processInputProc;	/* current */
    ProcessInputProc realInputProc;	/* deliver */
    ProcessInputProc enqueueInputProc;	/* enqueue */
    Bool	on;			/* used by DDX to keep state */
} DeviceRec, *DevicePtr;

typedef struct {
    int			click, bell, bell_pitch, bell_duration;
    Bool		autoRepeat;
    unsigned char	autoRepeats[32];
    Leds		leds;
    unsigned char	id;
} KeybdCtrl;

typedef struct {
    KeySym  *map;
    KeyCode minKeyCode,
	    maxKeyCode;
    int     mapWidth;
} KeySymsRec, *KeySymsPtr;

typedef struct {
    int		num, den, threshold;
    unsigned char id;
} PtrCtrl;

typedef struct {
    int         resolution, min_value, max_value;
    int         integer_displayed;
    unsigned char id;
} IntegerCtrl;

typedef struct {
    int         max_symbols, num_symbols_supported;
    int         num_symbols_displayed;
    KeySym      *symbols_supported;
    KeySym      *symbols_displayed;
    unsigned char id;
} StringCtrl;

typedef struct {
    int         percent, pitch, duration;
    unsigned char id;
} BellCtrl;

typedef struct {
    Leds        led_values;
    Mask        led_mask;
    unsigned char id;
} LedCtrl;

159 160 161 162
extern int AllocateDevicePrivateIndex(void);
extern Bool AllocateDevicePrivate(DeviceIntPtr device, int index);
extern void ResetDevicePrivateIndex(void);

163 164 165
extern KeybdCtrl	defaultKeyboardControl;
extern PtrCtrl		defaultPointerControl;

166 167 168 169 170 171
typedef struct _InputOption {
    char                *key;
    char                *value;
    struct _InputOption *next;
} InputOption;

172
extern DeviceIntPtr AddInputDevice(
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
173
    DeviceProc /*deviceProc*/,
174
    Bool /*autoStart*/);
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
175

176
extern Bool EnableDevice(
177
    DeviceIntPtr /*device*/);
178 179

extern Bool DisableDevice(
180
    DeviceIntPtr /*device*/);
181

182
extern int InitAndStartDevices(void);
183

184
extern void CloseDownDevices(void);
185

Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
186
extern void RemoveDevice(
187
    DeviceIntPtr /*dev*/);
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
188

189
extern int NumMotionEvents(void);
190 191

extern void RegisterPointerDevice(
192
    DeviceIntPtr /*device*/);
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
193

194
extern void RegisterKeyboardDevice(
195
    DeviceIntPtr /*device*/);
Kaleb Keithley Keithley's avatar
Kaleb Keithley Keithley committed
196

197
extern DevicePtr LookupKeyboardDevice(void);
198

199
extern DevicePtr LookupPointerDevice(void);
200 201

extern DevicePtr LookupDevice(
202
    int /* id */);
203 204 205

extern void QueryMinMaxKeyCodes(
    KeyCode* /*minCode*/,
206
    KeyCode* /*maxCode*/);
207 208 209

extern Bool SetKeySymsMap(
    KeySymsPtr /*dst*/,
210
    KeySymsPtr /*src*/);
211 212 213 214

extern Bool InitKeyClassDeviceStruct(
    DeviceIntPtr /*device*/,
    KeySymsPtr /*pKeySyms*/,
215
    CARD8 /*pModifiers*/[]);
216 217 218 219

extern Bool InitButtonClassDeviceStruct(
    DeviceIntPtr /*device*/,
    int /*numButtons*/,
220
    CARD8* /*map*/);
221 222 223 224 225 226

typedef int (*ValuatorMotionProcPtr)(
		DeviceIntPtr /*pdevice*/,
		xTimecoord * /*coords*/,
		unsigned long /*start*/,
		unsigned long /*stop*/,
227
		ScreenPtr /*pScreen*/);
228 229 230 231 232 233

extern Bool InitValuatorClassDeviceStruct(
    DeviceIntPtr /*device*/,
    int /*numAxes*/,
    ValuatorMotionProcPtr /* motionProc */,
    int /*numMotionEvents*/,
234
    int /*mode*/);
235 236

extern Bool InitFocusClassDeviceStruct(
237
    DeviceIntPtr /*device*/);
238 239 240 241 242

typedef void (*BellProcPtr)(
    int /*percent*/,
    DeviceIntPtr /*device*/,
    pointer /*ctrl*/,
243
    int);
244 245 246

typedef void (*KbdCtrlProcPtr)(
    DeviceIntPtr /*device*/,
247
    KeybdCtrl * /*ctrl*/);
248 249 250 251

extern Bool InitKbdFeedbackClassDeviceStruct(
    DeviceIntPtr /*device*/,
    BellProcPtr /*bellProc*/,
252
    KbdCtrlProcPtr /*controlProc*/);
253 254 255

typedef void (*PtrCtrlProcPtr)(
    DeviceIntPtr /*device*/,
256
    PtrCtrl * /*ctrl*/);
257 258 259

extern Bool InitPtrFeedbackClassDeviceStruct(
    DeviceIntPtr /*device*/,
260
    PtrCtrlProcPtr /*controlProc*/);
261 262 263

typedef void (*StringCtrlProcPtr)(
    DeviceIntPtr /*device*/,
264
    StringCtrl * /*ctrl*/);
265 266 267 268 269 270

extern Bool InitStringFeedbackClassDeviceStruct(
    DeviceIntPtr /*device*/,
    StringCtrlProcPtr /*controlProc*/,
    int /*max_symbols*/,
    int /*num_symbols_supported*/,
271
    KeySym* /*symbols*/);
272 273 274

typedef void (*BellCtrlProcPtr)(
    DeviceIntPtr /*device*/,
275
    BellCtrl * /*ctrl*/);
276 277 278 279

extern Bool InitBellFeedbackClassDeviceStruct(
    DeviceIntPtr /*device*/,
    BellProcPtr /*bellProc*/,
280
    BellCtrlProcPtr /*controlProc*/);
281 282 283

typedef void (*LedCtrlProcPtr)(
    DeviceIntPtr /*device*/,
284
    LedCtrl * /*ctrl*/);
285 286 287

extern Bool InitLedFeedbackClassDeviceStruct(
    DeviceIntPtr /*device*/,
288
    LedCtrlProcPtr /*controlProc*/);
289 290 291

typedef void (*IntegerCtrlProcPtr)(
    DeviceIntPtr /*device*/,
292
    IntegerCtrl * /*ctrl*/);
293 294 295 296


extern Bool InitIntegerFeedbackClassDeviceStruct(
    DeviceIntPtr /*device*/,
297
    IntegerCtrlProcPtr /*controlProc*/);
298 299 300 301 302 303 304

extern Bool InitPointerDeviceStruct(
    DevicePtr /*device*/,
    CARD8* /*map*/,
    int /*numButtons*/,
    ValuatorMotionProcPtr /*motionProc*/,
    PtrCtrlProcPtr /*controlProc*/,
305
    int /*numMotionEvents*/);
306 307 308 309 310 311

extern Bool InitKeyboardDeviceStruct(
    DevicePtr /*device*/,
    KeySymsPtr /*pKeySyms*/,
    CARD8 /*pModifiers*/[],
    BellProcPtr /*bellProc*/,
312
    KbdCtrlProcPtr /*controlProc*/);
313 314 315 316 317

extern void SendMappingNotify(
    unsigned int /*request*/,
    unsigned int /*firstKeyCode*/,
    unsigned int /*count*/,
318
    ClientPtr	/* client */);
319 320 321 322 323 324

extern Bool BadDeviceMap(
    BYTE* /*buff*/,
    int /*length*/,
    unsigned /*low*/,
    unsigned /*high*/,
325
    XID* /*errval*/);
326 327 328 329 330 331

extern Bool AllModifierKeysAreUp(
    DeviceIntPtr /*device*/,
    CARD8* /*map1*/,
    int /*per1*/,
    CARD8* /*map2*/,
332
    int /*per2*/);
333 334 335 336

extern void NoteLedState(
    DeviceIntPtr /*keybd*/,
    int /*led*/,
337
    Bool /*on*/);
338 339 340

extern void MaybeStopHint(
    DeviceIntPtr /*device*/,
341
    ClientPtr /*client*/);
342 343 344 345

extern void ProcessPointerEvent(
    xEventPtr /*xE*/,
    DeviceIntPtr /*mouse*/,
346
    int /*count*/);
347 348 349 350

extern void ProcessKeyboardEvent(
    xEventPtr /*xE*/,
    DeviceIntPtr /*keybd*/,
351
    int /*count*/);
352 353 354 355 356

#ifdef XKB
extern void CoreProcessPointerEvent(
    xEventPtr /*xE*/,
    DeviceIntPtr /*mouse*/,
357
    int /*count*/);
358 359 360 361

extern void CoreProcessKeyboardEvent(
    xEventPtr /*xE*/,
    DeviceIntPtr /*keybd*/,
362
    int /*count*/);
363 364 365 366
#endif

extern Bool LegalModifier(
    unsigned int /*key*/, 
367
    DevicePtr /*pDev*/);
368

369
extern void ProcessInputEvents(void);
370 371 372

extern void InitInput(
    int  /*argc*/,
373
    char ** /*argv*/);
374

375 376 377 378 379 380 381
/* Implemented by the DDX. */
extern int NewInputDeviceRequest(
    InputOption *options);

extern DeviceIntPtr LookupDeviceIntRec(
    CARD8 deviceid);

382
#endif /* INPUT_H */