105b261ecSmrg/*********************************************************** 205b261ecSmrg 305b261ecSmrgCopyright 1987, 1998 The Open Group 405b261ecSmrg 505b261ecSmrgPermission to use, copy, modify, distribute, and sell this software and its 605b261ecSmrgdocumentation for any purpose is hereby granted without fee, provided that 705b261ecSmrgthe above copyright notice appear in all copies and that both that 805b261ecSmrgcopyright notice and this permission notice appear in supporting 905b261ecSmrgdocumentation. 1005b261ecSmrg 1105b261ecSmrgThe above copyright notice and this permission notice shall be included in 1205b261ecSmrgall copies or substantial portions of the Software. 1305b261ecSmrg 1405b261ecSmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1505b261ecSmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1605b261ecSmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 1705b261ecSmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 1805b261ecSmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 1905b261ecSmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 2005b261ecSmrg 2105b261ecSmrgExcept as contained in this notice, the name of The Open Group shall not be 2205b261ecSmrgused in advertising or otherwise to promote the sale, use or other dealings 2305b261ecSmrgin this Software without prior written authorization from The Open Group. 2405b261ecSmrg 2505b261ecSmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. 2605b261ecSmrg 2705b261ecSmrg All Rights Reserved 2805b261ecSmrg 29f7df2e56SmrgPermission to use, copy, modify, and distribute this software and its 30f7df2e56Smrgdocumentation for any purpose and without fee is hereby granted, 3105b261ecSmrgprovided that the above copyright notice appear in all copies and that 32f7df2e56Smrgboth that copyright notice and this permission notice appear in 3305b261ecSmrgsupporting documentation, and that the name of Digital not be 3405b261ecSmrgused in advertising or publicity pertaining to distribution of the 35f7df2e56Smrgsoftware without specific, written prior permission. 3605b261ecSmrg 3705b261ecSmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 3805b261ecSmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL 3905b261ecSmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR 4005b261ecSmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, 4105b261ecSmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 4205b261ecSmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS 4305b261ecSmrgSOFTWARE. 4405b261ecSmrg 4505b261ecSmrg******************************************************************/ 4605b261ecSmrg 4705b261ecSmrg#ifndef DIX_H 4805b261ecSmrg#define DIX_H 4905b261ecSmrg 506747b715Smrg#include "callback.h" 5105b261ecSmrg#include "gc.h" 5205b261ecSmrg#include "window.h" 5305b261ecSmrg#include "input.h" 544642e01fSmrg#include "cursor.h" 554642e01fSmrg#include "geext.h" 566747b715Smrg#include "events.h" 574642e01fSmrg#include <X11/extensions/XI.h> 5805b261ecSmrg 5905b261ecSmrg#define EARLIER -1 6005b261ecSmrg#define SAMETIME 0 6105b261ecSmrg#define LATER 1 6205b261ecSmrg 6305b261ecSmrg#define NullClient ((ClientPtr) 0) 645a112b11Smrg 655a112b11Smrg#define REQUEST(type) \ 665a112b11Smrg type * stuff = (type *)client->requestBuffer; 6705b261ecSmrg 68f7df2e56Smrg#define ARRAY_SIZE(a) (sizeof((a)) / sizeof((a)[0])) 6905b261ecSmrg 705a112b11Smrg#define REQUEST_SIZE_MATCH(req) \ 715a112b11Smrg do { \ 725a112b11Smrg if ((sizeof(req) >> 2) != client->req_len) \ 735a112b11Smrg return(BadLength); \ 745a112b11Smrg } while (0) 755a112b11Smrg 765a112b11Smrg#define REQUEST_AT_LEAST_SIZE(req) \ 775a112b11Smrg do { \ 785a112b11Smrg if ((sizeof(req) >> 2) > client->req_len) \ 795a112b11Smrg return(BadLength); \ 805a112b11Smrg } while (0) 815a112b11Smrg 825a112b11Smrg#define REQUEST_AT_LEAST_EXTRA_SIZE(req, extra) \ 835a112b11Smrg do { \ 845a112b11Smrg if (((sizeof(req) + ((uint64_t) (extra))) >> 2) > client->req_len) \ 855a112b11Smrg return(BadLength); \ 865a112b11Smrg } while (0) 875a112b11Smrg 885a112b11Smrg#define REQUEST_FIXED_SIZE(req, n) \ 895a112b11Smrg do { \ 905a112b11Smrg if ((((sizeof(req)) >> 2) > client->req_len) || \ 915a112b11Smrg (((n) >> 2) >= client->req_len) || \ 925a112b11Smrg ((((uint64_t) sizeof(req) + (n) + 3) >> 2) != (uint64_t) client->req_len)) \ 935a112b11Smrg return(BadLength); \ 945a112b11Smrg } while (0) 955a112b11Smrg 965a112b11Smrg#define LEGAL_NEW_RESOURCE(id,client) \ 975a112b11Smrg do { \ 985a112b11Smrg if (!LegalNewID((id), (client))) { \ 995a112b11Smrg (client)->errorValue = (id); \ 1005a112b11Smrg return BadIDChoice; \ 1015a112b11Smrg } \ 1025a112b11Smrg } while (0) 1035a112b11Smrg 1045a112b11Smrg#define VALIDATE_DRAWABLE_AND_GC(drawID, pDraw, mode) \ 1055a112b11Smrg do { \ 1065a112b11Smrg int tmprc = dixLookupDrawable(&(pDraw), drawID, client, M_ANY, mode); \ 1075a112b11Smrg if (tmprc != Success) \ 1085a112b11Smrg return tmprc; \ 1095a112b11Smrg tmprc = dixLookupGC(&(pGC), stuff->gc, client, DixUseAccess); \ 1105a112b11Smrg if (tmprc != Success) \ 1115a112b11Smrg return tmprc; \ 1125a112b11Smrg if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen)) \ 1135a112b11Smrg return BadMatch; \ 1145a112b11Smrg if (pGC->serialNumber != pDraw->serialNumber) \ 1155a112b11Smrg ValidateGC(pDraw, pGC); \ 1165a112b11Smrg } while (0) 1175a112b11Smrg 1185a112b11Smrg#define WriteReplyToClient(pClient, size, pReply) \ 1195a112b11Smrg do { \ 1205a112b11Smrg if ((pClient)->swapped) \ 1215a112b11Smrg (*ReplySwapVector[((xReq *)(pClient)->requestBuffer)->reqType]) \ 1225a112b11Smrg (pClient, (int)(size), pReply); \ 1235a112b11Smrg else \ 1245a112b11Smrg WriteToClient(pClient, (int)(size), (pReply)); \ 1255a112b11Smrg } while (0) 1265a112b11Smrg 1275a112b11Smrg#define WriteSwappedDataToClient(pClient, size, pbuf) \ 1285a112b11Smrg do { \ 1295a112b11Smrg if ((pClient)->swapped) \ 1305a112b11Smrg (*(pClient)->pSwapReplyFunc)(pClient, (int)(size), pbuf); \ 1315a112b11Smrg else \ 1325a112b11Smrg WriteToClient(pClient, (int)(size), (pbuf)); \ 1335a112b11Smrg } while (0) 13405b261ecSmrg 13505b261ecSmrgtypedef struct _TimeStamp *TimeStampPtr; 13605b261ecSmrg 13705b261ecSmrg#ifndef _XTYPEDEF_CLIENTPTR 138f7df2e56Smrgtypedef struct _Client *ClientPtr; /* also in misc.h */ 139f7df2e56Smrg 14005b261ecSmrg#define _XTYPEDEF_CLIENTPTR 14105b261ecSmrg#endif 14205b261ecSmrg 143f7df2e56Smrgtypedef struct _WorkQueue *WorkQueuePtr; 14405b261ecSmrg 1456747b715Smrgextern _X_EXPORT ClientPtr clients[MAXCLIENTS]; 1466747b715Smrgextern _X_EXPORT ClientPtr serverClient; 1476747b715Smrgextern _X_EXPORT int currentMaxClients; 1486747b715Smrgextern _X_EXPORT char dispatchExceptionAtReset; 1495a112b11Smrgextern _X_EXPORT int terminateDelay; 1505a112b11Smrgextern _X_EXPORT Bool touchEmulatePointer; 15105b261ecSmrg 15205b261ecSmrgtypedef int HWEventQueueType; 153f7df2e56Smrgtypedef HWEventQueueType *HWEventQueuePtr; 15405b261ecSmrg 1556747b715Smrgextern _X_EXPORT HWEventQueuePtr checkForInput[2]; 15605b261ecSmrg 1577e31ba66Smrgstatic inline _X_NOTSAN Bool 1587e31ba66SmrgInputCheckPending(void) 1597e31ba66Smrg{ 1607e31ba66Smrg return (*checkForInput[0] != *checkForInput[1]); 1617e31ba66Smrg} 1627e31ba66Smrg 16305b261ecSmrgtypedef struct _TimeStamp { 164f7df2e56Smrg CARD32 months; /* really ~49.7 days */ 16505b261ecSmrg CARD32 milliseconds; 166f7df2e56Smrg} TimeStamp; 16705b261ecSmrg 16805b261ecSmrg/* dispatch.c */ 1695a112b11Smrgextern _X_EXPORT ClientPtr GetCurrentClient(void); 17005b261ecSmrg 171f7df2e56Smrgextern _X_EXPORT void SetInputCheck(HWEventQueuePtr /*c0 */ , 172f7df2e56Smrg HWEventQueuePtr /*c1 */ ); 17305b261ecSmrg 174f7df2e56Smrgextern _X_EXPORT void CloseDownClient(ClientPtr /*client */ ); 17505b261ecSmrg 1766747b715Smrgextern _X_EXPORT void UpdateCurrentTime(void); 17705b261ecSmrg 1786747b715Smrgextern _X_EXPORT void UpdateCurrentTimeIf(void); 17905b261ecSmrg 180f7df2e56Smrgextern _X_EXPORT int dixDestroyPixmap(void *value, 181f7df2e56Smrg XID pid); 18205b261ecSmrg 183f7df2e56Smrgextern _X_EXPORT void InitClient(ClientPtr client, 184f7df2e56Smrg int i, 185f7df2e56Smrg void *ospriv); 18605b261ecSmrg 187f7df2e56Smrgextern _X_EXPORT ClientPtr NextAvailableClient(void *ospriv); 18805b261ecSmrg 189f7df2e56Smrgextern _X_EXPORT void SendErrorToClient(ClientPtr /*client */ , 190f7df2e56Smrg unsigned int /*majorCode */ , 191f7df2e56Smrg unsigned int /*minorCode */ , 192f7df2e56Smrg XID /*resId */ , 193f7df2e56Smrg int /*errorCode */ ); 19405b261ecSmrg 195f7df2e56Smrgextern _X_EXPORT void MarkClientException(ClientPtr /*client */ ); 19605b261ecSmrg 1976747b715Smrgextern _X_HIDDEN Bool CreateConnectionBlock(void); 198f7df2e56Smrg 19905b261ecSmrg/* dixutils.c */ 20005b261ecSmrg 201f7df2e56Smrgextern _X_EXPORT int CompareISOLatin1Lowered(const unsigned char * /*a */ , 202f7df2e56Smrg int alen, 203f7df2e56Smrg const unsigned char * /*b */ , 204f7df2e56Smrg int blen); 205f7df2e56Smrg 206f7df2e56Smrgextern _X_EXPORT int dixLookupWindow(WindowPtr *result, 207f7df2e56Smrg XID id, 208f7df2e56Smrg ClientPtr client, Mask access_mode); 209f7df2e56Smrg 210f7df2e56Smrgextern _X_EXPORT int dixLookupDrawable(DrawablePtr *result, 211f7df2e56Smrg XID id, 212f7df2e56Smrg ClientPtr client, 213f7df2e56Smrg Mask type_mask, Mask access_mode); 214f7df2e56Smrg 215f7df2e56Smrgextern _X_EXPORT int dixLookupGC(GCPtr *result, 216f7df2e56Smrg XID id, ClientPtr client, Mask access_mode); 217f7df2e56Smrg 218f7df2e56Smrgextern _X_EXPORT int dixLookupFontable(FontPtr *result, 219f7df2e56Smrg XID id, 220f7df2e56Smrg ClientPtr client, Mask access_mode); 221f7df2e56Smrg 222f7df2e56Smrgextern _X_EXPORT int dixLookupClient(ClientPtr *result, 223f7df2e56Smrg XID id, 224f7df2e56Smrg ClientPtr client, Mask access_mode); 22505b261ecSmrg 2266747b715Smrgextern _X_EXPORT void NoopDDA(void); 22705b261ecSmrg 228f7df2e56Smrgextern _X_EXPORT int AlterSaveSetForClient(ClientPtr /*client */ , 229f7df2e56Smrg WindowPtr /*pWin */ , 230f7df2e56Smrg unsigned /*mode */ , 231f7df2e56Smrg Bool /*toRoot */ , 232f7df2e56Smrg Bool /*map */ ); 23305b261ecSmrg 234f7df2e56Smrgextern _X_EXPORT void DeleteWindowFromAnySaveSet(WindowPtr /*pWin */ ); 23505b261ecSmrg 2367e31ba66Smrgextern _X_EXPORT void BlockHandler(void *timeout); 237f7df2e56Smrg 2387e31ba66Smrgextern _X_EXPORT void WakeupHandler(int result); 23905b261ecSmrg 240b1d344b3Smrgvoid 2417e31ba66SmrgEnableLimitedSchedulingLatency(void); 242b1d344b3Smrg 243b1d344b3Smrgvoid 2447e31ba66SmrgDisableLimitedSchedulingLatency(void); 2457e31ba66Smrg 2467e31ba66Smrgtypedef void (*ServerBlockHandlerProcPtr) (void *blockData, 2477e31ba66Smrg void *timeout); 248b1d344b3Smrg 2497e31ba66Smrgtypedef void (*ServerWakeupHandlerProcPtr) (void *blockData, 2507e31ba66Smrg int result); 25105b261ecSmrg 2527e31ba66Smrgextern _X_EXPORT Bool RegisterBlockAndWakeupHandlers(ServerBlockHandlerProcPtr blockHandler, 2537e31ba66Smrg ServerWakeupHandlerProcPtr wakeupHandler, 254f7df2e56Smrg void *blockData); 25505b261ecSmrg 2567e31ba66Smrgextern _X_EXPORT void RemoveBlockAndWakeupHandlers(ServerBlockHandlerProcPtr blockHandler, 2577e31ba66Smrg ServerWakeupHandlerProcPtr wakeupHandler, 258f7df2e56Smrg void *blockData); 25905b261ecSmrg 2606747b715Smrgextern _X_EXPORT void InitBlockAndWakeupHandlers(void); 26105b261ecSmrg 26215af7600Smrgextern _X_EXPORT void ClearWorkQueue(void); 26315af7600Smrg 2646747b715Smrgextern _X_EXPORT void ProcessWorkQueue(void); 26505b261ecSmrg 2666747b715Smrgextern _X_EXPORT void ProcessWorkQueueZombies(void); 26705b261ecSmrg 268f7df2e56Smrgextern _X_EXPORT Bool QueueWorkProc(Bool (*function)(ClientPtr clientUnused, 269f7df2e56Smrg void *closure), 270f7df2e56Smrg ClientPtr client, 271f7df2e56Smrg void *closure); 27205b261ecSmrg 273f7df2e56Smrgtypedef Bool (*ClientSleepProcPtr) (ClientPtr client, 274f7df2e56Smrg void *closure); 27505b261ecSmrg 276f7df2e56Smrgextern _X_EXPORT Bool ClientSleep(ClientPtr client, 277f7df2e56Smrg ClientSleepProcPtr function, 278f7df2e56Smrg void *closure); 27905b261ecSmrg 28005b261ecSmrg#ifndef ___CLIENTSIGNAL_DEFINED___ 28105b261ecSmrg#define ___CLIENTSIGNAL_DEFINED___ 282f7df2e56Smrgextern _X_EXPORT Bool ClientSignal(ClientPtr /*client */ ); 283f7df2e56Smrg#endif /* ___CLIENTSIGNAL_DEFINED___ */ 284f7df2e56Smrg 285f7df2e56Smrg#define CLIENT_SIGNAL_ANY ((void *)-1) 286f7df2e56Smrgextern _X_EXPORT int ClientSignalAll(ClientPtr /*client*/, 287f7df2e56Smrg ClientSleepProcPtr /*function*/, 288f7df2e56Smrg void * /*closure*/); 289f7df2e56Smrg 290f7df2e56Smrgextern _X_EXPORT void ClientWakeup(ClientPtr /*client */ ); 29105b261ecSmrg 292f7df2e56Smrgextern _X_EXPORT Bool ClientIsAsleep(ClientPtr /*client */ ); 29305b261ecSmrg 294f7df2e56Smrgextern _X_EXPORT void SendGraphicsExpose(ClientPtr /*client */ , 295f7df2e56Smrg RegionPtr /*pRgn */ , 296f7df2e56Smrg XID /*drawable */ , 297f7df2e56Smrg int /*major */ , 298f7df2e56Smrg int /*minor */); 29905b261ecSmrg 30005b261ecSmrg/* atom.c */ 30105b261ecSmrg 302f7df2e56Smrgextern _X_EXPORT Atom MakeAtom(const char * /*string */ , 303f7df2e56Smrg unsigned /*len */ , 304f7df2e56Smrg Bool /*makeit */ ); 30505b261ecSmrg 306f7df2e56Smrgextern _X_EXPORT Bool ValidAtom(Atom /*atom */ ); 30705b261ecSmrg 308f7df2e56Smrgextern _X_EXPORT const char *NameForAtom(Atom /*atom */ ); 30905b261ecSmrg 310f7df2e56Smrgextern _X_EXPORT void 311f7df2e56SmrgAtomError(void) 312f7df2e56Smrg _X_NORETURN; 31305b261ecSmrg 314f7df2e56Smrgextern _X_EXPORT void 315f7df2e56SmrgFreeAllAtoms(void); 31605b261ecSmrg 317f7df2e56Smrgextern _X_EXPORT void 318f7df2e56SmrgInitAtoms(void); 31905b261ecSmrg 32005b261ecSmrg/* main.c */ 32105b261ecSmrg 322f7df2e56Smrgextern _X_EXPORT void 323f7df2e56SmrgSetVendorRelease(int release); 324f7df2e56Smrg 325f7df2e56Smrgint 326f7df2e56Smrgdix_main(int argc, char *argv[], char *envp[]); 32705b261ecSmrg 32805b261ecSmrg/* events.c */ 32905b261ecSmrg 330f7df2e56Smrgextern void 331f7df2e56SmrgSetMaskForEvent(int /* deviceid */ , 332f7df2e56Smrg Mask /* mask */ , 333f7df2e56Smrg int /* event */ ); 334f7df2e56Smrg 335f7df2e56Smrgextern _X_EXPORT void 336f7df2e56SmrgConfineToShape(DeviceIntPtr /* pDev */ , 337f7df2e56Smrg RegionPtr /* shape */ , 338f7df2e56Smrg int * /* px */ , 339f7df2e56Smrg int * /* py */ ); 340f7df2e56Smrg 341f7df2e56Smrgextern _X_EXPORT Bool 342f7df2e56SmrgIsParent(WindowPtr /* maybeparent */ , 343f7df2e56Smrg WindowPtr /* child */ ); 344f7df2e56Smrg 345f7df2e56Smrgextern _X_EXPORT WindowPtr 346f7df2e56SmrgGetCurrentRootWindow(DeviceIntPtr pDev); 347f7df2e56Smrg 348f7df2e56Smrgextern _X_EXPORT WindowPtr 349f7df2e56SmrgGetSpriteWindow(DeviceIntPtr pDev); 350f7df2e56Smrg 351f7df2e56Smrgextern _X_EXPORT void 352f7df2e56SmrgNoticeTime(const DeviceIntPtr dev, 353f7df2e56Smrg TimeStamp time); 354f7df2e56Smrgextern _X_EXPORT void 355f7df2e56SmrgNoticeEventTime(InternalEvent *ev, 356f7df2e56Smrg DeviceIntPtr dev); 357f7df2e56Smrgextern _X_EXPORT TimeStamp 358f7df2e56SmrgLastEventTime(int deviceid); 359f7df2e56Smrgextern _X_EXPORT Bool 360f7df2e56SmrgLastEventTimeWasReset(int deviceid); 361f7df2e56Smrgextern _X_EXPORT void 362f7df2e56SmrgLastEventTimeToggleResetFlag(int deviceid, Bool state); 363f7df2e56Smrgextern _X_EXPORT void 364f7df2e56SmrgLastEventTimeToggleResetAll(Bool state); 365f7df2e56Smrg 366f7df2e56Smrgextern void 367f7df2e56SmrgEnqueueEvent(InternalEvent * /* ev */ , 368f7df2e56Smrg DeviceIntPtr /* device */ ); 369f7df2e56Smrgextern void 370f7df2e56SmrgPlayReleasedEvents(void); 371f7df2e56Smrg 372f7df2e56Smrgextern void 373f7df2e56SmrgActivatePointerGrab(DeviceIntPtr /* mouse */ , 374f7df2e56Smrg GrabPtr /* grab */ , 375f7df2e56Smrg TimeStamp /* time */ , 376f7df2e56Smrg Bool /* autoGrab */ ); 377f7df2e56Smrg 378f7df2e56Smrgextern void 379f7df2e56SmrgDeactivatePointerGrab(DeviceIntPtr /* mouse */ ); 380f7df2e56Smrg 381f7df2e56Smrgextern void 382f7df2e56SmrgActivateKeyboardGrab(DeviceIntPtr /* keybd */ , 383f7df2e56Smrg GrabPtr /* grab */ , 384f7df2e56Smrg TimeStamp /* time */ , 385f7df2e56Smrg Bool /* passive */ ); 386f7df2e56Smrg 387f7df2e56Smrgextern void 388f7df2e56SmrgDeactivateKeyboardGrab(DeviceIntPtr /* keybd */ ); 389f7df2e56Smrg 390f7df2e56Smrgextern BOOL 391f7df2e56SmrgActivateFocusInGrab(DeviceIntPtr /* dev */ , 392f7df2e56Smrg WindowPtr /* old */ , 393f7df2e56Smrg WindowPtr /* win */ ); 394f7df2e56Smrg 395f7df2e56Smrgextern void 396f7df2e56SmrgAllowSome(ClientPtr /* client */ , 397f7df2e56Smrg TimeStamp /* time */ , 398f7df2e56Smrg DeviceIntPtr /* thisDev */ , 399f7df2e56Smrg int /* newState */ ); 400f7df2e56Smrg 401f7df2e56Smrgextern void 402f7df2e56SmrgReleaseActiveGrabs(ClientPtr client); 403f7df2e56Smrg 404f7df2e56Smrgextern GrabPtr 405f7df2e56SmrgCheckPassiveGrabsOnWindow(WindowPtr /* pWin */ , 406f7df2e56Smrg DeviceIntPtr /* device */ , 407f7df2e56Smrg InternalEvent * /* event */ , 408f7df2e56Smrg BOOL /* checkCore */ , 409f7df2e56Smrg BOOL /* activate */ ); 410f7df2e56Smrg 411f7df2e56Smrgextern _X_EXPORT int 412f7df2e56SmrgDeliverEventsToWindow(DeviceIntPtr /* pWin */ , 413f7df2e56Smrg WindowPtr /* pWin */ , 414f7df2e56Smrg xEventPtr /* pEvents */ , 415f7df2e56Smrg int /* count */ , 416f7df2e56Smrg Mask /* filter */ , 417f7df2e56Smrg GrabPtr /* grab */ ); 418f7df2e56Smrg 419f7df2e56Smrgextern _X_EXPORT void 420f7df2e56SmrgDeliverRawEvent(RawDeviceEvent * /* ev */ , 421f7df2e56Smrg DeviceIntPtr /* dev */ 422f7df2e56Smrg ); 423f7df2e56Smrg 424f7df2e56Smrgextern int 425f7df2e56SmrgDeliverDeviceEvents(WindowPtr /* pWin */ , 426f7df2e56Smrg InternalEvent * /* event */ , 427f7df2e56Smrg GrabPtr /* grab */ , 428f7df2e56Smrg WindowPtr /* stopAt */ , 429f7df2e56Smrg DeviceIntPtr /* dev */ ); 430f7df2e56Smrg 431f7df2e56Smrgextern int 432f7df2e56SmrgDeliverOneGrabbedEvent(InternalEvent * /* event */ , 433f7df2e56Smrg DeviceIntPtr /* dev */ , 434f7df2e56Smrg enum InputLevel /* level */ ); 435f7df2e56Smrg 436f7df2e56Smrgextern void 437f7df2e56SmrgDeliverTouchEvents(DeviceIntPtr /* dev */ , 438f7df2e56Smrg TouchPointInfoPtr /* ti */ , 439f7df2e56Smrg InternalEvent * /* ev */ , 440f7df2e56Smrg XID /* resource */ ); 441f7df2e56Smrg 4425a112b11Smrgextern Bool 4435a112b11SmrgDeliverGestureEventToOwner(DeviceIntPtr dev, GestureInfoPtr gi, 4445a112b11Smrg InternalEvent *ev); 4455a112b11Smrg 446f7df2e56Smrgextern void 447f7df2e56SmrgInitializeSprite(DeviceIntPtr /* pDev */ , 448f7df2e56Smrg WindowPtr /* pWin */ ); 449f7df2e56Smrgextern void 450f7df2e56SmrgFreeSprite(DeviceIntPtr pDev); 451f7df2e56Smrg 452f7df2e56Smrgextern void 453f7df2e56SmrgUpdateSpriteForScreen(DeviceIntPtr /* pDev */ , 454f7df2e56Smrg ScreenPtr /* pScreen */ ); 455f7df2e56Smrg 456f7df2e56Smrgextern _X_EXPORT void 457f7df2e56SmrgWindowHasNewCursor(WindowPtr /* pWin */ ); 458f7df2e56Smrg 459f7df2e56Smrgextern Bool 460f7df2e56SmrgCheckDeviceGrabs(DeviceIntPtr /* device */ , 4615a112b11Smrg InternalEvent * /* event */ , 462f7df2e56Smrg WindowPtr /* ancestor */ ); 463f7df2e56Smrg 464f7df2e56Smrgextern void 465f7df2e56SmrgDeliverFocusedEvent(DeviceIntPtr /* keybd */ , 466f7df2e56Smrg InternalEvent * /* event */ , 467f7df2e56Smrg WindowPtr /* window */ ); 468f7df2e56Smrg 469f7df2e56Smrgextern int 470f7df2e56SmrgDeliverGrabbedEvent(InternalEvent * /* event */ , 471f7df2e56Smrg DeviceIntPtr /* thisDev */ , 472f7df2e56Smrg Bool /* deactivateGrab */ ); 473f7df2e56Smrg 4745a112b11Smrgextern void 4755a112b11SmrgFreezeThisEventIfNeededForSyncGrab(DeviceIntPtr thisDev, 4765a112b11Smrg InternalEvent *event); 4775a112b11Smrg 478f7df2e56Smrgextern void 479f7df2e56SmrgFixKeyState(DeviceEvent * /* event */ , 480f7df2e56Smrg DeviceIntPtr /* keybd */ ); 481f7df2e56Smrg 482f7df2e56Smrgextern void 483f7df2e56SmrgRecalculateDeliverableEvents(WindowPtr /* pWin */ ); 484f7df2e56Smrg 485f7df2e56Smrgextern _X_EXPORT int 486f7df2e56SmrgOtherClientGone(void *value, 487f7df2e56Smrg XID id); 488f7df2e56Smrg 489f7df2e56Smrgextern void 490f7df2e56SmrgDoFocusEvents(DeviceIntPtr /* dev */ , 491f7df2e56Smrg WindowPtr /* fromWin */ , 492f7df2e56Smrg WindowPtr /* toWin */ , 493f7df2e56Smrg int /* mode */ ); 494f7df2e56Smrg 495f7df2e56Smrgextern int 496f7df2e56SmrgSetInputFocus(ClientPtr /* client */ , 497f7df2e56Smrg DeviceIntPtr /* dev */ , 498f7df2e56Smrg Window /* focusID */ , 499f7df2e56Smrg CARD8 /* revertTo */ , 500f7df2e56Smrg Time /* ctime */ , 501f7df2e56Smrg Bool /* followOK */ ); 502f7df2e56Smrg 503f7df2e56Smrgextern int 504f7df2e56SmrgGrabDevice(ClientPtr /* client */ , 505f7df2e56Smrg DeviceIntPtr /* dev */ , 506f7df2e56Smrg unsigned /* this_mode */ , 507f7df2e56Smrg unsigned /* other_mode */ , 508f7df2e56Smrg Window /* grabWindow */ , 509f7df2e56Smrg unsigned /* ownerEvents */ , 510f7df2e56Smrg Time /* ctime */ , 511f7df2e56Smrg GrabMask * /* mask */ , 512f7df2e56Smrg int /* grabtype */ , 513f7df2e56Smrg Cursor /* curs */ , 514f7df2e56Smrg Window /* confineToWin */ , 515f7df2e56Smrg CARD8 * /* status */ ); 516f7df2e56Smrg 517f7df2e56Smrgextern void 518f7df2e56SmrgInitEvents(void); 519f7df2e56Smrg 520f7df2e56Smrgextern void 521f7df2e56SmrgCloseDownEvents(void); 522f7df2e56Smrg 523f7df2e56Smrgextern void 524f7df2e56SmrgDeleteWindowFromAnyEvents(WindowPtr /* pWin */ , 525f7df2e56Smrg Bool /* freeResources */ ); 526f7df2e56Smrg 527f7df2e56Smrgextern Mask 528f7df2e56SmrgEventMaskForClient(WindowPtr /* pWin */ , 529f7df2e56Smrg ClientPtr /* client */ ); 530f7df2e56Smrg 531f7df2e56Smrgextern _X_EXPORT int 532f7df2e56SmrgDeliverEvents(WindowPtr /*pWin */ , 533f7df2e56Smrg xEventPtr /*xE */ , 534f7df2e56Smrg int /*count */ , 535f7df2e56Smrg WindowPtr /*otherParent */ ); 536f7df2e56Smrg 537f7df2e56Smrgextern Bool 538f7df2e56SmrgCheckMotion(DeviceEvent * /* ev */ , 539f7df2e56Smrg DeviceIntPtr /* pDev */ ); 540f7df2e56Smrg 541f7df2e56Smrgextern _X_EXPORT void 542f7df2e56SmrgWriteEventsToClient(ClientPtr /*pClient */ , 543f7df2e56Smrg int /*count */ , 544f7df2e56Smrg xEventPtr /*events */ ); 545f7df2e56Smrg 546f7df2e56Smrgextern _X_EXPORT int 547f7df2e56SmrgTryClientEvents(ClientPtr /*client */ , 548f7df2e56Smrg DeviceIntPtr /* device */ , 549f7df2e56Smrg xEventPtr /*pEvents */ , 550f7df2e56Smrg int /*count */ , 551f7df2e56Smrg Mask /*mask */ , 552f7df2e56Smrg Mask /*filter */ , 553f7df2e56Smrg GrabPtr /*grab */ ); 554f7df2e56Smrg 555f7df2e56Smrgextern _X_EXPORT void 556f7df2e56SmrgWindowsRestructured(void); 557f7df2e56Smrg 558f7df2e56Smrgextern int 559f7df2e56SmrgSetClientPointer(ClientPtr /* client */ , 560f7df2e56Smrg DeviceIntPtr /* device */ ); 561f7df2e56Smrg 562f7df2e56Smrgextern _X_EXPORT DeviceIntPtr 563f7df2e56SmrgPickPointer(ClientPtr /* client */ ); 564f7df2e56Smrg 565f7df2e56Smrgextern _X_EXPORT DeviceIntPtr 566f7df2e56SmrgPickKeyboard(ClientPtr /* client */ ); 567f7df2e56Smrg 568f7df2e56Smrgextern Bool 569f7df2e56SmrgIsInterferingGrab(ClientPtr /* client */ , 570f7df2e56Smrg DeviceIntPtr /* dev */ , 571f7df2e56Smrg xEvent * /* events */ ); 5724642e01fSmrg 57305b261ecSmrg#ifdef PANORAMIX 574f7df2e56Smrgextern _X_EXPORT void 575f7df2e56SmrgReinitializeRootWindow(WindowPtr win, int xoff, int yoff); 57605b261ecSmrg#endif 57705b261ecSmrg 57805b261ecSmrg#ifdef RANDR 5796747b715Smrgextern _X_EXPORT void 580f7df2e56SmrgScreenRestructured(ScreenPtr pScreen); 58105b261ecSmrg#endif 58205b261ecSmrg 58305b261ecSmrg/* 58405b261ecSmrg * ServerGrabCallback stuff 58505b261ecSmrg */ 58605b261ecSmrg 5876747b715Smrgextern _X_EXPORT CallbackListPtr ServerGrabCallback; 58805b261ecSmrg 589f7df2e56Smrgtypedef enum { SERVER_GRABBED, SERVER_UNGRABBED, 590f7df2e56Smrg CLIENT_PERVIOUS, CLIENT_IMPERVIOUS 591f7df2e56Smrg} ServerGrabState; 59205b261ecSmrg 59305b261ecSmrgtypedef struct { 59405b261ecSmrg ClientPtr client; 59505b261ecSmrg ServerGrabState grabstate; 59605b261ecSmrg} ServerGrabInfoRec; 59705b261ecSmrg 59805b261ecSmrg/* 59905b261ecSmrg * EventCallback stuff 60005b261ecSmrg */ 60105b261ecSmrg 6026747b715Smrgextern _X_EXPORT CallbackListPtr EventCallback; 60305b261ecSmrg 60405b261ecSmrgtypedef struct { 60505b261ecSmrg ClientPtr client; 60605b261ecSmrg xEventPtr events; 60705b261ecSmrg int count; 60805b261ecSmrg} EventInfoRec; 60905b261ecSmrg 61005b261ecSmrg/* 61105b261ecSmrg * DeviceEventCallback stuff 61205b261ecSmrg */ 61305b261ecSmrg 6146747b715Smrgextern _X_EXPORT CallbackListPtr DeviceEventCallback; 61505b261ecSmrg 61605b261ecSmrgtypedef struct { 6176747b715Smrg InternalEvent *event; 6186747b715Smrg DeviceIntPtr device; 61905b261ecSmrg} DeviceEventInfoRec; 62005b261ecSmrg 6217e31ba66Smrgextern _X_EXPORT CallbackListPtr RootWindowFinalizeCallback; 6227e31ba66Smrg 623f7df2e56Smrgextern int 624f7df2e56SmrgXItoCoreType(int xi_type); 625f7df2e56Smrgextern Bool 626f7df2e56SmrgDevHasCursor(DeviceIntPtr pDev); 627f7df2e56Smrgextern _X_EXPORT Bool 628f7df2e56SmrgIsPointerDevice(DeviceIntPtr dev); 629f7df2e56Smrgextern _X_EXPORT Bool 630f7df2e56SmrgIsKeyboardDevice(DeviceIntPtr dev); 631f7df2e56Smrgextern Bool 632f7df2e56SmrgIsPointerEvent(InternalEvent *event); 633f7df2e56Smrgextern Bool 634f7df2e56SmrgIsTouchEvent(InternalEvent *event); 6355a112b11SmrgBool 6365a112b11SmrgIsGestureEvent(InternalEvent *event); 6375a112b11SmrgBool 6385a112b11SmrgIsGestureBeginEvent(InternalEvent *event); 6395a112b11SmrgBool 6405a112b11SmrgIsGestureEndEvent(InternalEvent *event); 6415a112b11Smrg 642f7df2e56Smrgextern _X_EXPORT Bool 643f7df2e56SmrgIsMaster(DeviceIntPtr dev); 644f7df2e56Smrgextern _X_EXPORT Bool 645f7df2e56SmrgIsFloating(DeviceIntPtr dev); 646f7df2e56Smrg 647f7df2e56Smrgextern _X_HIDDEN void 648f7df2e56SmrgCopyKeyClass(DeviceIntPtr device, DeviceIntPtr master); 649f7df2e56Smrgextern _X_HIDDEN int 650f7df2e56SmrgCorePointerProc(DeviceIntPtr dev, int what); 651f7df2e56Smrgextern _X_HIDDEN int 652f7df2e56SmrgCoreKeyboardProc(DeviceIntPtr dev, int what); 653f7df2e56Smrg 654f7df2e56Smrgextern _X_EXPORT void *lastGLContext; 655f7df2e56Smrg 656f7df2e56Smrg#endif /* DIX_H */ 657