dix.h revision b1d344b3
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
2505b261ecSmrg
2605b261ecSmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
2705b261ecSmrg
2805b261ecSmrg                        All Rights Reserved
2905b261ecSmrg
3005b261ecSmrgPermission to use, copy, modify, and distribute this software and its
3105b261ecSmrgdocumentation for any purpose and without fee is hereby granted,
3205b261ecSmrgprovided that the above copyright notice appear in all copies and that
3305b261ecSmrgboth that copyright notice and this permission notice appear in
3405b261ecSmrgsupporting documentation, and that the name of Digital not be
3505b261ecSmrgused in advertising or publicity pertaining to distribution of the
3605b261ecSmrgsoftware without specific, written prior permission.
3705b261ecSmrg
3805b261ecSmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
3905b261ecSmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
4005b261ecSmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
4105b261ecSmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
4205b261ecSmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
4305b261ecSmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
4405b261ecSmrgSOFTWARE.
4505b261ecSmrg
4605b261ecSmrg******************************************************************/
4705b261ecSmrg
4805b261ecSmrg#ifndef DIX_H
4905b261ecSmrg#define DIX_H
5005b261ecSmrg
5105b261ecSmrg#include "gc.h"
5205b261ecSmrg#include "window.h"
5305b261ecSmrg#include "input.h"
544642e01fSmrg#include "cursor.h"
554642e01fSmrg#include "geext.h"
564642e01fSmrg#include <X11/extensions/XI.h>
5705b261ecSmrg
5805b261ecSmrg#define EARLIER -1
5905b261ecSmrg#define SAMETIME 0
6005b261ecSmrg#define LATER 1
6105b261ecSmrg
6205b261ecSmrg#define NullClient ((ClientPtr) 0)
6305b261ecSmrg#define REQUEST(type) \
644642e01fSmrg	type *stuff = (type *)client->requestBuffer
6505b261ecSmrg
6605b261ecSmrg
6705b261ecSmrg#define REQUEST_SIZE_MATCH(req)\
6805b261ecSmrg    if ((sizeof(req) >> 2) != client->req_len)\
6905b261ecSmrg         return(BadLength)
7005b261ecSmrg
7105b261ecSmrg#define REQUEST_AT_LEAST_SIZE(req) \
7205b261ecSmrg    if ((sizeof(req) >> 2) > client->req_len )\
7305b261ecSmrg         return(BadLength)
7405b261ecSmrg
7505b261ecSmrg#define REQUEST_FIXED_SIZE(req, n)\
7605b261ecSmrg    if (((sizeof(req) >> 2) > client->req_len) || \
7705b261ecSmrg        (((sizeof(req) + (n) + 3) >> 2) != client->req_len)) \
7805b261ecSmrg         return(BadLength)
7905b261ecSmrg
8005b261ecSmrg#define LEGAL_NEW_RESOURCE(id,client)\
8105b261ecSmrg    if (!LegalNewID(id,client)) \
8205b261ecSmrg    {\
8305b261ecSmrg	client->errorValue = id;\
8405b261ecSmrg        return(BadIDChoice);\
8505b261ecSmrg    }
8605b261ecSmrg
874642e01fSmrg#define VALIDATE_DRAWABLE_AND_GC(drawID, pDraw, mode)\
8805b261ecSmrg    {\
894642e01fSmrg	int rc = dixLookupDrawable(&(pDraw), drawID, client, M_ANY, mode);\
9005b261ecSmrg	if (rc != Success)\
9105b261ecSmrg	    return rc;\
924642e01fSmrg	rc = dixLookupGC(&(pGC), stuff->gc, client, DixUseAccess);\
9305b261ecSmrg	if (rc != Success)\
9405b261ecSmrg	    return rc;\
9505b261ecSmrg	if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen))\
9605b261ecSmrg	    return (BadMatch);\
9705b261ecSmrg    }\
9805b261ecSmrg    if (pGC->serialNumber != pDraw->serialNumber)\
9905b261ecSmrg	ValidateGC(pDraw, pGC);
10005b261ecSmrg
10105b261ecSmrg
10205b261ecSmrg#define WriteReplyToClient(pClient, size, pReply) { \
10305b261ecSmrg   if ((pClient)->swapped) \
10405b261ecSmrg      (*ReplySwapVector[((xReq *)(pClient)->requestBuffer)->reqType]) \
10505b261ecSmrg           (pClient, (int)(size), pReply); \
10605b261ecSmrg      else (void) WriteToClient(pClient, (int)(size), (char *)(pReply)); }
10705b261ecSmrg
10805b261ecSmrg#define WriteSwappedDataToClient(pClient, size, pbuf) \
10905b261ecSmrg   if ((pClient)->swapped) \
11005b261ecSmrg      (*(pClient)->pSwapReplyFunc)(pClient, (int)(size), pbuf); \
11105b261ecSmrg   else (void) WriteToClient (pClient, (int)(size), (char *)(pbuf));
11205b261ecSmrg
11305b261ecSmrgtypedef struct _TimeStamp *TimeStampPtr;
11405b261ecSmrg
11505b261ecSmrg#ifndef _XTYPEDEF_CLIENTPTR
11605b261ecSmrgtypedef struct _Client *ClientPtr; /* also in misc.h */
11705b261ecSmrg#define _XTYPEDEF_CLIENTPTR
11805b261ecSmrg#endif
11905b261ecSmrg
12005b261ecSmrgtypedef struct _WorkQueue	*WorkQueuePtr;
12105b261ecSmrg
1224642e01fSmrgextern ClientPtr clients[MAXCLIENTS];
12305b261ecSmrgextern ClientPtr serverClient;
12405b261ecSmrgextern int currentMaxClients;
12505b261ecSmrgextern char dispatchExceptionAtReset;
12605b261ecSmrg
12705b261ecSmrgtypedef int HWEventQueueType;
12805b261ecSmrgtypedef HWEventQueueType* HWEventQueuePtr;
12905b261ecSmrg
13005b261ecSmrgextern HWEventQueuePtr checkForInput[2];
13105b261ecSmrg
13205b261ecSmrgtypedef struct _TimeStamp {
13305b261ecSmrg    CARD32 months;	/* really ~49.7 days */
13405b261ecSmrg    CARD32 milliseconds;
13505b261ecSmrg}           TimeStamp;
13605b261ecSmrg
13705b261ecSmrg/* dispatch.c */
13805b261ecSmrg
13905b261ecSmrgextern void SetInputCheck(
14005b261ecSmrg    HWEventQueuePtr /*c0*/,
14105b261ecSmrg    HWEventQueuePtr /*c1*/);
14205b261ecSmrg
14305b261ecSmrgextern void CloseDownClient(
14405b261ecSmrg    ClientPtr /*client*/);
14505b261ecSmrg
14605b261ecSmrgextern void UpdateCurrentTime(void);
14705b261ecSmrg
14805b261ecSmrgextern void UpdateCurrentTimeIf(void);
14905b261ecSmrg
15005b261ecSmrgextern int dixDestroyPixmap(
15105b261ecSmrg    pointer /*value*/,
15205b261ecSmrg    XID /*pid*/);
15305b261ecSmrg
15405b261ecSmrgextern void InitClient(
15505b261ecSmrg    ClientPtr /*client*/,
15605b261ecSmrg    int /*i*/,
15705b261ecSmrg    pointer /*ospriv*/);
15805b261ecSmrg
15905b261ecSmrgextern ClientPtr NextAvailableClient(
16005b261ecSmrg    pointer /*ospriv*/);
16105b261ecSmrg
16205b261ecSmrgextern void SendErrorToClient(
16305b261ecSmrg    ClientPtr /*client*/,
16405b261ecSmrg    unsigned int /*majorCode*/,
16505b261ecSmrg    unsigned int /*minorCode*/,
16605b261ecSmrg    XID /*resId*/,
16705b261ecSmrg    int /*errorCode*/);
16805b261ecSmrg
16905b261ecSmrgextern void MarkClientException(
17005b261ecSmrg    ClientPtr /*client*/);
17105b261ecSmrg
17205b261ecSmrgextern void ddxBeforeReset (void);
17305b261ecSmrg
17405b261ecSmrg/* dixutils.c */
17505b261ecSmrg
17605b261ecSmrgextern void CopyISOLatin1Lowered(
17705b261ecSmrg    unsigned char * /*dest*/,
17805b261ecSmrg    unsigned char * /*source*/,
17905b261ecSmrg    int /*length*/);
18005b261ecSmrg
18105b261ecSmrgextern int CompareISOLatin1Lowered(
18205b261ecSmrg    unsigned char * /*a*/,
18305b261ecSmrg    int alen,
18405b261ecSmrg    unsigned char * /*b*/,
18505b261ecSmrg    int blen);
18605b261ecSmrg
18705b261ecSmrgextern int dixLookupWindow(
18805b261ecSmrg    WindowPtr *result,
18905b261ecSmrg    XID id,
19005b261ecSmrg    ClientPtr client,
19105b261ecSmrg    Mask access_mode);
19205b261ecSmrg
19305b261ecSmrgextern int dixLookupDrawable(
19405b261ecSmrg    DrawablePtr *result,
19505b261ecSmrg    XID id,
19605b261ecSmrg    ClientPtr client,
19705b261ecSmrg    Mask type_mask,
19805b261ecSmrg    Mask access_mode);
19905b261ecSmrg
20005b261ecSmrgextern int dixLookupGC(
20105b261ecSmrg    GCPtr *result,
20205b261ecSmrg    XID id,
20305b261ecSmrg    ClientPtr client,
20405b261ecSmrg    Mask access_mode);
20505b261ecSmrg
20605b261ecSmrgextern int dixLookupClient(
20705b261ecSmrg    ClientPtr *result,
20805b261ecSmrg    XID id,
20905b261ecSmrg    ClientPtr client,
21005b261ecSmrg    Mask access_mode);
21105b261ecSmrg
21205b261ecSmrgextern void NoopDDA(void);
21305b261ecSmrg
21405b261ecSmrgextern int AlterSaveSetForClient(
21505b261ecSmrg    ClientPtr /*client*/,
21605b261ecSmrg    WindowPtr /*pWin*/,
21705b261ecSmrg    unsigned /*mode*/,
21805b261ecSmrg    Bool /*toRoot*/,
2194642e01fSmrg    Bool /*map*/);
22005b261ecSmrg
22105b261ecSmrgextern void DeleteWindowFromAnySaveSet(
22205b261ecSmrg    WindowPtr /*pWin*/);
22305b261ecSmrg
22405b261ecSmrgextern void BlockHandler(
22505b261ecSmrg    pointer /*pTimeout*/,
22605b261ecSmrg    pointer /*pReadmask*/);
22705b261ecSmrg
22805b261ecSmrgextern void WakeupHandler(
22905b261ecSmrg    int /*result*/,
23005b261ecSmrg    pointer /*pReadmask*/);
23105b261ecSmrg
232b1d344b3Smrgvoid
233b1d344b3SmrgEnableLimitedSchedulingLatency(void);
234b1d344b3Smrg
235b1d344b3Smrgvoid
236b1d344b3SmrgDisableLimitedSchedulingLatency(void);
237b1d344b3Smrg
23805b261ecSmrgtypedef void (* WakeupHandlerProcPtr)(
23905b261ecSmrg    pointer /* blockData */,
24005b261ecSmrg    int /* result */,
24105b261ecSmrg    pointer /* pReadmask */);
24205b261ecSmrg
24305b261ecSmrgextern Bool RegisterBlockAndWakeupHandlers(
24405b261ecSmrg    BlockHandlerProcPtr /*blockHandler*/,
24505b261ecSmrg    WakeupHandlerProcPtr /*wakeupHandler*/,
24605b261ecSmrg    pointer /*blockData*/);
24705b261ecSmrg
24805b261ecSmrgextern void RemoveBlockAndWakeupHandlers(
24905b261ecSmrg    BlockHandlerProcPtr /*blockHandler*/,
25005b261ecSmrg    WakeupHandlerProcPtr /*wakeupHandler*/,
25105b261ecSmrg    pointer /*blockData*/);
25205b261ecSmrg
25305b261ecSmrgextern void InitBlockAndWakeupHandlers(void);
25405b261ecSmrg
25505b261ecSmrgextern void ProcessWorkQueue(void);
25605b261ecSmrg
25705b261ecSmrgextern void ProcessWorkQueueZombies(void);
25805b261ecSmrg
25905b261ecSmrgextern Bool QueueWorkProc(
26005b261ecSmrg    Bool (* /*function*/)(
26105b261ecSmrg        ClientPtr /*clientUnused*/,
26205b261ecSmrg        pointer /*closure*/),
26305b261ecSmrg    ClientPtr /*client*/,
26405b261ecSmrg    pointer /*closure*/
26505b261ecSmrg);
26605b261ecSmrg
26705b261ecSmrgtypedef Bool (* ClientSleepProcPtr)(
26805b261ecSmrg    ClientPtr /*client*/,
26905b261ecSmrg    pointer /*closure*/);
27005b261ecSmrg
27105b261ecSmrgextern Bool ClientSleep(
27205b261ecSmrg    ClientPtr /*client*/,
27305b261ecSmrg    ClientSleepProcPtr /* function */,
27405b261ecSmrg    pointer /*closure*/);
27505b261ecSmrg
27605b261ecSmrg#ifndef ___CLIENTSIGNAL_DEFINED___
27705b261ecSmrg#define ___CLIENTSIGNAL_DEFINED___
27805b261ecSmrgextern Bool ClientSignal(
27905b261ecSmrg    ClientPtr /*client*/);
28005b261ecSmrg#endif /* ___CLIENTSIGNAL_DEFINED___ */
28105b261ecSmrg
28205b261ecSmrgextern void ClientWakeup(
28305b261ecSmrg    ClientPtr /*client*/);
28405b261ecSmrg
28505b261ecSmrgextern Bool ClientIsAsleep(
28605b261ecSmrg    ClientPtr /*client*/);
28705b261ecSmrg
28805b261ecSmrg/* atom.c */
28905b261ecSmrg
29005b261ecSmrgextern Atom MakeAtom(
29105b261ecSmrg    char * /*string*/,
29205b261ecSmrg    unsigned /*len*/,
29305b261ecSmrg    Bool /*makeit*/);
29405b261ecSmrg
29505b261ecSmrgextern Bool ValidAtom(
29605b261ecSmrg    Atom /*atom*/);
29705b261ecSmrg
29805b261ecSmrgextern char *NameForAtom(
29905b261ecSmrg    Atom /*atom*/);
30005b261ecSmrg
30105b261ecSmrgextern void AtomError(void);
30205b261ecSmrg
30305b261ecSmrgextern void FreeAllAtoms(void);
30405b261ecSmrg
30505b261ecSmrgextern void InitAtoms(void);
30605b261ecSmrg
30705b261ecSmrg/* main.c */
30805b261ecSmrg
30905b261ecSmrgextern void SetVendorRelease(int release);
31005b261ecSmrg
31105b261ecSmrgextern void SetVendorString(char *string);
31205b261ecSmrg
31305b261ecSmrg/* events.c */
31405b261ecSmrg
31505b261ecSmrgextern void SetMaskForEvent(
3164642e01fSmrg    int /* deviceid */,
31705b261ecSmrg    Mask /* mask */,
31805b261ecSmrg    int /* event */);
31905b261ecSmrg
3204642e01fSmrgextern void ConfineToShape(
3214642e01fSmrg    DeviceIntPtr /* pDev */,
3224642e01fSmrg    RegionPtr /* shape */,
3234642e01fSmrg    int*      /* px */,
3244642e01fSmrg    int*      /* py */);
32505b261ecSmrg
32605b261ecSmrgextern Bool IsParent(
32705b261ecSmrg    WindowPtr /* maybeparent */,
32805b261ecSmrg    WindowPtr /* child */);
32905b261ecSmrg
3304642e01fSmrgextern WindowPtr GetCurrentRootWindow(DeviceIntPtr pDev);
33105b261ecSmrg
3324642e01fSmrgextern WindowPtr GetSpriteWindow(DeviceIntPtr pDev);
33305b261ecSmrg
33405b261ecSmrg
33505b261ecSmrgextern void NoticeEventTime(xEventPtr /* xE */);
33605b261ecSmrg
33705b261ecSmrgextern void EnqueueEvent(
33805b261ecSmrg    xEventPtr /* xE */,
33905b261ecSmrg    DeviceIntPtr /* device */,
34005b261ecSmrg    int	/* count */);
34105b261ecSmrg
34205b261ecSmrgextern void ActivatePointerGrab(
34305b261ecSmrg    DeviceIntPtr /* mouse */,
34405b261ecSmrg    GrabPtr /* grab */,
34505b261ecSmrg    TimeStamp /* time */,
34605b261ecSmrg    Bool /* autoGrab */);
34705b261ecSmrg
34805b261ecSmrgextern void DeactivatePointerGrab(
34905b261ecSmrg    DeviceIntPtr /* mouse */);
35005b261ecSmrg
35105b261ecSmrgextern void ActivateKeyboardGrab(
35205b261ecSmrg    DeviceIntPtr /* keybd */,
35305b261ecSmrg    GrabPtr /* grab */,
35405b261ecSmrg    TimeStamp /* time */,
35505b261ecSmrg    Bool /* passive */);
35605b261ecSmrg
35705b261ecSmrgextern void DeactivateKeyboardGrab(
35805b261ecSmrg    DeviceIntPtr /* keybd */);
35905b261ecSmrg
36005b261ecSmrgextern void AllowSome(
36105b261ecSmrg    ClientPtr	/* client */,
36205b261ecSmrg    TimeStamp /* time */,
36305b261ecSmrg    DeviceIntPtr /* thisDev */,
3644642e01fSmrg    int /* newState */,
3654642e01fSmrg    Bool /* core */);
36605b261ecSmrg
36705b261ecSmrgextern void ReleaseActiveGrabs(
36805b261ecSmrg    ClientPtr client);
36905b261ecSmrg
37005b261ecSmrgextern int DeliverEventsToWindow(
3714642e01fSmrg    DeviceIntPtr /* pWin */,
37205b261ecSmrg    WindowPtr /* pWin */,
37305b261ecSmrg    xEventPtr /* pEvents */,
37405b261ecSmrg    int /* count */,
37505b261ecSmrg    Mask /* filter */,
37605b261ecSmrg    GrabPtr /* grab */,
37705b261ecSmrg    int /* mskidx */);
37805b261ecSmrg
37905b261ecSmrgextern int DeliverDeviceEvents(
38005b261ecSmrg    WindowPtr /* pWin */,
38105b261ecSmrg    xEventPtr /* xE */,
38205b261ecSmrg    GrabPtr /* grab */,
38305b261ecSmrg    WindowPtr /* stopAt */,
38405b261ecSmrg    DeviceIntPtr /* dev */,
38505b261ecSmrg    int /* count */);
38605b261ecSmrg
38705b261ecSmrgextern void DefineInitialRootWindow(
38805b261ecSmrg    WindowPtr /* win */);
38905b261ecSmrg
3904642e01fSmrgextern void SetupSprite(
3914642e01fSmrg    DeviceIntPtr /* pDev */,
3924642e01fSmrg    ScreenPtr    /* pScreen */);
3934642e01fSmrg
3944642e01fSmrgextern void InitializeSprite(
3954642e01fSmrg    DeviceIntPtr /* pDev */,
3964642e01fSmrg    WindowPtr    /* pWin */);
3974642e01fSmrg
3984642e01fSmrgextern void UpdateSpriteForScreen(
3994642e01fSmrg    DeviceIntPtr /* pDev */,
4004642e01fSmrg    ScreenPtr /* pScreen */);
4014642e01fSmrg
40205b261ecSmrgextern void WindowHasNewCursor(
40305b261ecSmrg    WindowPtr /* pWin */);
40405b261ecSmrg
40505b261ecSmrgextern Bool CheckDeviceGrabs(
40605b261ecSmrg    DeviceIntPtr /* device */,
40705b261ecSmrg    xEventPtr /* xE */,
40805b261ecSmrg    int /* checkFirst */,
40905b261ecSmrg    int /* count */);
41005b261ecSmrg
41105b261ecSmrgextern void DeliverFocusedEvent(
41205b261ecSmrg    DeviceIntPtr /* keybd */,
41305b261ecSmrg    xEventPtr /* xE */,
41405b261ecSmrg    WindowPtr /* window */,
41505b261ecSmrg    int /* count */);
41605b261ecSmrg
41705b261ecSmrgextern void DeliverGrabbedEvent(
41805b261ecSmrg    xEventPtr /* xE */,
41905b261ecSmrg    DeviceIntPtr /* thisDev */,
42005b261ecSmrg    Bool /* deactivateGrab */,
42105b261ecSmrg    int /* count */);
42205b261ecSmrg
42305b261ecSmrg#ifdef XKB
42405b261ecSmrgextern void FixKeyState(
42505b261ecSmrg    xEvent * /* xE */,
42605b261ecSmrg    DeviceIntPtr /* keybd */);
42705b261ecSmrg#endif /* XKB */
42805b261ecSmrg
42905b261ecSmrgextern void RecalculateDeliverableEvents(
43005b261ecSmrg    WindowPtr /* pWin */);
43105b261ecSmrg
43205b261ecSmrgextern int OtherClientGone(
43305b261ecSmrg    pointer /* value */,
43405b261ecSmrg    XID /* id */);
43505b261ecSmrg
43605b261ecSmrgextern void DoFocusEvents(
43705b261ecSmrg    DeviceIntPtr /* dev */,
43805b261ecSmrg    WindowPtr /* fromWin */,
43905b261ecSmrg    WindowPtr /* toWin */,
44005b261ecSmrg    int /* mode */);
44105b261ecSmrg
44205b261ecSmrgextern int SetInputFocus(
44305b261ecSmrg    ClientPtr /* client */,
44405b261ecSmrg    DeviceIntPtr /* dev */,
44505b261ecSmrg    Window /* focusID */,
44605b261ecSmrg    CARD8 /* revertTo */,
44705b261ecSmrg    Time /* ctime */,
44805b261ecSmrg    Bool /* followOK */);
44905b261ecSmrg
45005b261ecSmrgextern int GrabDevice(
45105b261ecSmrg    ClientPtr /* client */,
45205b261ecSmrg    DeviceIntPtr /* dev */,
45305b261ecSmrg    unsigned /* this_mode */,
45405b261ecSmrg    unsigned /* other_mode */,
45505b261ecSmrg    Window /* grabWindow */,
45605b261ecSmrg    unsigned /* ownerEvents */,
45705b261ecSmrg    Time /* ctime */,
45805b261ecSmrg    Mask /* mask */,
4594642e01fSmrg    CARD8 * /* status */,
4604642e01fSmrg    Bool /* coreGrab */);
46105b261ecSmrg
46205b261ecSmrgextern void InitEvents(void);
4634642e01fSmrgextern void InitSprite(
4644642e01fSmrg        DeviceIntPtr /* pDev */,
4654642e01fSmrg        Bool /* hasCursor */
4664642e01fSmrg        );
46705b261ecSmrg
46805b261ecSmrgextern void CloseDownEvents(void);
46905b261ecSmrg
47005b261ecSmrgextern void DeleteWindowFromAnyEvents(
47105b261ecSmrg    WindowPtr	/* pWin */,
47205b261ecSmrg    Bool /* freeResources */);
47305b261ecSmrg
47405b261ecSmrg
47505b261ecSmrgextern Mask EventMaskForClient(
47605b261ecSmrg    WindowPtr /* pWin */,
47705b261ecSmrg    ClientPtr /* client */);
47805b261ecSmrg
47905b261ecSmrg
48005b261ecSmrg
48105b261ecSmrgextern int DeliverEvents(
48205b261ecSmrg    WindowPtr /*pWin*/,
48305b261ecSmrg    xEventPtr /*xE*/,
48405b261ecSmrg    int /*count*/,
48505b261ecSmrg    WindowPtr /*otherParent*/);
48605b261ecSmrg
4874642e01fSmrgextern Bool
4884642e01fSmrgCheckMotion(
4894642e01fSmrg    xEvent* /* xE */,
4904642e01fSmrg    DeviceIntPtr /* pDev */);
49105b261ecSmrg
49205b261ecSmrgextern void WriteEventsToClient(
49305b261ecSmrg    ClientPtr /*pClient*/,
49405b261ecSmrg    int	     /*count*/,
49505b261ecSmrg    xEventPtr /*events*/);
49605b261ecSmrg
49705b261ecSmrgextern int TryClientEvents(
49805b261ecSmrg    ClientPtr /*client*/,
4994642e01fSmrg    DeviceIntPtr /* device */,
50005b261ecSmrg    xEventPtr /*pEvents*/,
50105b261ecSmrg    int /*count*/,
50205b261ecSmrg    Mask /*mask*/,
50305b261ecSmrg    Mask /*filter*/,
50405b261ecSmrg    GrabPtr /*grab*/);
50505b261ecSmrg
50605b261ecSmrgextern void WindowsRestructured(void);
50705b261ecSmrg
5084642e01fSmrgextern Bool SetClientPointer(
5094642e01fSmrg        ClientPtr /* client */,
5104642e01fSmrg        ClientPtr /* setter */,
5114642e01fSmrg        DeviceIntPtr /* device */);
5124642e01fSmrg
5134642e01fSmrgextern DeviceIntPtr PickPointer(
5144642e01fSmrg    ClientPtr /* client */);
5154642e01fSmrg
5164642e01fSmrgextern DeviceIntPtr PickKeyboard(
5174642e01fSmrg    ClientPtr /* client */);
5184642e01fSmrg
5194642e01fSmrgextern Bool IsInterferingGrab(
5204642e01fSmrg        ClientPtr /* client */,
5214642e01fSmrg        DeviceIntPtr /* dev */,
5224642e01fSmrg        xEvent* /* events */);
5234642e01fSmrg
52405b261ecSmrg#ifdef PANORAMIX
52505b261ecSmrgextern void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff);
52605b261ecSmrg#endif
52705b261ecSmrg
52805b261ecSmrg#ifdef RANDR
52905b261ecSmrgvoid
53005b261ecSmrgScreenRestructured (ScreenPtr pScreen);
53105b261ecSmrg#endif
53205b261ecSmrg
53305b261ecSmrgextern int ffs(int i);
53405b261ecSmrg
53505b261ecSmrg/*
53605b261ecSmrg *  callback manager stuff
53705b261ecSmrg */
53805b261ecSmrg
53905b261ecSmrg#ifndef _XTYPEDEF_CALLBACKLISTPTR
54005b261ecSmrgtypedef struct _CallbackList *CallbackListPtr; /* also in misc.h */
54105b261ecSmrg#define _XTYPEDEF_CALLBACKLISTPTR
54205b261ecSmrg#endif
54305b261ecSmrg
54405b261ecSmrgtypedef void (*CallbackProcPtr) (
54505b261ecSmrg    CallbackListPtr *, pointer, pointer);
54605b261ecSmrg
54705b261ecSmrgextern Bool AddCallback(
54805b261ecSmrg    CallbackListPtr * /*pcbl*/,
54905b261ecSmrg    CallbackProcPtr /*callback*/,
55005b261ecSmrg    pointer /*data*/);
55105b261ecSmrg
55205b261ecSmrgextern Bool DeleteCallback(
55305b261ecSmrg    CallbackListPtr * /*pcbl*/,
55405b261ecSmrg    CallbackProcPtr /*callback*/,
55505b261ecSmrg    pointer /*data*/);
55605b261ecSmrg
55705b261ecSmrgextern void CallCallbacks(
55805b261ecSmrg    CallbackListPtr * /*pcbl*/,
55905b261ecSmrg    pointer /*call_data*/);
56005b261ecSmrg
56105b261ecSmrgextern void DeleteCallbackList(
56205b261ecSmrg    CallbackListPtr * /*pcbl*/);
56305b261ecSmrg
56405b261ecSmrgextern void InitCallbackManager(void);
56505b261ecSmrg
56605b261ecSmrg/*
56705b261ecSmrg *  ServerGrabCallback stuff
56805b261ecSmrg */
56905b261ecSmrg
57005b261ecSmrgextern CallbackListPtr ServerGrabCallback;
57105b261ecSmrg
57205b261ecSmrgtypedef enum {SERVER_GRABBED, SERVER_UNGRABBED,
57305b261ecSmrg	      CLIENT_PERVIOUS, CLIENT_IMPERVIOUS } ServerGrabState;
57405b261ecSmrg
57505b261ecSmrgtypedef struct {
57605b261ecSmrg    ClientPtr client;
57705b261ecSmrg    ServerGrabState grabstate;
57805b261ecSmrg} ServerGrabInfoRec;
57905b261ecSmrg
58005b261ecSmrg/*
58105b261ecSmrg *  EventCallback stuff
58205b261ecSmrg */
58305b261ecSmrg
58405b261ecSmrgextern CallbackListPtr EventCallback;
58505b261ecSmrg
58605b261ecSmrgtypedef struct {
58705b261ecSmrg    ClientPtr client;
58805b261ecSmrg    xEventPtr events;
58905b261ecSmrg    int count;
59005b261ecSmrg} EventInfoRec;
59105b261ecSmrg
59205b261ecSmrg/*
59305b261ecSmrg *  DeviceEventCallback stuff
59405b261ecSmrg */
59505b261ecSmrg
59605b261ecSmrgextern CallbackListPtr DeviceEventCallback;
59705b261ecSmrg
59805b261ecSmrgtypedef struct {
59905b261ecSmrg    xEventPtr events;
60005b261ecSmrg    int count;
60105b261ecSmrg} DeviceEventInfoRec;
60205b261ecSmrg
6034642e01fSmrgextern int XItoCoreType(int xi_type);
6044642e01fSmrgextern Bool DevHasCursor(DeviceIntPtr pDev);
6054642e01fSmrgextern Bool IsPointerDevice( DeviceIntPtr dev);
6064642e01fSmrgextern Bool IsKeyboardDevice(DeviceIntPtr dev);
6074642e01fSmrgextern Bool IsPointerEvent(xEvent* xE);
6084642e01fSmrg
60905b261ecSmrg/*
6104642e01fSmrg * These are deprecated compatibility functions and will be removed soon!
6114642e01fSmrg * Please use the noted replacements instead.
61205b261ecSmrg */
6134642e01fSmrg/* replaced by dixLookupWindow */
6144642e01fSmrgextern WindowPtr SecurityLookupWindow(
6154642e01fSmrg    XID id,
6164642e01fSmrg    ClientPtr client,
6174642e01fSmrg    Mask access_mode);
6184642e01fSmrg/* replaced by dixLookupWindow */
6194642e01fSmrgextern WindowPtr LookupWindow(
6204642e01fSmrg    XID id,
6214642e01fSmrg    ClientPtr client);
62205b261ecSmrg
6234642e01fSmrg/* replaced by dixLookupDrawable */
6244642e01fSmrgextern pointer SecurityLookupDrawable(
6254642e01fSmrg    XID id,
6264642e01fSmrg    ClientPtr client,
6274642e01fSmrg    Mask access_mode);
62805b261ecSmrg
6294642e01fSmrg/* replaced by dixLookupDrawable */
6304642e01fSmrgextern pointer LookupDrawable(
6314642e01fSmrg    XID id,
6324642e01fSmrg    ClientPtr client);
63305b261ecSmrg
6344642e01fSmrg/* replaced by dixLookupClient */
6354642e01fSmrgextern ClientPtr LookupClient(
6364642e01fSmrg    XID id,
6374642e01fSmrg    ClientPtr client);
63805b261ecSmrg
6394642e01fSmrg/* GE stuff */
6404642e01fSmrgextern void SetGenericFilter(int extension, Mask* filters);
6414642e01fSmrgextern int ExtGrabDevice(ClientPtr client,
6424642e01fSmrg                         DeviceIntPtr dev,
6434642e01fSmrg                         int device_mode,
6444642e01fSmrg                         WindowPtr grabWindow,
6454642e01fSmrg                         WindowPtr confineTo,
6464642e01fSmrg                         TimeStamp ctime,
6474642e01fSmrg                         Bool ownerEvents,
6484642e01fSmrg                         CursorPtr cursor,
6494642e01fSmrg                         Mask xi_mask,
6504642e01fSmrg                         GenericMaskPtr ge_masks);
65105b261ecSmrg#endif /* DIX_H */
652