xserver

xserver with xephyr scale patch
git clone https://git.neptards.moe/u3shit/xserver.git
Log | Files | Refs | README | LICENSE

input.h (36864B)


      1 /************************************************************
      2 
      3 Copyright 1987, 1998  The Open Group
      4 
      5 Permission to use, copy, modify, distribute, and sell this software and its
      6 documentation for any purpose is hereby granted without fee, provided that
      7 the above copyright notice appear in all copies and that both that
      8 copyright notice and this permission notice appear in supporting
      9 documentation.
     10 
     11 The above copyright notice and this permission notice shall be included in
     12 all copies or substantial portions of the Software.
     13 
     14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
     15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
     16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
     17 OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
     18 AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
     19 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     20 
     21 Except as contained in this notice, the name of The Open Group shall not be
     22 used in advertising or otherwise to promote the sale, use or other dealings
     23 in this Software without prior written authorization from The Open Group.
     24 
     25 Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
     26 
     27                         All Rights Reserved
     28 
     29 Permission to use, copy, modify, and distribute this software and its
     30 documentation for any purpose and without fee is hereby granted,
     31 provided that the above copyright notice appear in all copies and that
     32 both that copyright notice and this permission notice appear in
     33 supporting documentation, and that the name of Digital not be
     34 used in advertising or publicity pertaining to distribution of the
     35 software without specific, written prior permission.
     36 
     37 DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
     38 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
     39 DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
     40 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
     41 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
     42 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
     43 SOFTWARE.
     44 
     45 ********************************************************/
     46 
     47 #ifndef INPUT_H
     48 #define INPUT_H
     49 
     50 #include "misc.h"
     51 #include "screenint.h"
     52 #include <X11/Xmd.h>
     53 #include <X11/Xproto.h>
     54 #include <stdint.h>
     55 #include "window.h"             /* for WindowPtr */
     56 #include "xkbrules.h"
     57 #include "events.h"
     58 #include "list.h"
     59 #include "os.h"
     60 #include <X11/extensions/XI2.h>
     61 
     62 #define DEFAULT_KEYBOARD_CLICK 	0
     63 #define DEFAULT_BELL		50
     64 #define DEFAULT_BELL_PITCH	400
     65 #define DEFAULT_BELL_DURATION	100
     66 #define DEFAULT_AUTOREPEAT	TRUE
     67 #define DEFAULT_AUTOREPEATS	{\
     68         0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\
     69         0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,\
     70         0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
     71         0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}
     72 
     73 #define DEFAULT_LEDS		0x0     /* all off */
     74 #define DEFAULT_LEDS_MASK	0xffffffff      /* 32 */
     75 #define DEFAULT_INT_RESOLUTION		1000
     76 #define DEFAULT_INT_MIN_VALUE		0
     77 #define DEFAULT_INT_MAX_VALUE		100
     78 #define DEFAULT_INT_DISPLAYED		0
     79 
     80 #define DEFAULT_PTR_NUMERATOR	2
     81 #define DEFAULT_PTR_DENOMINATOR	1
     82 #define DEFAULT_PTR_THRESHOLD	4
     83 
     84 #define DEVICE_INIT	0
     85 #define DEVICE_ON	1
     86 #define DEVICE_OFF	2
     87 #define DEVICE_CLOSE	3
     88 #define DEVICE_ABORT	4
     89 
     90 #define POINTER_RELATIVE	(1 << 1)
     91 #define POINTER_ABSOLUTE	(1 << 2)
     92 #define POINTER_ACCELERATE	(1 << 3)
     93 #define POINTER_SCREEN		(1 << 4)        /* Data in screen coordinates */
     94 #define POINTER_NORAW		(1 << 5)        /* Don't generate RawEvents */
     95 #define POINTER_EMULATED	(1 << 6)        /* Event was emulated from another event */
     96 #define POINTER_DESKTOP		(1 << 7)        /* Data in desktop coordinates */
     97 #define POINTER_RAWONLY         (1 << 8)        /* Only generate RawEvents */
     98 
     99 /* GetTouchEvent flags */
    100 #define TOUCH_ACCEPT            (1 << 0)
    101 #define TOUCH_REJECT            (1 << 1)
    102 #define TOUCH_PENDING_END       (1 << 2)
    103 #define TOUCH_CLIENT_ID         (1 << 3)        /* touch ID is the client-visible id */
    104 #define TOUCH_REPLAYING         (1 << 4)        /* event is being replayed */
    105 #define TOUCH_POINTER_EMULATED  (1 << 5)        /* touch event may be pointer emulated */
    106 #define TOUCH_END               (1 << 6)        /* really end this touch now */
    107 
    108 /* GetGestureEvent flags */
    109 #define GESTURE_CANCELLED       (1 << 0)
    110 
    111 /*int constants for pointer acceleration schemes*/
    112 #define PtrAccelNoOp            0
    113 #define PtrAccelPredictable     1
    114 #define PtrAccelLightweight     2
    115 #define PtrAccelDefault         PtrAccelPredictable
    116 
    117 #define MAX_VALUATORS 36
    118 /* Maximum number of valuators, divided by six, rounded up, to get number
    119  * of events. */
    120 #define MAX_VALUATOR_EVENTS 6
    121 #define MAX_BUTTONS 256         /* completely arbitrarily chosen */
    122 
    123 #define NO_AXIS_LIMITS -1
    124 
    125 #define MAP_LENGTH	MAX_BUTTONS
    126 #define DOWN_LENGTH	(MAX_BUTTONS/8)      /* 256/8 => number of bytes to hold 256 bits */
    127 #define NullGrab ((GrabPtr)NULL)
    128 #define PointerRootWin ((WindowPtr)PointerRoot)
    129 #define NoneWin ((WindowPtr)None)
    130 #define NullDevice ((DevicePtr)NULL)
    131 
    132 #ifndef FollowKeyboard
    133 #define FollowKeyboard 		3
    134 #endif
    135 #ifndef FollowKeyboardWin
    136 #define FollowKeyboardWin  ((WindowPtr) FollowKeyboard)
    137 #endif
    138 #ifndef RevertToFollowKeyboard
    139 #define RevertToFollowKeyboard	3
    140 #endif
    141 
    142 enum InputLevel {
    143     CORE = 1,
    144     XI = 2,
    145     XI2 = 3,
    146 };
    147 
    148 typedef unsigned long Leds;
    149 typedef struct _OtherClients *OtherClientsPtr;
    150 typedef struct _InputClients *InputClientsPtr;
    151 typedef struct _DeviceIntRec *DeviceIntPtr;
    152 typedef struct _ValuatorClassRec *ValuatorClassPtr;
    153 typedef struct _ClassesRec *ClassesPtr;
    154 typedef struct _SpriteRec *SpritePtr;
    155 typedef struct _TouchClassRec *TouchClassPtr;
    156 typedef struct _GestureClassRec *GestureClassPtr;
    157 typedef struct _TouchPointInfo *TouchPointInfoPtr;
    158 typedef struct _GestureInfo *GestureInfoPtr;
    159 typedef struct _DDXTouchPointInfo *DDXTouchPointInfoPtr;
    160 typedef union _GrabMask GrabMask;
    161 
    162 typedef struct _ValuatorMask ValuatorMask;
    163 
    164 /* The DIX stores incoming input events in this list */
    165 extern InternalEvent *InputEventList;
    166 
    167 typedef int (*DeviceProc) (DeviceIntPtr /*device */ ,
    168                            int /*what */ );
    169 
    170 typedef void (*ProcessInputProc) (InternalEvent * /*event */ ,
    171                                   DeviceIntPtr /*device */ );
    172 
    173 typedef Bool (*DeviceHandleProc) (DeviceIntPtr /*device */ ,
    174                                   void *        /*data */
    175     );
    176 
    177 typedef void (*DeviceUnwrapProc) (DeviceIntPtr /*device */ ,
    178                                   DeviceHandleProc /*proc */ ,
    179                                   void *        /*data */
    180     );
    181 
    182 /* pointer acceleration handling */
    183 typedef void (*PointerAccelSchemeProc) (DeviceIntPtr /*device */ ,
    184                                         ValuatorMask * /*valuators */ ,
    185                                         CARD32 /*evtime */ );
    186 
    187 typedef void (*DeviceCallbackProc) (DeviceIntPtr /*pDev */ );
    188 
    189 struct _ValuatorAccelerationRec;
    190 typedef Bool (*PointerAccelSchemeInitProc) (DeviceIntPtr /*dev */ ,
    191                                             struct _ValuatorAccelerationRec *
    192                                             /*protoScheme */ );
    193 
    194 typedef struct _DeviceRec {
    195     void *devicePrivate;
    196     ProcessInputProc processInputProc;  /* current */
    197     ProcessInputProc realInputProc;     /* deliver */
    198     ProcessInputProc enqueueInputProc;  /* enqueue */
    199     Bool on;                    /* used by DDX to keep state */
    200 } DeviceRec, *DevicePtr;
    201 
    202 typedef struct {
    203     int click, bell, bell_pitch, bell_duration;
    204     Bool autoRepeat;
    205     unsigned char autoRepeats[32];
    206     Leds leds;
    207     unsigned char id;
    208 } KeybdCtrl;
    209 
    210 typedef struct {
    211     KeySym *map;
    212     KeyCode minKeyCode, maxKeyCode;
    213     int mapWidth;
    214 } KeySymsRec, *KeySymsPtr;
    215 
    216 typedef struct {
    217     int num, den, threshold;
    218     unsigned char id;
    219 } PtrCtrl;
    220 
    221 typedef struct {
    222     int resolution, min_value, max_value;
    223     int integer_displayed;
    224     unsigned char id;
    225 } IntegerCtrl;
    226 
    227 typedef struct {
    228     int max_symbols, num_symbols_supported;
    229     int num_symbols_displayed;
    230     KeySym *symbols_supported;
    231     KeySym *symbols_displayed;
    232     unsigned char id;
    233 } StringCtrl;
    234 
    235 typedef struct {
    236     int percent, pitch, duration;
    237     unsigned char id;
    238 } BellCtrl;
    239 
    240 typedef struct {
    241     Leds led_values;
    242     Mask led_mask;
    243     unsigned char id;
    244 } LedCtrl;
    245 
    246 extern _X_EXPORT KeybdCtrl defaultKeyboardControl;
    247 extern _X_EXPORT PtrCtrl defaultPointerControl;
    248 
    249 typedef struct _InputOption InputOption;
    250 typedef struct _XI2Mask XI2Mask;
    251 
    252 typedef struct _InputAttributes {
    253     char *product;
    254     char *vendor;
    255     char *device;
    256     char *pnp_id;
    257     char *usb_id;
    258     char **tags;                /* null-terminated */
    259     uint32_t flags;
    260 } InputAttributes;
    261 
    262 #define ATTR_KEYBOARD (1<<0)
    263 #define ATTR_POINTER (1<<1)
    264 #define ATTR_JOYSTICK (1<<2)
    265 #define ATTR_TABLET (1<<3)
    266 #define ATTR_TOUCHPAD (1<<4)
    267 #define ATTR_TOUCHSCREEN (1<<5)
    268 #define ATTR_KEY (1<<6)
    269 #define ATTR_TABLET_PAD (1<<7)
    270 
    271 /* Key/Button has been run through all input processing and events sent to clients. */
    272 #define KEY_PROCESSED 1
    273 #define BUTTON_PROCESSED 1
    274 /* Key/Button has not been fully processed, no events have been sent. */
    275 #define KEY_POSTED 2
    276 #define BUTTON_POSTED 2
    277 
    278 extern _X_EXPORT void set_key_down(DeviceIntPtr pDev, int key_code, int type);
    279 extern _X_EXPORT void set_key_up(DeviceIntPtr pDev, int key_code, int type);
    280 extern _X_EXPORT int key_is_down(DeviceIntPtr pDev, int key_code, int type);
    281 extern _X_EXPORT void set_button_down(DeviceIntPtr pDev, int button, int type);
    282 extern _X_EXPORT void set_button_up(DeviceIntPtr pDev, int button, int type);
    283 extern _X_EXPORT int button_is_down(DeviceIntPtr pDev, int button, int type);
    284 
    285 extern void InitCoreDevices(void);
    286 extern void InitXTestDevices(void);
    287 
    288 extern _X_EXPORT DeviceIntPtr AddInputDevice(ClientPtr /*client */ ,
    289                                              DeviceProc /*deviceProc */ ,
    290                                              Bool /*autoStart */ );
    291 
    292 extern _X_EXPORT Bool EnableDevice(DeviceIntPtr /*device */ ,
    293                                    BOOL /* sendevent */ );
    294 
    295 extern _X_EXPORT Bool ActivateDevice(DeviceIntPtr /*device */ ,
    296                                      BOOL /* sendevent */ );
    297 
    298 extern _X_EXPORT Bool DisableDevice(DeviceIntPtr /*device */ ,
    299                                     BOOL /* sendevent */ );
    300 extern void DisableAllDevices(void);
    301 extern int InitAndStartDevices(void);
    302 
    303 extern void CloseDownDevices(void);
    304 extern void AbortDevices(void);
    305 
    306 extern void UndisplayDevices(void);
    307 
    308 extern _X_EXPORT int RemoveDevice(DeviceIntPtr /*dev */ ,
    309                                   BOOL /* sendevent */ );
    310 
    311 extern _X_EXPORT int NumMotionEvents(void);
    312 
    313 extern _X_EXPORT int dixLookupDevice(DeviceIntPtr * /* dev */ ,
    314                                      int /* id */ ,
    315                                      ClientPtr /* client */ ,
    316                                      Mask /* access_mode */ );
    317 
    318 extern _X_EXPORT void QueryMinMaxKeyCodes(KeyCode * /*minCode */ ,
    319                                           KeyCode * /*maxCode */ );
    320 
    321 extern _X_EXPORT Bool InitButtonClassDeviceStruct(DeviceIntPtr /*device */ ,
    322                                                   int /*numButtons */ ,
    323                                                   Atom * /* labels */ ,
    324                                                   CARD8 * /*map */ );
    325 
    326 extern _X_INTERNAL ValuatorClassPtr AllocValuatorClass(ValuatorClassPtr src,
    327                                                        int numAxes);
    328 
    329 extern _X_EXPORT Bool InitValuatorClassDeviceStruct(DeviceIntPtr /*device */ ,
    330                                                     int /*numAxes */ ,
    331                                                     Atom * /* labels */ ,
    332                                                     int /*numMotionEvents */ ,
    333                                                     int /*mode */ );
    334 
    335 extern _X_EXPORT Bool InitPointerAccelerationScheme(DeviceIntPtr /*dev */ ,
    336                                                     int /*scheme */ );
    337 
    338 extern _X_EXPORT Bool InitFocusClassDeviceStruct(DeviceIntPtr /*device */ );
    339 
    340 extern _X_EXPORT Bool InitTouchClassDeviceStruct(DeviceIntPtr /*device */ ,
    341                                                  unsigned int /*max_touches */ ,
    342                                                  unsigned int /*mode */ ,
    343                                                  unsigned int /*numAxes */ );
    344 
    345 extern _X_EXPORT Bool InitGestureClassDeviceStruct(DeviceIntPtr device,
    346                                                    unsigned int max_touches);
    347 
    348 typedef void (*BellProcPtr) (int percent,
    349                              DeviceIntPtr device,
    350                              void *ctrl,
    351                              int feedbackClass);
    352 
    353 typedef void (*KbdCtrlProcPtr) (DeviceIntPtr /*device */ ,
    354                                 KeybdCtrl * /*ctrl */ );
    355 
    356 typedef void (*PtrCtrlProcPtr) (DeviceIntPtr /*device */ ,
    357                                 PtrCtrl * /*ctrl */ );
    358 
    359 extern _X_EXPORT Bool InitPtrFeedbackClassDeviceStruct(DeviceIntPtr /*device */
    360                                                        ,
    361                                                        PtrCtrlProcPtr
    362                                                        /*controlProc */ );
    363 
    364 typedef void (*StringCtrlProcPtr) (DeviceIntPtr /*device */ ,
    365                                    StringCtrl * /*ctrl */ );
    366 
    367 extern _X_EXPORT Bool InitStringFeedbackClassDeviceStruct(DeviceIntPtr
    368                                                           /*device */ ,
    369                                                           StringCtrlProcPtr
    370                                                           /*controlProc */ ,
    371                                                           int /*max_symbols */ ,
    372                                                           int
    373                                                           /*num_symbols_supported */
    374                                                           ,
    375                                                           KeySym * /*symbols */
    376                                                           );
    377 
    378 typedef void (*BellCtrlProcPtr) (DeviceIntPtr /*device */ ,
    379                                  BellCtrl * /*ctrl */ );
    380 
    381 extern _X_EXPORT Bool InitBellFeedbackClassDeviceStruct(DeviceIntPtr /*device */
    382                                                         ,
    383                                                         BellProcPtr
    384                                                         /*bellProc */ ,
    385                                                         BellCtrlProcPtr
    386                                                         /*controlProc */ );
    387 
    388 typedef void (*LedCtrlProcPtr) (DeviceIntPtr /*device */ ,
    389                                 LedCtrl * /*ctrl */ );
    390 
    391 extern _X_EXPORT Bool InitLedFeedbackClassDeviceStruct(DeviceIntPtr /*device */
    392                                                        ,
    393                                                        LedCtrlProcPtr
    394                                                        /*controlProc */ );
    395 
    396 typedef void (*IntegerCtrlProcPtr) (DeviceIntPtr /*device */ ,
    397                                     IntegerCtrl * /*ctrl */ );
    398 
    399 extern _X_EXPORT Bool InitIntegerFeedbackClassDeviceStruct(DeviceIntPtr
    400                                                            /*device */ ,
    401                                                            IntegerCtrlProcPtr
    402                                                            /*controlProc */ );
    403 
    404 extern _X_EXPORT Bool InitPointerDeviceStruct(DevicePtr /*device */ ,
    405                                               CARD8 * /*map */ ,
    406                                               int /*numButtons */ ,
    407                                               Atom * /* btn_labels */ ,
    408                                               PtrCtrlProcPtr /*controlProc */ ,
    409                                               int /*numMotionEvents */ ,
    410                                               int /*numAxes */ ,
    411                                               Atom * /* axes_labels */ );
    412 
    413 extern _X_EXPORT Bool InitKeyboardDeviceStruct(DeviceIntPtr /*device */ ,
    414                                                XkbRMLVOSet * /*rmlvo */ ,
    415                                                BellProcPtr /*bellProc */ ,
    416                                                KbdCtrlProcPtr /*controlProc */
    417                                                );
    418 
    419 extern _X_EXPORT Bool InitKeyboardDeviceStructFromString(DeviceIntPtr dev,
    420 							 const char *keymap,
    421 							 int keymap_length,
    422 							 BellProcPtr bell_func,
    423 							 KbdCtrlProcPtr ctrl_func);
    424 
    425 extern int ApplyPointerMapping(DeviceIntPtr /* pDev */ ,
    426                                CARD8 * /* map */ ,
    427                                int /* len */ ,
    428                                ClientPtr /* client */ );
    429 
    430 extern Bool BadDeviceMap(BYTE * /*buff */ ,
    431                          int /*length */ ,
    432                          unsigned /*low */ ,
    433                          unsigned /*high */ ,
    434                          XID * /*errval */ );
    435 
    436 extern void NoteLedState(DeviceIntPtr /*keybd */ ,
    437                          int /*led */ ,
    438                          Bool /*on */ );
    439 
    440 extern void MaybeStopHint(DeviceIntPtr /*device */ ,
    441                           ClientPtr /*client */ );
    442 
    443 extern void ProcessPointerEvent(InternalEvent * /* ev */ ,
    444                                 DeviceIntPtr /*mouse */ );
    445 
    446 extern void ProcessKeyboardEvent(InternalEvent * /*ev */ ,
    447                                  DeviceIntPtr /*keybd */ );
    448 
    449 extern _X_EXPORT void ProcessInputEvents(void);
    450 
    451 extern _X_EXPORT void InitInput(int /*argc */ ,
    452                                 char ** /*argv */ );
    453 extern _X_EXPORT void CloseInput(void);
    454 
    455 extern _X_EXPORT int GetMaximumEventsNum(void);
    456 
    457 extern _X_EXPORT InternalEvent *InitEventList(int num_events);
    458 extern _X_EXPORT void FreeEventList(InternalEvent *list, int num_events);
    459 
    460 extern void CreateClassesChangedEvent(InternalEvent *event,
    461                                       DeviceIntPtr master,
    462                                       DeviceIntPtr slave, int flags);
    463 
    464 extern InternalEvent *UpdateFromMaster(InternalEvent *events,
    465                                        DeviceIntPtr pDev,
    466                                        int type, int *num_events);
    467 
    468 extern _X_EXPORT int GetPointerEvents(InternalEvent *events,
    469                                       DeviceIntPtr pDev,
    470                                       int type,
    471                                       int buttons,
    472                                       int flags, const ValuatorMask *mask);
    473 
    474 extern _X_EXPORT void QueuePointerEvents(DeviceIntPtr pDev,
    475                                          int type,
    476                                          int buttons,
    477                                          int flags, const ValuatorMask *mask);
    478 
    479 extern _X_EXPORT int GetKeyboardEvents(InternalEvent *events,
    480                                        DeviceIntPtr pDev,
    481                                        int type,
    482                                        int key_code);
    483 
    484 extern _X_EXPORT void QueueKeyboardEvents(DeviceIntPtr pDev,
    485                                           int type,
    486                                           int key_code);
    487 
    488 extern int GetTouchEvents(InternalEvent *events,
    489                           DeviceIntPtr pDev,
    490                           uint32_t ddx_touchid,
    491                           uint16_t type,
    492                           uint32_t flags, const ValuatorMask *mask);
    493 
    494 void QueueTouchEvents(DeviceIntPtr device,
    495                       int type,
    496                       uint32_t ddx_touchid,
    497                       int flags, const ValuatorMask *mask);
    498 
    499 void InitGestureEvent(InternalEvent *ievent, DeviceIntPtr dev, CARD32 ms,
    500                       int type, uint16_t num_touches, uint32_t flags,
    501                       double delta_x, double delta_y,
    502                       double delta_unaccel_x, double delta_unaccel_y,
    503                       double scale, double delta_angle);
    504 
    505 int GetGestureEvents(InternalEvent *events, DeviceIntPtr dev,
    506                      uint16_t type, uint16_t num_touches, uint32_t flags,
    507                      double delta_x, double delta_y,
    508                      double delta_unaccel_x,
    509                      double delta_unaccel_y,
    510                      double scale, double delta_angle);
    511 
    512 
    513 void QueueGesturePinchEvents(DeviceIntPtr dev, uint16_t type,
    514                              uint16_t num_touches, uint32_t flags,
    515                              double delta_x, double delta_y,
    516                              double delta_unaccel_x,
    517                              double delta_unaccel_y,
    518                              double scale, double delta_angle);
    519 
    520 void QueueGestureSwipeEvents(DeviceIntPtr dev, uint16_t type,
    521                              uint16_t num_touches, uint32_t flags,
    522                              double delta_x, double delta_y,
    523                              double delta_unaccel_x,
    524                              double delta_unaccel_y);
    525 
    526 extern int GetTouchOwnershipEvents(InternalEvent *events,
    527                                    DeviceIntPtr pDev,
    528                                    TouchPointInfoPtr ti,
    529                                    uint8_t mode, XID resource, uint32_t flags);
    530 
    531 extern void GetDixTouchEnd(InternalEvent *ievent,
    532                            DeviceIntPtr dev,
    533                            TouchPointInfoPtr ti,
    534                            uint32_t flags);
    535 
    536 extern _X_EXPORT int GetProximityEvents(InternalEvent *events,
    537                                         DeviceIntPtr pDev,
    538                                         int type, const ValuatorMask *mask);
    539 
    540 extern _X_EXPORT void QueueProximityEvents(DeviceIntPtr pDev,
    541                                            int type, const ValuatorMask *mask);
    542 
    543 #ifdef PANORAMIX
    544 _X_EXPORT
    545 #endif
    546 extern void PostSyntheticMotion(DeviceIntPtr pDev,
    547                                 int x, int y, int screen, unsigned long time);
    548 
    549 extern _X_EXPORT int GetMotionHistorySize(void);
    550 
    551 extern _X_EXPORT void AllocateMotionHistory(DeviceIntPtr pDev);
    552 
    553 extern _X_EXPORT int GetMotionHistory(DeviceIntPtr pDev,
    554                                       xTimecoord ** buff,
    555                                       unsigned long start,
    556                                       unsigned long stop,
    557                                       ScreenPtr pScreen, BOOL core);
    558 
    559 extern void ReleaseButtonsAndKeys(DeviceIntPtr dev);
    560 
    561 extern int AttachDevice(ClientPtr client,
    562                         DeviceIntPtr slave, DeviceIntPtr master);
    563 
    564 extern _X_EXPORT DeviceIntPtr GetPairedDevice(DeviceIntPtr kbd);
    565 extern _X_EXPORT DeviceIntPtr GetMaster(DeviceIntPtr dev, int type);
    566 
    567 extern _X_EXPORT int AllocDevicePair(ClientPtr client,
    568                                      const char *name,
    569                                      DeviceIntPtr *ptr,
    570                                      DeviceIntPtr *keybd,
    571                                      DeviceProc ptr_proc,
    572                                      DeviceProc keybd_proc, Bool master);
    573 extern void DeepCopyDeviceClasses(DeviceIntPtr from,
    574                                   DeviceIntPtr to, DeviceChangedEvent *dce);
    575 
    576 /* Helper functions. */
    577 extern _X_EXPORT int generate_modkeymap(ClientPtr client, DeviceIntPtr dev,
    578                                         KeyCode **modkeymap,
    579                                         int *max_keys_per_mod);
    580 extern int change_modmap(ClientPtr client, DeviceIntPtr dev, KeyCode *map,
    581                          int max_keys_per_mod);
    582 extern int AllocXTestDevice(ClientPtr client, const char *name,
    583                             DeviceIntPtr *ptr, DeviceIntPtr *keybd,
    584                             DeviceIntPtr master_ptr, DeviceIntPtr master_keybd);
    585 extern BOOL IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master);
    586 extern DeviceIntPtr GetXTestDevice(DeviceIntPtr master);
    587 extern void SendDevicePresenceEvent(int deviceid, int type);
    588 extern void DeliverDeviceClassesChangedEvent(int sourceid, Time time);
    589 extern _X_EXPORT InputAttributes *DuplicateInputAttributes(InputAttributes *
    590                                                            attrs);
    591 extern _X_EXPORT void FreeInputAttributes(InputAttributes * attrs);
    592 
    593 enum TouchListenerState {
    594     TOUCH_LISTENER_AWAITING_BEGIN = 0, /**< Waiting for a TouchBegin event */
    595     TOUCH_LISTENER_AWAITING_OWNER,     /**< Waiting for a TouchOwnership event */
    596     TOUCH_LISTENER_EARLY_ACCEPT,       /**< Waiting for ownership, has already
    597                                             accepted */
    598     TOUCH_LISTENER_IS_OWNER,           /**< Is the current owner, hasn't
    599                                             accepted */
    600     TOUCH_LISTENER_HAS_ACCEPTED,       /**< Is the current owner, has accepted */
    601     TOUCH_LISTENER_HAS_END,            /**< Has already received the end event */
    602 };
    603 
    604 enum TouchListenerType {
    605     TOUCH_LISTENER_GRAB,
    606     TOUCH_LISTENER_POINTER_GRAB,
    607     TOUCH_LISTENER_REGULAR,
    608     TOUCH_LISTENER_POINTER_REGULAR,
    609 };
    610 
    611 enum GestureListenerType {
    612     GESTURE_LISTENER_GRAB,
    613     GESTURE_LISTENER_NONGESTURE_GRAB,
    614     GESTURE_LISTENER_REGULAR
    615 };
    616 
    617 extern void TouchInitDDXTouchPoint(DeviceIntPtr dev,
    618                                    DDXTouchPointInfoPtr ddxtouch);
    619 extern DDXTouchPointInfoPtr TouchBeginDDXTouch(DeviceIntPtr dev,
    620                                                uint32_t ddx_id);
    621 extern void TouchEndDDXTouch(DeviceIntPtr dev, DDXTouchPointInfoPtr ti);
    622 extern DDXTouchPointInfoPtr TouchFindByDDXID(DeviceIntPtr dev,
    623                                              uint32_t ddx_id, Bool create);
    624 extern Bool TouchInitTouchPoint(TouchClassPtr touch, ValuatorClassPtr v,
    625                                 int index);
    626 extern void TouchFreeTouchPoint(DeviceIntPtr dev, int index);
    627 extern TouchPointInfoPtr TouchBeginTouch(DeviceIntPtr dev, int sourceid,
    628                                          uint32_t touchid,
    629                                          Bool emulate_pointer);
    630 extern TouchPointInfoPtr TouchFindByClientID(DeviceIntPtr dev,
    631                                              uint32_t client_id);
    632 extern void TouchEndTouch(DeviceIntPtr dev, TouchPointInfoPtr ti);
    633 extern Bool TouchEventHistoryAllocate(TouchPointInfoPtr ti);
    634 extern void TouchEventHistoryFree(TouchPointInfoPtr ti);
    635 extern void TouchEventHistoryPush(TouchPointInfoPtr ti, const DeviceEvent *ev);
    636 extern void TouchEventHistoryReplay(TouchPointInfoPtr ti, DeviceIntPtr dev,
    637                                     XID resource);
    638 extern Bool TouchResourceIsOwner(TouchPointInfoPtr ti, XID resource);
    639 extern void TouchAddListener(TouchPointInfoPtr ti, XID resource, int resource_type,
    640                              enum InputLevel level, enum TouchListenerType type,
    641                              enum TouchListenerState state, WindowPtr window, GrabPtr grab);
    642 extern Bool TouchRemoveListener(TouchPointInfoPtr ti, XID resource);
    643 extern void TouchSetupListeners(DeviceIntPtr dev, TouchPointInfoPtr ti,
    644                                 InternalEvent *ev);
    645 extern Bool TouchBuildSprite(DeviceIntPtr sourcedev, TouchPointInfoPtr ti,
    646                              InternalEvent *ev);
    647 extern Bool TouchBuildDependentSpriteTrace(DeviceIntPtr dev, SpritePtr sprite);
    648 extern int TouchConvertToPointerEvent(const InternalEvent *ev,
    649                                       InternalEvent *motion,
    650                                       InternalEvent *button);
    651 extern int TouchGetPointerEventType(const InternalEvent *ev);
    652 extern void TouchRemovePointerGrab(DeviceIntPtr dev);
    653 extern void TouchListenerGone(XID resource);
    654 extern int TouchListenerAcceptReject(DeviceIntPtr dev, TouchPointInfoPtr ti,
    655                                      int listener, int mode);
    656 extern int TouchAcceptReject(ClientPtr client, DeviceIntPtr dev, int mode,
    657                              uint32_t touchid, Window grab_window, XID *error);
    658 extern void TouchEndPhysicallyActiveTouches(DeviceIntPtr dev);
    659 extern void TouchEmitTouchEnd(DeviceIntPtr dev, TouchPointInfoPtr ti, int flags, XID resource);
    660 extern void TouchAcceptAndEnd(DeviceIntPtr dev, int touchid);
    661 
    662 extern Bool GestureInitGestureInfo(GestureInfoPtr gesture);
    663 extern GestureInfoPtr GestureBeginGesture(DeviceIntPtr dev, InternalEvent *ev);
    664 extern GestureInfoPtr GestureFindActiveByEventType(DeviceIntPtr dev, int type);
    665 extern void GestureEndGesture(GestureInfoPtr gi);
    666 extern Bool GestureResourceIsOwner(GestureInfoPtr gi, XID resource);
    667 extern void GestureAddListener(GestureInfoPtr gi, XID resource, int resource_type,
    668                                enum GestureListenerType type,
    669                                WindowPtr window, GrabPtr grab);
    670 extern void GestureSetupListener(DeviceIntPtr dev, GestureInfoPtr gi,
    671                                  InternalEvent *ev);
    672 extern Bool GestureBuildSprite(DeviceIntPtr sourcedev, GestureInfoPtr gi);
    673 extern void GestureListenerGone(XID resource);
    674 extern void GestureEndActiveGestures(DeviceIntPtr dev);
    675 extern void GestureEmitGestureEndToOwner(DeviceIntPtr dev, GestureInfoPtr gi);
    676 extern void ProcessGestureEvent(InternalEvent *ev, DeviceIntPtr dev);
    677 
    678 /* misc event helpers */
    679 extern Mask GetEventMask(DeviceIntPtr dev, xEvent *ev, InputClientsPtr clients);
    680 extern Mask GetEventFilter(DeviceIntPtr dev, xEvent *event);
    681 extern Bool WindowXI2MaskIsset(DeviceIntPtr dev, WindowPtr win, xEvent *ev);
    682 extern int GetXI2MaskByte(XI2Mask *mask, DeviceIntPtr dev, int event_type);
    683 void FixUpEventFromWindow(SpritePtr pSprite,
    684                           xEvent *xE,
    685                           WindowPtr pWin, Window child, Bool calcChild);
    686 extern Bool PointInBorderSize(WindowPtr pWin, int x, int y);
    687 extern WindowPtr XYToWindow(SpritePtr pSprite, int x, int y);
    688 extern int EventIsDeliverable(DeviceIntPtr dev, int evtype, WindowPtr win);
    689 extern Bool ActivatePassiveGrab(DeviceIntPtr dev, GrabPtr grab,
    690                                 InternalEvent *ev, InternalEvent *real_event);
    691 extern void ActivateGrabNoDelivery(DeviceIntPtr dev, GrabPtr grab,
    692                                    InternalEvent *event,
    693                                    InternalEvent *real_event);
    694 /**
    695  * Masks specifying the type of event to deliver for an InternalEvent; used
    696  * by EventIsDeliverable.
    697  * @defgroup EventIsDeliverable return flags
    698  * @{
    699  */
    700 #define EVENT_XI1_MASK                (1 << 0) /**< XI1.x event */
    701 #define EVENT_CORE_MASK               (1 << 1) /**< Core event */
    702 #define EVENT_DONT_PROPAGATE_MASK     (1 << 2) /**< DontPropagate mask set */
    703 #define EVENT_XI2_MASK                (1 << 3) /**< XI2 mask set on window */
    704 /* @} */
    705 
    706 enum EventDeliveryState {
    707     EVENT_DELIVERED,     /**< Event has been delivered to a client  */
    708     EVENT_NOT_DELIVERED, /**< Event was not delivered to any client */
    709     EVENT_SKIP,          /**< Event can be discarded by the caller  */
    710     EVENT_REJECTED,      /**< Event was rejected for delivery to the client */
    711 };
    712 
    713 /* Implemented by the DDX. */
    714 extern _X_EXPORT int NewInputDeviceRequest(InputOption *options,
    715                                            InputAttributes * attrs,
    716                                            DeviceIntPtr *dev);
    717 extern _X_EXPORT void DeleteInputDeviceRequest(DeviceIntPtr dev);
    718 extern _X_EXPORT void RemoveInputDeviceTraces(const char *config_info);
    719 
    720 extern _X_EXPORT void DDXRingBell(int volume, int pitch, int duration);
    721 
    722 #define VALUATOR_MODE_ALL_AXES -1
    723 extern _X_HIDDEN int valuator_get_mode(DeviceIntPtr dev, int axis);
    724 extern _X_HIDDEN void valuator_set_mode(DeviceIntPtr dev, int axis, int mode);
    725 
    726 /* Set to TRUE by default - os/utils.c sets it to FALSE on user request,
    727    xfixes/cursor.c uses it to determine if the cursor is enabled */
    728 extern Bool EnableCursor;
    729 
    730 /* Set to FALSE by default - ChangeWindowAttributes sets it to TRUE on
    731  * CWCursor, xfixes/cursor.c uses it to determine if the cursor is enabled
    732  */
    733 extern Bool CursorVisible;
    734 
    735 extern _X_EXPORT ValuatorMask *valuator_mask_new(int num_valuators);
    736 extern _X_EXPORT void valuator_mask_free(ValuatorMask **mask);
    737 extern _X_EXPORT void valuator_mask_set_range(ValuatorMask *mask,
    738                                               int first_valuator,
    739                                               int num_valuators,
    740                                               const int *valuators);
    741 extern _X_EXPORT void valuator_mask_set(ValuatorMask *mask, int valuator,
    742                                         int data);
    743 extern _X_EXPORT void valuator_mask_set_double(ValuatorMask *mask, int valuator,
    744                                                double data);
    745 extern _X_EXPORT void valuator_mask_zero(ValuatorMask *mask);
    746 extern _X_EXPORT int valuator_mask_size(const ValuatorMask *mask);
    747 extern _X_EXPORT int valuator_mask_isset(const ValuatorMask *mask, int bit);
    748 extern _X_EXPORT void valuator_mask_unset(ValuatorMask *mask, int bit);
    749 extern _X_EXPORT int valuator_mask_num_valuators(const ValuatorMask *mask);
    750 extern _X_EXPORT void valuator_mask_copy(ValuatorMask *dest,
    751                                          const ValuatorMask *src);
    752 extern _X_EXPORT int valuator_mask_get(const ValuatorMask *mask, int valnum);
    753 extern _X_EXPORT double valuator_mask_get_double(const ValuatorMask *mask,
    754                                                  int valnum);
    755 extern _X_EXPORT Bool valuator_mask_fetch(const ValuatorMask *mask,
    756                                           int valnum, int *val);
    757 extern _X_EXPORT Bool valuator_mask_fetch_double(const ValuatorMask *mask,
    758                                                  int valnum, double *val);
    759 extern _X_EXPORT Bool valuator_mask_has_unaccelerated(const ValuatorMask *mask);
    760 extern _X_EXPORT void valuator_mask_set_unaccelerated(ValuatorMask *mask,
    761                                                       int valuator,
    762                                                       double accel,
    763                                                       double unaccel);
    764 extern _X_EXPORT void valuator_mask_set_absolute_unaccelerated(ValuatorMask *mask,
    765                                                                int valuator,
    766                                                                int absolute,
    767                                                                double unaccel);
    768 extern _X_EXPORT double valuator_mask_get_accelerated(const ValuatorMask *mask,
    769                                                       int valuator);
    770 extern _X_EXPORT double valuator_mask_get_unaccelerated(const ValuatorMask *mask,
    771                                                         int valuator);
    772 extern _X_EXPORT Bool valuator_mask_fetch_unaccelerated(const ValuatorMask *mask,
    773                                                         int valuator,
    774                                                         double *accel,
    775                                                         double *unaccel);
    776 extern _X_HIDDEN void valuator_mask_drop_unaccelerated(ValuatorMask *mask);
    777 
    778 /* InputOption handling interface */
    779 extern _X_EXPORT InputOption *input_option_new(InputOption *list,
    780                                                const char *key,
    781                                                const char *value);
    782 extern _X_EXPORT void input_option_free_list(InputOption **opt);
    783 extern _X_EXPORT InputOption *input_option_free_element(InputOption *opt,
    784                                                         const char *key);
    785 extern _X_EXPORT InputOption *input_option_find(InputOption *list,
    786                                                 const char *key);
    787 extern _X_EXPORT const char *input_option_get_key(const InputOption *opt);
    788 extern _X_EXPORT const char *input_option_get_value(const InputOption *opt);
    789 extern _X_EXPORT void input_option_set_key(InputOption *opt, const char *key);
    790 extern _X_EXPORT void input_option_set_value(InputOption *opt,
    791                                              const char *value);
    792 
    793 extern _X_HIDDEN Bool point_on_screen(ScreenPtr pScreen, int x, int y);
    794 extern _X_HIDDEN void update_desktop_dimensions(void);
    795 
    796 extern _X_HIDDEN void input_constrain_cursor(DeviceIntPtr pDev, ScreenPtr screen,
    797                                              int current_x, int current_y,
    798                                              int dest_x, int dest_y,
    799                                              int *out_x, int *out_y,
    800                                              int *nevents, InternalEvent* events);
    801 
    802 extern _X_EXPORT void input_lock(void);
    803 extern _X_EXPORT void input_unlock(void);
    804 extern _X_EXPORT void input_force_unlock(void);
    805 extern _X_EXPORT int in_input_thread(void);
    806 
    807 extern void InputThreadPreInit(void);
    808 extern void InputThreadInit(void);
    809 extern void InputThreadFini(void);
    810 
    811 extern int InputThreadRegisterDev(int fd,
    812                                   NotifyFdProcPtr readInputProc,
    813                                   void *readInputArgs);
    814 
    815 extern int InputThreadUnregisterDev(int fd);
    816 
    817 extern _X_EXPORT Bool InputThreadEnable;
    818 
    819 #endif                          /* INPUT_H */