xserver

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

dix.h (21469B)


      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 DIX_H
     48 #define DIX_H
     49 
     50 #include "callback.h"
     51 #include "gc.h"
     52 #include "window.h"
     53 #include "input.h"
     54 #include "cursor.h"
     55 #include "geext.h"
     56 #include "events.h"
     57 #include <X11/extensions/XI.h>
     58 
     59 #define EARLIER -1
     60 #define SAMETIME 0
     61 #define LATER 1
     62 
     63 #define NullClient ((ClientPtr) 0)
     64 
     65 #define REQUEST(type)                                                   \
     66     type * stuff = (type *)client->requestBuffer;
     67 
     68 #define ARRAY_SIZE(a)  (sizeof((a)) / sizeof((a)[0]))
     69 
     70 #define REQUEST_SIZE_MATCH(req)                                         \
     71     do {                                                                \
     72         if ((sizeof(req) >> 2) != client->req_len)                      \
     73             return(BadLength);                                          \
     74     } while (0)
     75 
     76 #define REQUEST_AT_LEAST_SIZE(req)                                      \
     77     do {                                                                \
     78         if ((sizeof(req) >> 2) > client->req_len)                       \
     79             return(BadLength);                                          \
     80     } while (0)
     81 
     82 #define REQUEST_AT_LEAST_EXTRA_SIZE(req, extra)                         \
     83     do {                                                                \
     84         if (((sizeof(req) + ((uint64_t) (extra))) >> 2) > client->req_len) \
     85             return(BadLength);                                          \
     86     } while (0)
     87 
     88 #define REQUEST_FIXED_SIZE(req, n)                                      \
     89     do {                                                                \
     90         if ((((sizeof(req)) >> 2) > client->req_len) ||            \
     91             (((n) >> 2) >= client->req_len) ||                         \
     92             ((((uint64_t) sizeof(req) + (n) + 3) >> 2) != (uint64_t) client->req_len)) \
     93             return(BadLength);                                          \
     94     } while (0)
     95 
     96 #define LEGAL_NEW_RESOURCE(id,client)           \
     97     do {                                        \
     98         if (!LegalNewID((id), (client))) {      \
     99             (client)->errorValue = (id);        \
    100             return BadIDChoice;                 \
    101         }                                       \
    102     } while (0)
    103 
    104 #define VALIDATE_DRAWABLE_AND_GC(drawID, pDraw, mode)                   \
    105     do {                                                                \
    106         int tmprc = dixLookupDrawable(&(pDraw), drawID, client, M_ANY, mode); \
    107         if (tmprc != Success)                                           \
    108             return tmprc;                                               \
    109         tmprc = dixLookupGC(&(pGC), stuff->gc, client, DixUseAccess);   \
    110         if (tmprc != Success)                                           \
    111             return tmprc;                                               \
    112         if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen)) \
    113             return BadMatch;                                            \
    114         if (pGC->serialNumber != pDraw->serialNumber)                   \
    115             ValidateGC(pDraw, pGC);                                     \
    116     } while (0)
    117 
    118 #define WriteReplyToClient(pClient, size, pReply)                       \
    119     do {                                                                \
    120         if ((pClient)->swapped)                                         \
    121             (*ReplySwapVector[((xReq *)(pClient)->requestBuffer)->reqType]) \
    122                 (pClient, (int)(size), pReply);                         \
    123         else                                                            \
    124             WriteToClient(pClient, (int)(size), (pReply));              \
    125     } while (0)
    126 
    127 #define WriteSwappedDataToClient(pClient, size, pbuf)                   \
    128     do {                                                                \
    129         if ((pClient)->swapped)                                         \
    130             (*(pClient)->pSwapReplyFunc)(pClient, (int)(size), pbuf);   \
    131         else                                                            \
    132             WriteToClient(pClient, (int)(size), (pbuf));                \
    133     } while (0)
    134 
    135 typedef struct _TimeStamp *TimeStampPtr;
    136 
    137 #ifndef _XTYPEDEF_CLIENTPTR
    138 typedef struct _Client *ClientPtr;      /* also in misc.h */
    139 
    140 #define _XTYPEDEF_CLIENTPTR
    141 #endif
    142 
    143 typedef struct _WorkQueue *WorkQueuePtr;
    144 
    145 extern _X_EXPORT ClientPtr clients[MAXCLIENTS];
    146 extern _X_EXPORT ClientPtr serverClient;
    147 extern _X_EXPORT int currentMaxClients;
    148 extern _X_EXPORT char dispatchExceptionAtReset;
    149 extern _X_EXPORT int terminateDelay;
    150 extern _X_EXPORT Bool touchEmulatePointer;
    151 
    152 typedef int HWEventQueueType;
    153 typedef HWEventQueueType *HWEventQueuePtr;
    154 
    155 extern _X_EXPORT HWEventQueuePtr checkForInput[2];
    156 
    157 static inline _X_NOTSAN Bool
    158 InputCheckPending(void)
    159 {
    160     return (*checkForInput[0] != *checkForInput[1]);
    161 }
    162 
    163 typedef struct _TimeStamp {
    164     CARD32 months;              /* really ~49.7 days */
    165     CARD32 milliseconds;
    166 } TimeStamp;
    167 
    168 /* dispatch.c */
    169 extern _X_EXPORT ClientPtr GetCurrentClient(void);
    170 
    171 extern _X_EXPORT void SetInputCheck(HWEventQueuePtr /*c0 */ ,
    172                                     HWEventQueuePtr /*c1 */ );
    173 
    174 extern _X_EXPORT void CloseDownClient(ClientPtr /*client */ );
    175 
    176 extern _X_EXPORT void UpdateCurrentTime(void);
    177 
    178 extern _X_EXPORT void UpdateCurrentTimeIf(void);
    179 
    180 extern _X_EXPORT int dixDestroyPixmap(void *value,
    181                                       XID pid);
    182 
    183 extern _X_EXPORT void InitClient(ClientPtr client,
    184                                  int i,
    185                                  void *ospriv);
    186 
    187 extern _X_EXPORT ClientPtr NextAvailableClient(void *ospriv);
    188 
    189 extern _X_EXPORT void SendErrorToClient(ClientPtr /*client */ ,
    190                                         unsigned int /*majorCode */ ,
    191                                         unsigned int /*minorCode */ ,
    192                                         XID /*resId */ ,
    193                                         int /*errorCode */ );
    194 
    195 extern _X_EXPORT void MarkClientException(ClientPtr /*client */ );
    196 
    197 extern _X_HIDDEN Bool CreateConnectionBlock(void);
    198 
    199 /* dixutils.c */
    200 
    201 extern _X_EXPORT int CompareISOLatin1Lowered(const unsigned char * /*a */ ,
    202                                              int alen,
    203                                              const unsigned char * /*b */ ,
    204                                              int blen);
    205 
    206 extern _X_EXPORT int dixLookupWindow(WindowPtr *result,
    207                                      XID id,
    208                                      ClientPtr client, Mask access_mode);
    209 
    210 extern _X_EXPORT int dixLookupDrawable(DrawablePtr *result,
    211                                        XID id,
    212                                        ClientPtr client,
    213                                        Mask type_mask, Mask access_mode);
    214 
    215 extern _X_EXPORT int dixLookupGC(GCPtr *result,
    216                                  XID id, ClientPtr client, Mask access_mode);
    217 
    218 extern _X_EXPORT int dixLookupFontable(FontPtr *result,
    219                                        XID id,
    220                                        ClientPtr client, Mask access_mode);
    221 
    222 extern _X_EXPORT int dixLookupClient(ClientPtr *result,
    223                                      XID id,
    224                                      ClientPtr client, Mask access_mode);
    225 
    226 extern _X_EXPORT void NoopDDA(void);
    227 
    228 extern _X_EXPORT int AlterSaveSetForClient(ClientPtr /*client */ ,
    229                                            WindowPtr /*pWin */ ,
    230                                            unsigned /*mode */ ,
    231                                            Bool /*toRoot */ ,
    232                                            Bool /*map */ );
    233 
    234 extern _X_EXPORT void DeleteWindowFromAnySaveSet(WindowPtr /*pWin */ );
    235 
    236 extern _X_EXPORT void BlockHandler(void *timeout);
    237 
    238 extern _X_EXPORT void WakeupHandler(int result);
    239 
    240 void
    241 EnableLimitedSchedulingLatency(void);
    242 
    243 void
    244 DisableLimitedSchedulingLatency(void);
    245 
    246 typedef void (*ServerBlockHandlerProcPtr) (void *blockData,
    247                                            void *timeout);
    248 
    249 typedef void (*ServerWakeupHandlerProcPtr) (void *blockData,
    250                                             int result);
    251 
    252 extern _X_EXPORT Bool RegisterBlockAndWakeupHandlers(ServerBlockHandlerProcPtr blockHandler,
    253                                                      ServerWakeupHandlerProcPtr wakeupHandler,
    254                                                      void *blockData);
    255 
    256 extern _X_EXPORT void RemoveBlockAndWakeupHandlers(ServerBlockHandlerProcPtr blockHandler,
    257                                                    ServerWakeupHandlerProcPtr wakeupHandler,
    258                                                    void *blockData);
    259 
    260 extern _X_EXPORT void InitBlockAndWakeupHandlers(void);
    261 
    262 extern _X_EXPORT void ClearWorkQueue(void);
    263 
    264 extern _X_EXPORT void ProcessWorkQueue(void);
    265 
    266 extern _X_EXPORT void ProcessWorkQueueZombies(void);
    267 
    268 extern _X_EXPORT Bool QueueWorkProc(Bool (*function)(ClientPtr clientUnused,
    269                                                      void *closure),
    270                                     ClientPtr client,
    271                                     void *closure);
    272 
    273 typedef Bool (*ClientSleepProcPtr) (ClientPtr client,
    274                                     void *closure);
    275 
    276 extern _X_EXPORT Bool ClientSleep(ClientPtr client,
    277                                   ClientSleepProcPtr function,
    278                                   void *closure);
    279 
    280 #ifndef ___CLIENTSIGNAL_DEFINED___
    281 #define ___CLIENTSIGNAL_DEFINED___
    282 extern _X_EXPORT Bool ClientSignal(ClientPtr /*client */ );
    283 #endif                          /* ___CLIENTSIGNAL_DEFINED___ */
    284 
    285 #define CLIENT_SIGNAL_ANY ((void *)-1)
    286 extern _X_EXPORT int ClientSignalAll(ClientPtr /*client*/,
    287                                      ClientSleepProcPtr /*function*/,
    288                                      void * /*closure*/);
    289 
    290 extern _X_EXPORT void ClientWakeup(ClientPtr /*client */ );
    291 
    292 extern _X_EXPORT Bool ClientIsAsleep(ClientPtr /*client */ );
    293 
    294 extern _X_EXPORT void SendGraphicsExpose(ClientPtr /*client */ ,
    295                                          RegionPtr /*pRgn */ ,
    296                                          XID /*drawable */ ,
    297                                          int /*major */ ,
    298                                          int  /*minor */);
    299 
    300 /* atom.c */
    301 
    302 extern _X_EXPORT Atom MakeAtom(const char * /*string */ ,
    303                                unsigned /*len */ ,
    304                                Bool /*makeit */ );
    305 
    306 extern _X_EXPORT Bool ValidAtom(Atom /*atom */ );
    307 
    308 extern _X_EXPORT const char *NameForAtom(Atom /*atom */ );
    309 
    310 extern _X_EXPORT void
    311 AtomError(void)
    312     _X_NORETURN;
    313 
    314 extern _X_EXPORT void
    315 FreeAllAtoms(void);
    316 
    317 extern _X_EXPORT void
    318 InitAtoms(void);
    319 
    320 /* main.c */
    321 
    322 extern _X_EXPORT void
    323 SetVendorRelease(int release);
    324 
    325 int
    326 dix_main(int argc, char *argv[], char *envp[]);
    327 
    328 /* events.c */
    329 
    330 extern void
    331 SetMaskForEvent(int /* deviceid */ ,
    332                 Mask /* mask */ ,
    333                 int /* event */ );
    334 
    335 extern _X_EXPORT void
    336 ConfineToShape(DeviceIntPtr /* pDev */ ,
    337                RegionPtr /* shape */ ,
    338                int * /* px */ ,
    339                int * /* py */ );
    340 
    341 extern _X_EXPORT Bool
    342 IsParent(WindowPtr /* maybeparent */ ,
    343          WindowPtr /* child */ );
    344 
    345 extern _X_EXPORT WindowPtr
    346 GetCurrentRootWindow(DeviceIntPtr pDev);
    347 
    348 extern _X_EXPORT WindowPtr
    349 GetSpriteWindow(DeviceIntPtr pDev);
    350 
    351 extern _X_EXPORT void
    352 NoticeTime(const DeviceIntPtr dev,
    353            TimeStamp time);
    354 extern _X_EXPORT void
    355 NoticeEventTime(InternalEvent *ev,
    356                 DeviceIntPtr dev);
    357 extern _X_EXPORT TimeStamp
    358 LastEventTime(int deviceid);
    359 extern _X_EXPORT Bool
    360 LastEventTimeWasReset(int deviceid);
    361 extern _X_EXPORT void
    362 LastEventTimeToggleResetFlag(int deviceid, Bool state);
    363 extern _X_EXPORT void
    364 LastEventTimeToggleResetAll(Bool state);
    365 
    366 extern void
    367 EnqueueEvent(InternalEvent * /* ev */ ,
    368              DeviceIntPtr /* device */ );
    369 extern void
    370 PlayReleasedEvents(void);
    371 
    372 extern void
    373 ActivatePointerGrab(DeviceIntPtr /* mouse */ ,
    374                     GrabPtr /* grab */ ,
    375                     TimeStamp /* time */ ,
    376                     Bool /* autoGrab */ );
    377 
    378 extern void
    379 DeactivatePointerGrab(DeviceIntPtr /* mouse */ );
    380 
    381 extern void
    382 ActivateKeyboardGrab(DeviceIntPtr /* keybd */ ,
    383                      GrabPtr /* grab */ ,
    384                      TimeStamp /* time */ ,
    385                      Bool /* passive */ );
    386 
    387 extern void
    388 DeactivateKeyboardGrab(DeviceIntPtr /* keybd */ );
    389 
    390 extern BOOL
    391 ActivateFocusInGrab(DeviceIntPtr /* dev */ ,
    392                     WindowPtr /* old */ ,
    393                     WindowPtr /* win */ );
    394 
    395 extern void
    396 AllowSome(ClientPtr /* client */ ,
    397           TimeStamp /* time */ ,
    398           DeviceIntPtr /* thisDev */ ,
    399           int /* newState */ );
    400 
    401 extern void
    402 ReleaseActiveGrabs(ClientPtr client);
    403 
    404 extern GrabPtr
    405 CheckPassiveGrabsOnWindow(WindowPtr /* pWin */ ,
    406                           DeviceIntPtr /* device */ ,
    407                           InternalEvent * /* event */ ,
    408                           BOOL /* checkCore */ ,
    409                           BOOL /* activate */ );
    410 
    411 extern _X_EXPORT int
    412 DeliverEventsToWindow(DeviceIntPtr /* pWin */ ,
    413                       WindowPtr /* pWin */ ,
    414                       xEventPtr /* pEvents */ ,
    415                       int /* count */ ,
    416                       Mask /* filter */ ,
    417                       GrabPtr /* grab */ );
    418 
    419 extern _X_EXPORT void
    420 DeliverRawEvent(RawDeviceEvent * /* ev */ ,
    421                 DeviceIntPtr    /* dev */
    422     );
    423 
    424 extern int
    425 DeliverDeviceEvents(WindowPtr /* pWin */ ,
    426                     InternalEvent * /* event */ ,
    427                     GrabPtr /* grab */ ,
    428                     WindowPtr /* stopAt */ ,
    429                     DeviceIntPtr /* dev */ );
    430 
    431 extern int
    432 DeliverOneGrabbedEvent(InternalEvent * /* event */ ,
    433                        DeviceIntPtr /* dev */ ,
    434                        enum InputLevel /* level */ );
    435 
    436 extern void
    437 DeliverTouchEvents(DeviceIntPtr /* dev */ ,
    438                    TouchPointInfoPtr /* ti */ ,
    439                    InternalEvent * /* ev */ ,
    440                    XID /* resource */ );
    441 
    442 extern Bool
    443 DeliverGestureEventToOwner(DeviceIntPtr dev, GestureInfoPtr gi,
    444                            InternalEvent *ev);
    445 
    446 extern void
    447 InitializeSprite(DeviceIntPtr /* pDev */ ,
    448                  WindowPtr /* pWin */ );
    449 extern void
    450 FreeSprite(DeviceIntPtr pDev);
    451 
    452 extern void
    453 UpdateSpriteForScreen(DeviceIntPtr /* pDev */ ,
    454                       ScreenPtr /* pScreen */ );
    455 
    456 extern _X_EXPORT void
    457 WindowHasNewCursor(WindowPtr /* pWin */ );
    458 
    459 extern Bool
    460 CheckDeviceGrabs(DeviceIntPtr /* device */ ,
    461                  InternalEvent * /* event */ ,
    462                  WindowPtr /* ancestor */ );
    463 
    464 extern void
    465 DeliverFocusedEvent(DeviceIntPtr /* keybd */ ,
    466                     InternalEvent * /* event */ ,
    467                     WindowPtr /* window */ );
    468 
    469 extern int
    470 DeliverGrabbedEvent(InternalEvent * /* event */ ,
    471                     DeviceIntPtr /* thisDev */ ,
    472                     Bool /* deactivateGrab */ );
    473 
    474 extern void
    475 FreezeThisEventIfNeededForSyncGrab(DeviceIntPtr thisDev,
    476                                    InternalEvent *event);
    477 
    478 extern void
    479 FixKeyState(DeviceEvent * /* event */ ,
    480             DeviceIntPtr /* keybd */ );
    481 
    482 extern void
    483 RecalculateDeliverableEvents(WindowPtr /* pWin */ );
    484 
    485 extern _X_EXPORT int
    486 OtherClientGone(void *value,
    487                 XID id);
    488 
    489 extern void
    490 DoFocusEvents(DeviceIntPtr /* dev */ ,
    491               WindowPtr /* fromWin */ ,
    492               WindowPtr /* toWin */ ,
    493               int /* mode */ );
    494 
    495 extern int
    496 SetInputFocus(ClientPtr /* client */ ,
    497               DeviceIntPtr /* dev */ ,
    498               Window /* focusID */ ,
    499               CARD8 /* revertTo */ ,
    500               Time /* ctime */ ,
    501               Bool /* followOK */ );
    502 
    503 extern int
    504 GrabDevice(ClientPtr /* client */ ,
    505            DeviceIntPtr /* dev */ ,
    506            unsigned /* this_mode */ ,
    507            unsigned /* other_mode */ ,
    508            Window /* grabWindow */ ,
    509            unsigned /* ownerEvents */ ,
    510            Time /* ctime */ ,
    511            GrabMask * /* mask */ ,
    512            int /* grabtype */ ,
    513            Cursor /* curs */ ,
    514            Window /* confineToWin */ ,
    515            CARD8 * /* status */ );
    516 
    517 extern void
    518 InitEvents(void);
    519 
    520 extern void
    521 CloseDownEvents(void);
    522 
    523 extern void
    524 DeleteWindowFromAnyEvents(WindowPtr /* pWin */ ,
    525                           Bool /* freeResources */ );
    526 
    527 extern Mask
    528 EventMaskForClient(WindowPtr /* pWin */ ,
    529                    ClientPtr /* client */ );
    530 
    531 extern _X_EXPORT int
    532 DeliverEvents(WindowPtr /*pWin */ ,
    533               xEventPtr /*xE */ ,
    534               int /*count */ ,
    535               WindowPtr /*otherParent */ );
    536 
    537 extern Bool
    538 CheckMotion(DeviceEvent * /* ev */ ,
    539             DeviceIntPtr /* pDev */ );
    540 
    541 extern _X_EXPORT void
    542 WriteEventsToClient(ClientPtr /*pClient */ ,
    543                     int /*count */ ,
    544                     xEventPtr /*events */ );
    545 
    546 extern _X_EXPORT int
    547 TryClientEvents(ClientPtr /*client */ ,
    548                 DeviceIntPtr /* device */ ,
    549                 xEventPtr /*pEvents */ ,
    550                 int /*count */ ,
    551                 Mask /*mask */ ,
    552                 Mask /*filter */ ,
    553                 GrabPtr /*grab */ );
    554 
    555 extern _X_EXPORT void
    556 WindowsRestructured(void);
    557 
    558 extern int
    559 SetClientPointer(ClientPtr /* client */ ,
    560                  DeviceIntPtr /* device */ );
    561 
    562 extern _X_EXPORT DeviceIntPtr
    563 PickPointer(ClientPtr /* client */ );
    564 
    565 extern _X_EXPORT DeviceIntPtr
    566 PickKeyboard(ClientPtr /* client */ );
    567 
    568 extern Bool
    569 IsInterferingGrab(ClientPtr /* client */ ,
    570                   DeviceIntPtr /* dev */ ,
    571                   xEvent * /* events */ );
    572 
    573 #ifdef PANORAMIX
    574 extern _X_EXPORT void
    575 ReinitializeRootWindow(WindowPtr win, int xoff, int yoff);
    576 #endif
    577 
    578 #ifdef RANDR
    579 extern _X_EXPORT void
    580 ScreenRestructured(ScreenPtr pScreen);
    581 #endif
    582 
    583 /*
    584  *  ServerGrabCallback stuff
    585  */
    586 
    587 extern _X_EXPORT CallbackListPtr ServerGrabCallback;
    588 
    589 typedef enum { SERVER_GRABBED, SERVER_UNGRABBED,
    590     CLIENT_PERVIOUS, CLIENT_IMPERVIOUS
    591 } ServerGrabState;
    592 
    593 typedef struct {
    594     ClientPtr client;
    595     ServerGrabState grabstate;
    596 } ServerGrabInfoRec;
    597 
    598 /*
    599  *  EventCallback stuff
    600  */
    601 
    602 extern _X_EXPORT CallbackListPtr EventCallback;
    603 
    604 typedef struct {
    605     ClientPtr client;
    606     xEventPtr events;
    607     int count;
    608 } EventInfoRec;
    609 
    610 /*
    611  *  DeviceEventCallback stuff
    612  */
    613 
    614 extern _X_EXPORT CallbackListPtr DeviceEventCallback;
    615 
    616 typedef struct {
    617     InternalEvent *event;
    618     DeviceIntPtr device;
    619 } DeviceEventInfoRec;
    620 
    621 extern _X_EXPORT CallbackListPtr RootWindowFinalizeCallback;
    622 
    623 extern int
    624 XItoCoreType(int xi_type);
    625 extern Bool
    626 DevHasCursor(DeviceIntPtr pDev);
    627 extern _X_EXPORT Bool
    628 IsPointerDevice(DeviceIntPtr dev);
    629 extern _X_EXPORT Bool
    630 IsKeyboardDevice(DeviceIntPtr dev);
    631 extern Bool
    632 IsPointerEvent(InternalEvent *event);
    633 extern Bool
    634 IsTouchEvent(InternalEvent *event);
    635 Bool
    636 IsGestureEvent(InternalEvent *event);
    637 Bool
    638 IsGestureBeginEvent(InternalEvent *event);
    639 Bool
    640 IsGestureEndEvent(InternalEvent *event);
    641 
    642 extern _X_EXPORT Bool
    643 IsMaster(DeviceIntPtr dev);
    644 extern _X_EXPORT Bool
    645 IsFloating(DeviceIntPtr dev);
    646 
    647 extern _X_HIDDEN void
    648 CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
    649 extern _X_HIDDEN int
    650 CorePointerProc(DeviceIntPtr dev, int what);
    651 extern _X_HIDDEN int
    652 CoreKeyboardProc(DeviceIntPtr dev, int what);
    653 
    654 extern _X_EXPORT void *lastGLContext;
    655 
    656 #endif                          /* DIX_H */