dix.h revision 4642e01f
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
23205b261ecSmrgtypedef void (* WakeupHandlerProcPtr)(
23305b261ecSmrg    pointer /* blockData */,
23405b261ecSmrg    int /* result */,
23505b261ecSmrg    pointer /* pReadmask */);
23605b261ecSmrg
23705b261ecSmrgextern Bool RegisterBlockAndWakeupHandlers(
23805b261ecSmrg    BlockHandlerProcPtr /*blockHandler*/,
23905b261ecSmrg    WakeupHandlerProcPtr /*wakeupHandler*/,
24005b261ecSmrg    pointer /*blockData*/);
24105b261ecSmrg
24205b261ecSmrgextern void RemoveBlockAndWakeupHandlers(
24305b261ecSmrg    BlockHandlerProcPtr /*blockHandler*/,
24405b261ecSmrg    WakeupHandlerProcPtr /*wakeupHandler*/,
24505b261ecSmrg    pointer /*blockData*/);
24605b261ecSmrg
24705b261ecSmrgextern void InitBlockAndWakeupHandlers(void);
24805b261ecSmrg
24905b261ecSmrgextern void ProcessWorkQueue(void);
25005b261ecSmrg
25105b261ecSmrgextern void ProcessWorkQueueZombies(void);
25205b261ecSmrg
25305b261ecSmrgextern Bool QueueWorkProc(
25405b261ecSmrg    Bool (* /*function*/)(
25505b261ecSmrg        ClientPtr /*clientUnused*/,
25605b261ecSmrg        pointer /*closure*/),
25705b261ecSmrg    ClientPtr /*client*/,
25805b261ecSmrg    pointer /*closure*/
25905b261ecSmrg);
26005b261ecSmrg
26105b261ecSmrgtypedef Bool (* ClientSleepProcPtr)(
26205b261ecSmrg    ClientPtr /*client*/,
26305b261ecSmrg    pointer /*closure*/);
26405b261ecSmrg
26505b261ecSmrgextern Bool ClientSleep(
26605b261ecSmrg    ClientPtr /*client*/,
26705b261ecSmrg    ClientSleepProcPtr /* function */,
26805b261ecSmrg    pointer /*closure*/);
26905b261ecSmrg
27005b261ecSmrg#ifndef ___CLIENTSIGNAL_DEFINED___
27105b261ecSmrg#define ___CLIENTSIGNAL_DEFINED___
27205b261ecSmrgextern Bool ClientSignal(
27305b261ecSmrg    ClientPtr /*client*/);
27405b261ecSmrg#endif /* ___CLIENTSIGNAL_DEFINED___ */
27505b261ecSmrg
27605b261ecSmrgextern void ClientWakeup(
27705b261ecSmrg    ClientPtr /*client*/);
27805b261ecSmrg
27905b261ecSmrgextern Bool ClientIsAsleep(
28005b261ecSmrg    ClientPtr /*client*/);
28105b261ecSmrg
28205b261ecSmrg/* atom.c */
28305b261ecSmrg
28405b261ecSmrgextern Atom MakeAtom(
28505b261ecSmrg    char * /*string*/,
28605b261ecSmrg    unsigned /*len*/,
28705b261ecSmrg    Bool /*makeit*/);
28805b261ecSmrg
28905b261ecSmrgextern Bool ValidAtom(
29005b261ecSmrg    Atom /*atom*/);
29105b261ecSmrg
29205b261ecSmrgextern char *NameForAtom(
29305b261ecSmrg    Atom /*atom*/);
29405b261ecSmrg
29505b261ecSmrgextern void AtomError(void);
29605b261ecSmrg
29705b261ecSmrgextern void FreeAllAtoms(void);
29805b261ecSmrg
29905b261ecSmrgextern void InitAtoms(void);
30005b261ecSmrg
30105b261ecSmrg/* main.c */
30205b261ecSmrg
30305b261ecSmrgextern void SetVendorRelease(int release);
30405b261ecSmrg
30505b261ecSmrgextern void SetVendorString(char *string);
30605b261ecSmrg
30705b261ecSmrg/* events.c */
30805b261ecSmrg
30905b261ecSmrgextern void SetMaskForEvent(
3104642e01fSmrg    int /* deviceid */,
31105b261ecSmrg    Mask /* mask */,
31205b261ecSmrg    int /* event */);
31305b261ecSmrg
3144642e01fSmrgextern void ConfineToShape(
3154642e01fSmrg    DeviceIntPtr /* pDev */,
3164642e01fSmrg    RegionPtr /* shape */,
3174642e01fSmrg    int*      /* px */,
3184642e01fSmrg    int*      /* py */);
31905b261ecSmrg
32005b261ecSmrgextern Bool IsParent(
32105b261ecSmrg    WindowPtr /* maybeparent */,
32205b261ecSmrg    WindowPtr /* child */);
32305b261ecSmrg
3244642e01fSmrgextern WindowPtr GetCurrentRootWindow(DeviceIntPtr pDev);
32505b261ecSmrg
3264642e01fSmrgextern WindowPtr GetSpriteWindow(DeviceIntPtr pDev);
32705b261ecSmrg
32805b261ecSmrg
32905b261ecSmrgextern void NoticeEventTime(xEventPtr /* xE */);
33005b261ecSmrg
33105b261ecSmrgextern void EnqueueEvent(
33205b261ecSmrg    xEventPtr /* xE */,
33305b261ecSmrg    DeviceIntPtr /* device */,
33405b261ecSmrg    int	/* count */);
33505b261ecSmrg
33605b261ecSmrgextern void ActivatePointerGrab(
33705b261ecSmrg    DeviceIntPtr /* mouse */,
33805b261ecSmrg    GrabPtr /* grab */,
33905b261ecSmrg    TimeStamp /* time */,
34005b261ecSmrg    Bool /* autoGrab */);
34105b261ecSmrg
34205b261ecSmrgextern void DeactivatePointerGrab(
34305b261ecSmrg    DeviceIntPtr /* mouse */);
34405b261ecSmrg
34505b261ecSmrgextern void ActivateKeyboardGrab(
34605b261ecSmrg    DeviceIntPtr /* keybd */,
34705b261ecSmrg    GrabPtr /* grab */,
34805b261ecSmrg    TimeStamp /* time */,
34905b261ecSmrg    Bool /* passive */);
35005b261ecSmrg
35105b261ecSmrgextern void DeactivateKeyboardGrab(
35205b261ecSmrg    DeviceIntPtr /* keybd */);
35305b261ecSmrg
35405b261ecSmrgextern void AllowSome(
35505b261ecSmrg    ClientPtr	/* client */,
35605b261ecSmrg    TimeStamp /* time */,
35705b261ecSmrg    DeviceIntPtr /* thisDev */,
3584642e01fSmrg    int /* newState */,
3594642e01fSmrg    Bool /* core */);
36005b261ecSmrg
36105b261ecSmrgextern void ReleaseActiveGrabs(
36205b261ecSmrg    ClientPtr client);
36305b261ecSmrg
36405b261ecSmrgextern int DeliverEventsToWindow(
3654642e01fSmrg    DeviceIntPtr /* pWin */,
36605b261ecSmrg    WindowPtr /* pWin */,
36705b261ecSmrg    xEventPtr /* pEvents */,
36805b261ecSmrg    int /* count */,
36905b261ecSmrg    Mask /* filter */,
37005b261ecSmrg    GrabPtr /* grab */,
37105b261ecSmrg    int /* mskidx */);
37205b261ecSmrg
37305b261ecSmrgextern int DeliverDeviceEvents(
37405b261ecSmrg    WindowPtr /* pWin */,
37505b261ecSmrg    xEventPtr /* xE */,
37605b261ecSmrg    GrabPtr /* grab */,
37705b261ecSmrg    WindowPtr /* stopAt */,
37805b261ecSmrg    DeviceIntPtr /* dev */,
37905b261ecSmrg    int /* count */);
38005b261ecSmrg
38105b261ecSmrgextern void DefineInitialRootWindow(
38205b261ecSmrg    WindowPtr /* win */);
38305b261ecSmrg
3844642e01fSmrgextern void SetupSprite(
3854642e01fSmrg    DeviceIntPtr /* pDev */,
3864642e01fSmrg    ScreenPtr    /* pScreen */);
3874642e01fSmrg
3884642e01fSmrgextern void InitializeSprite(
3894642e01fSmrg    DeviceIntPtr /* pDev */,
3904642e01fSmrg    WindowPtr    /* pWin */);
3914642e01fSmrg
3924642e01fSmrgextern void UpdateSpriteForScreen(
3934642e01fSmrg    DeviceIntPtr /* pDev */,
3944642e01fSmrg    ScreenPtr /* pScreen */);
3954642e01fSmrg
39605b261ecSmrgextern void WindowHasNewCursor(
39705b261ecSmrg    WindowPtr /* pWin */);
39805b261ecSmrg
39905b261ecSmrgextern Bool CheckDeviceGrabs(
40005b261ecSmrg    DeviceIntPtr /* device */,
40105b261ecSmrg    xEventPtr /* xE */,
40205b261ecSmrg    int /* checkFirst */,
40305b261ecSmrg    int /* count */);
40405b261ecSmrg
40505b261ecSmrgextern void DeliverFocusedEvent(
40605b261ecSmrg    DeviceIntPtr /* keybd */,
40705b261ecSmrg    xEventPtr /* xE */,
40805b261ecSmrg    WindowPtr /* window */,
40905b261ecSmrg    int /* count */);
41005b261ecSmrg
41105b261ecSmrgextern void DeliverGrabbedEvent(
41205b261ecSmrg    xEventPtr /* xE */,
41305b261ecSmrg    DeviceIntPtr /* thisDev */,
41405b261ecSmrg    Bool /* deactivateGrab */,
41505b261ecSmrg    int /* count */);
41605b261ecSmrg
41705b261ecSmrg#ifdef XKB
41805b261ecSmrgextern void FixKeyState(
41905b261ecSmrg    xEvent * /* xE */,
42005b261ecSmrg    DeviceIntPtr /* keybd */);
42105b261ecSmrg#endif /* XKB */
42205b261ecSmrg
42305b261ecSmrgextern void RecalculateDeliverableEvents(
42405b261ecSmrg    WindowPtr /* pWin */);
42505b261ecSmrg
42605b261ecSmrgextern int OtherClientGone(
42705b261ecSmrg    pointer /* value */,
42805b261ecSmrg    XID /* id */);
42905b261ecSmrg
43005b261ecSmrgextern void DoFocusEvents(
43105b261ecSmrg    DeviceIntPtr /* dev */,
43205b261ecSmrg    WindowPtr /* fromWin */,
43305b261ecSmrg    WindowPtr /* toWin */,
43405b261ecSmrg    int /* mode */);
43505b261ecSmrg
43605b261ecSmrgextern int SetInputFocus(
43705b261ecSmrg    ClientPtr /* client */,
43805b261ecSmrg    DeviceIntPtr /* dev */,
43905b261ecSmrg    Window /* focusID */,
44005b261ecSmrg    CARD8 /* revertTo */,
44105b261ecSmrg    Time /* ctime */,
44205b261ecSmrg    Bool /* followOK */);
44305b261ecSmrg
44405b261ecSmrgextern int GrabDevice(
44505b261ecSmrg    ClientPtr /* client */,
44605b261ecSmrg    DeviceIntPtr /* dev */,
44705b261ecSmrg    unsigned /* this_mode */,
44805b261ecSmrg    unsigned /* other_mode */,
44905b261ecSmrg    Window /* grabWindow */,
45005b261ecSmrg    unsigned /* ownerEvents */,
45105b261ecSmrg    Time /* ctime */,
45205b261ecSmrg    Mask /* mask */,
4534642e01fSmrg    CARD8 * /* status */,
4544642e01fSmrg    Bool /* coreGrab */);
45505b261ecSmrg
45605b261ecSmrgextern void InitEvents(void);
4574642e01fSmrgextern void InitSprite(
4584642e01fSmrg        DeviceIntPtr /* pDev */,
4594642e01fSmrg        Bool /* hasCursor */
4604642e01fSmrg        );
46105b261ecSmrg
46205b261ecSmrgextern void CloseDownEvents(void);
46305b261ecSmrg
46405b261ecSmrgextern void DeleteWindowFromAnyEvents(
46505b261ecSmrg    WindowPtr	/* pWin */,
46605b261ecSmrg    Bool /* freeResources */);
46705b261ecSmrg
46805b261ecSmrg
46905b261ecSmrgextern Mask EventMaskForClient(
47005b261ecSmrg    WindowPtr /* pWin */,
47105b261ecSmrg    ClientPtr /* client */);
47205b261ecSmrg
47305b261ecSmrg
47405b261ecSmrg
47505b261ecSmrgextern int DeliverEvents(
47605b261ecSmrg    WindowPtr /*pWin*/,
47705b261ecSmrg    xEventPtr /*xE*/,
47805b261ecSmrg    int /*count*/,
47905b261ecSmrg    WindowPtr /*otherParent*/);
48005b261ecSmrg
4814642e01fSmrgextern Bool
4824642e01fSmrgCheckMotion(
4834642e01fSmrg    xEvent* /* xE */,
4844642e01fSmrg    DeviceIntPtr /* pDev */);
48505b261ecSmrg
48605b261ecSmrgextern void WriteEventsToClient(
48705b261ecSmrg    ClientPtr /*pClient*/,
48805b261ecSmrg    int	     /*count*/,
48905b261ecSmrg    xEventPtr /*events*/);
49005b261ecSmrg
49105b261ecSmrgextern int TryClientEvents(
49205b261ecSmrg    ClientPtr /*client*/,
4934642e01fSmrg    DeviceIntPtr /* device */,
49405b261ecSmrg    xEventPtr /*pEvents*/,
49505b261ecSmrg    int /*count*/,
49605b261ecSmrg    Mask /*mask*/,
49705b261ecSmrg    Mask /*filter*/,
49805b261ecSmrg    GrabPtr /*grab*/);
49905b261ecSmrg
50005b261ecSmrgextern void WindowsRestructured(void);
50105b261ecSmrg
5024642e01fSmrgextern Bool SetClientPointer(
5034642e01fSmrg        ClientPtr /* client */,
5044642e01fSmrg        ClientPtr /* setter */,
5054642e01fSmrg        DeviceIntPtr /* device */);
5064642e01fSmrg
5074642e01fSmrgextern DeviceIntPtr PickPointer(
5084642e01fSmrg    ClientPtr /* client */);
5094642e01fSmrg
5104642e01fSmrgextern DeviceIntPtr PickKeyboard(
5114642e01fSmrg    ClientPtr /* client */);
5124642e01fSmrg
5134642e01fSmrgextern Bool IsInterferingGrab(
5144642e01fSmrg        ClientPtr /* client */,
5154642e01fSmrg        DeviceIntPtr /* dev */,
5164642e01fSmrg        xEvent* /* events */);
5174642e01fSmrg
51805b261ecSmrg#ifdef PANORAMIX
51905b261ecSmrgextern void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff);
52005b261ecSmrg#endif
52105b261ecSmrg
52205b261ecSmrg#ifdef RANDR
52305b261ecSmrgvoid
52405b261ecSmrgScreenRestructured (ScreenPtr pScreen);
52505b261ecSmrg#endif
52605b261ecSmrg
52705b261ecSmrgextern int ffs(int i);
52805b261ecSmrg
52905b261ecSmrg/*
53005b261ecSmrg *  callback manager stuff
53105b261ecSmrg */
53205b261ecSmrg
53305b261ecSmrg#ifndef _XTYPEDEF_CALLBACKLISTPTR
53405b261ecSmrgtypedef struct _CallbackList *CallbackListPtr; /* also in misc.h */
53505b261ecSmrg#define _XTYPEDEF_CALLBACKLISTPTR
53605b261ecSmrg#endif
53705b261ecSmrg
53805b261ecSmrgtypedef void (*CallbackProcPtr) (
53905b261ecSmrg    CallbackListPtr *, pointer, pointer);
54005b261ecSmrg
54105b261ecSmrgextern Bool AddCallback(
54205b261ecSmrg    CallbackListPtr * /*pcbl*/,
54305b261ecSmrg    CallbackProcPtr /*callback*/,
54405b261ecSmrg    pointer /*data*/);
54505b261ecSmrg
54605b261ecSmrgextern Bool DeleteCallback(
54705b261ecSmrg    CallbackListPtr * /*pcbl*/,
54805b261ecSmrg    CallbackProcPtr /*callback*/,
54905b261ecSmrg    pointer /*data*/);
55005b261ecSmrg
55105b261ecSmrgextern void CallCallbacks(
55205b261ecSmrg    CallbackListPtr * /*pcbl*/,
55305b261ecSmrg    pointer /*call_data*/);
55405b261ecSmrg
55505b261ecSmrgextern void DeleteCallbackList(
55605b261ecSmrg    CallbackListPtr * /*pcbl*/);
55705b261ecSmrg
55805b261ecSmrgextern void InitCallbackManager(void);
55905b261ecSmrg
56005b261ecSmrg/*
56105b261ecSmrg *  ServerGrabCallback stuff
56205b261ecSmrg */
56305b261ecSmrg
56405b261ecSmrgextern CallbackListPtr ServerGrabCallback;
56505b261ecSmrg
56605b261ecSmrgtypedef enum {SERVER_GRABBED, SERVER_UNGRABBED,
56705b261ecSmrg	      CLIENT_PERVIOUS, CLIENT_IMPERVIOUS } ServerGrabState;
56805b261ecSmrg
56905b261ecSmrgtypedef struct {
57005b261ecSmrg    ClientPtr client;
57105b261ecSmrg    ServerGrabState grabstate;
57205b261ecSmrg} ServerGrabInfoRec;
57305b261ecSmrg
57405b261ecSmrg/*
57505b261ecSmrg *  EventCallback stuff
57605b261ecSmrg */
57705b261ecSmrg
57805b261ecSmrgextern CallbackListPtr EventCallback;
57905b261ecSmrg
58005b261ecSmrgtypedef struct {
58105b261ecSmrg    ClientPtr client;
58205b261ecSmrg    xEventPtr events;
58305b261ecSmrg    int count;
58405b261ecSmrg} EventInfoRec;
58505b261ecSmrg
58605b261ecSmrg/*
58705b261ecSmrg *  DeviceEventCallback stuff
58805b261ecSmrg */
58905b261ecSmrg
59005b261ecSmrgextern CallbackListPtr DeviceEventCallback;
59105b261ecSmrg
59205b261ecSmrgtypedef struct {
59305b261ecSmrg    xEventPtr events;
59405b261ecSmrg    int count;
59505b261ecSmrg} DeviceEventInfoRec;
59605b261ecSmrg
5974642e01fSmrgextern int XItoCoreType(int xi_type);
5984642e01fSmrgextern Bool DevHasCursor(DeviceIntPtr pDev);
5994642e01fSmrgextern Bool IsPointerDevice( DeviceIntPtr dev);
6004642e01fSmrgextern Bool IsKeyboardDevice(DeviceIntPtr dev);
6014642e01fSmrgextern Bool IsPointerEvent(xEvent* xE);
6024642e01fSmrg
60305b261ecSmrg/*
6044642e01fSmrg * These are deprecated compatibility functions and will be removed soon!
6054642e01fSmrg * Please use the noted replacements instead.
60605b261ecSmrg */
6074642e01fSmrg/* replaced by dixLookupWindow */
6084642e01fSmrgextern WindowPtr SecurityLookupWindow(
6094642e01fSmrg    XID id,
6104642e01fSmrg    ClientPtr client,
6114642e01fSmrg    Mask access_mode);
6124642e01fSmrg/* replaced by dixLookupWindow */
6134642e01fSmrgextern WindowPtr LookupWindow(
6144642e01fSmrg    XID id,
6154642e01fSmrg    ClientPtr client);
61605b261ecSmrg
6174642e01fSmrg/* replaced by dixLookupDrawable */
6184642e01fSmrgextern pointer SecurityLookupDrawable(
6194642e01fSmrg    XID id,
6204642e01fSmrg    ClientPtr client,
6214642e01fSmrg    Mask access_mode);
62205b261ecSmrg
6234642e01fSmrg/* replaced by dixLookupDrawable */
6244642e01fSmrgextern pointer LookupDrawable(
6254642e01fSmrg    XID id,
6264642e01fSmrg    ClientPtr client);
62705b261ecSmrg
6284642e01fSmrg/* replaced by dixLookupClient */
6294642e01fSmrgextern ClientPtr LookupClient(
6304642e01fSmrg    XID id,
6314642e01fSmrg    ClientPtr client);
63205b261ecSmrg
6334642e01fSmrg/* GE stuff */
6344642e01fSmrgextern void SetGenericFilter(int extension, Mask* filters);
6354642e01fSmrgextern int ExtGrabDevice(ClientPtr client,
6364642e01fSmrg                         DeviceIntPtr dev,
6374642e01fSmrg                         int device_mode,
6384642e01fSmrg                         WindowPtr grabWindow,
6394642e01fSmrg                         WindowPtr confineTo,
6404642e01fSmrg                         TimeStamp ctime,
6414642e01fSmrg                         Bool ownerEvents,
6424642e01fSmrg                         CursorPtr cursor,
6434642e01fSmrg                         Mask xi_mask,
6444642e01fSmrg                         GenericMaskPtr ge_masks);
64505b261ecSmrg#endif /* DIX_H */
646