dix.h revision 05b261ec
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"
5405b261ecSmrg
5505b261ecSmrg#define EARLIER -1
5605b261ecSmrg#define SAMETIME 0
5705b261ecSmrg#define LATER 1
5805b261ecSmrg
5905b261ecSmrg#define NullClient ((ClientPtr) 0)
6005b261ecSmrg#define REQUEST(type) \
6105b261ecSmrg	register type *stuff = (type *)client->requestBuffer
6205b261ecSmrg
6305b261ecSmrg
6405b261ecSmrg#define REQUEST_SIZE_MATCH(req)\
6505b261ecSmrg    if ((sizeof(req) >> 2) != client->req_len)\
6605b261ecSmrg         return(BadLength)
6705b261ecSmrg
6805b261ecSmrg#define REQUEST_AT_LEAST_SIZE(req) \
6905b261ecSmrg    if ((sizeof(req) >> 2) > client->req_len )\
7005b261ecSmrg         return(BadLength)
7105b261ecSmrg
7205b261ecSmrg#define REQUEST_FIXED_SIZE(req, n)\
7305b261ecSmrg    if (((sizeof(req) >> 2) > client->req_len) || \
7405b261ecSmrg        (((sizeof(req) + (n) + 3) >> 2) != client->req_len)) \
7505b261ecSmrg         return(BadLength)
7605b261ecSmrg
7705b261ecSmrg#define LEGAL_NEW_RESOURCE(id,client)\
7805b261ecSmrg    if (!LegalNewID(id,client)) \
7905b261ecSmrg    {\
8005b261ecSmrg	client->errorValue = id;\
8105b261ecSmrg        return(BadIDChoice);\
8205b261ecSmrg    }
8305b261ecSmrg
8405b261ecSmrg#define VALIDATE_DRAWABLE_AND_GC(drawID, pDraw, pGC, client)\
8505b261ecSmrg    if ((stuff->gc == INVALID) || (client->lastGCID != stuff->gc) ||\
8605b261ecSmrg	(client->lastDrawableID != drawID))\
8705b261ecSmrg    {\
8805b261ecSmrg	int rc;\
8905b261ecSmrg	rc = dixLookupDrawable(&(pDraw), drawID, client, M_ANY,\
9005b261ecSmrg			       DixWriteAccess);\
9105b261ecSmrg	if (rc != Success)\
9205b261ecSmrg	    return rc;\
9305b261ecSmrg	rc = dixLookupGC(&(pGC), stuff->gc, client, DixReadAccess);\
9405b261ecSmrg	if (rc != Success)\
9505b261ecSmrg	    return rc;\
9605b261ecSmrg	if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen))\
9705b261ecSmrg	    return (BadMatch);\
9805b261ecSmrg	client->lastDrawable = pDraw;\
9905b261ecSmrg	client->lastDrawableID = drawID;\
10005b261ecSmrg	client->lastGC = pGC;\
10105b261ecSmrg	client->lastGCID = stuff->gc;\
10205b261ecSmrg    }\
10305b261ecSmrg    else\
10405b261ecSmrg    {\
10505b261ecSmrg        pGC = client->lastGC;\
10605b261ecSmrg        pDraw = client->lastDrawable;\
10705b261ecSmrg    }\
10805b261ecSmrg    if (pGC->serialNumber != pDraw->serialNumber)\
10905b261ecSmrg	ValidateGC(pDraw, pGC);
11005b261ecSmrg
11105b261ecSmrg
11205b261ecSmrg#define WriteReplyToClient(pClient, size, pReply) { \
11305b261ecSmrg   if ((pClient)->swapped) \
11405b261ecSmrg      (*ReplySwapVector[((xReq *)(pClient)->requestBuffer)->reqType]) \
11505b261ecSmrg           (pClient, (int)(size), pReply); \
11605b261ecSmrg      else (void) WriteToClient(pClient, (int)(size), (char *)(pReply)); }
11705b261ecSmrg
11805b261ecSmrg#define WriteSwappedDataToClient(pClient, size, pbuf) \
11905b261ecSmrg   if ((pClient)->swapped) \
12005b261ecSmrg      (*(pClient)->pSwapReplyFunc)(pClient, (int)(size), pbuf); \
12105b261ecSmrg   else (void) WriteToClient (pClient, (int)(size), (char *)(pbuf));
12205b261ecSmrg
12305b261ecSmrgtypedef struct _TimeStamp *TimeStampPtr;
12405b261ecSmrg
12505b261ecSmrg#ifndef _XTYPEDEF_CLIENTPTR
12605b261ecSmrgtypedef struct _Client *ClientPtr; /* also in misc.h */
12705b261ecSmrg#define _XTYPEDEF_CLIENTPTR
12805b261ecSmrg#endif
12905b261ecSmrg
13005b261ecSmrgtypedef struct _WorkQueue	*WorkQueuePtr;
13105b261ecSmrg
13205b261ecSmrgextern ClientPtr requestingClient;
13305b261ecSmrgextern ClientPtr *clients;
13405b261ecSmrgextern ClientPtr serverClient;
13505b261ecSmrgextern int currentMaxClients;
13605b261ecSmrgextern char dispatchExceptionAtReset;
13705b261ecSmrg
13805b261ecSmrgtypedef int HWEventQueueType;
13905b261ecSmrgtypedef HWEventQueueType* HWEventQueuePtr;
14005b261ecSmrg
14105b261ecSmrgextern HWEventQueuePtr checkForInput[2];
14205b261ecSmrg
14305b261ecSmrgtypedef struct _TimeStamp {
14405b261ecSmrg    CARD32 months;	/* really ~49.7 days */
14505b261ecSmrg    CARD32 milliseconds;
14605b261ecSmrg}           TimeStamp;
14705b261ecSmrg
14805b261ecSmrg/* dispatch.c */
14905b261ecSmrg
15005b261ecSmrgextern void SetInputCheck(
15105b261ecSmrg    HWEventQueuePtr /*c0*/,
15205b261ecSmrg    HWEventQueuePtr /*c1*/);
15305b261ecSmrg
15405b261ecSmrgextern void CloseDownClient(
15505b261ecSmrg    ClientPtr /*client*/);
15605b261ecSmrg
15705b261ecSmrgextern void UpdateCurrentTime(void);
15805b261ecSmrg
15905b261ecSmrgextern void UpdateCurrentTimeIf(void);
16005b261ecSmrg
16105b261ecSmrgextern void InitSelections(void);
16205b261ecSmrg
16305b261ecSmrgextern void FlushClientCaches(XID /*id*/);
16405b261ecSmrg
16505b261ecSmrgextern int dixDestroyPixmap(
16605b261ecSmrg    pointer /*value*/,
16705b261ecSmrg    XID /*pid*/);
16805b261ecSmrg
16905b261ecSmrgextern void InitClient(
17005b261ecSmrg    ClientPtr /*client*/,
17105b261ecSmrg    int /*i*/,
17205b261ecSmrg    pointer /*ospriv*/);
17305b261ecSmrg
17405b261ecSmrgextern ClientPtr NextAvailableClient(
17505b261ecSmrg    pointer /*ospriv*/);
17605b261ecSmrg
17705b261ecSmrgextern void SendErrorToClient(
17805b261ecSmrg    ClientPtr /*client*/,
17905b261ecSmrg    unsigned int /*majorCode*/,
18005b261ecSmrg    unsigned int /*minorCode*/,
18105b261ecSmrg    XID /*resId*/,
18205b261ecSmrg    int /*errorCode*/);
18305b261ecSmrg
18405b261ecSmrgextern void DeleteWindowFromAnySelections(
18505b261ecSmrg    WindowPtr /*pWin*/);
18605b261ecSmrg
18705b261ecSmrgextern void MarkClientException(
18805b261ecSmrg    ClientPtr /*client*/);
18905b261ecSmrg
19005b261ecSmrgextern int SendConnSetup(
19105b261ecSmrg    ClientPtr /*client*/,
19205b261ecSmrg    char* /*reason*/);
19305b261ecSmrg
19405b261ecSmrg#if defined(DDXBEFORERESET)
19505b261ecSmrgextern void ddxBeforeReset (void);
19605b261ecSmrg#endif
19705b261ecSmrg
19805b261ecSmrg/* dixutils.c */
19905b261ecSmrg
20005b261ecSmrgextern void CopyISOLatin1Lowered(
20105b261ecSmrg    unsigned char * /*dest*/,
20205b261ecSmrg    unsigned char * /*source*/,
20305b261ecSmrg    int /*length*/);
20405b261ecSmrg
20505b261ecSmrgextern int CompareISOLatin1Lowered(
20605b261ecSmrg    unsigned char * /*a*/,
20705b261ecSmrg    int alen,
20805b261ecSmrg    unsigned char * /*b*/,
20905b261ecSmrg    int blen);
21005b261ecSmrg
21105b261ecSmrgextern int dixLookupWindow(
21205b261ecSmrg    WindowPtr *result,
21305b261ecSmrg    XID id,
21405b261ecSmrg    ClientPtr client,
21505b261ecSmrg    Mask access_mode);
21605b261ecSmrg
21705b261ecSmrgextern int dixLookupDrawable(
21805b261ecSmrg    DrawablePtr *result,
21905b261ecSmrg    XID id,
22005b261ecSmrg    ClientPtr client,
22105b261ecSmrg    Mask type_mask,
22205b261ecSmrg    Mask access_mode);
22305b261ecSmrg
22405b261ecSmrgextern int dixLookupGC(
22505b261ecSmrg    GCPtr *result,
22605b261ecSmrg    XID id,
22705b261ecSmrg    ClientPtr client,
22805b261ecSmrg    Mask access_mode);
22905b261ecSmrg
23005b261ecSmrgextern int dixLookupClient(
23105b261ecSmrg    ClientPtr *result,
23205b261ecSmrg    XID id,
23305b261ecSmrg    ClientPtr client,
23405b261ecSmrg    Mask access_mode);
23505b261ecSmrg
23605b261ecSmrg/*
23705b261ecSmrg * These are deprecated compatibility functions and will be removed soon!
23805b261ecSmrg * Please use the new dixLookup*() functions above.
23905b261ecSmrg */
24005b261ecSmrgextern WindowPtr SecurityLookupWindow(XID, ClientPtr, Mask);
24105b261ecSmrgextern WindowPtr LookupWindow(XID, ClientPtr);
24205b261ecSmrgextern pointer SecurityLookupDrawable(XID, ClientPtr, Mask);
24305b261ecSmrgextern pointer LookupDrawable(XID, ClientPtr);
24405b261ecSmrgextern ClientPtr LookupClient(XID, ClientPtr);
24505b261ecSmrg/* end deprecated functions */
24605b261ecSmrg
24705b261ecSmrgextern void NoopDDA(void);
24805b261ecSmrg
24905b261ecSmrgextern int AlterSaveSetForClient(
25005b261ecSmrg    ClientPtr /*client*/,
25105b261ecSmrg    WindowPtr /*pWin*/,
25205b261ecSmrg    unsigned /*mode*/,
25305b261ecSmrg    Bool /*toRoot*/,
25405b261ecSmrg    Bool /*remap*/);
25505b261ecSmrg
25605b261ecSmrgextern void DeleteWindowFromAnySaveSet(
25705b261ecSmrg    WindowPtr /*pWin*/);
25805b261ecSmrg
25905b261ecSmrgextern void BlockHandler(
26005b261ecSmrg    pointer /*pTimeout*/,
26105b261ecSmrg    pointer /*pReadmask*/);
26205b261ecSmrg
26305b261ecSmrgextern void WakeupHandler(
26405b261ecSmrg    int /*result*/,
26505b261ecSmrg    pointer /*pReadmask*/);
26605b261ecSmrg
26705b261ecSmrgtypedef void (* WakeupHandlerProcPtr)(
26805b261ecSmrg    pointer /* blockData */,
26905b261ecSmrg    int /* result */,
27005b261ecSmrg    pointer /* pReadmask */);
27105b261ecSmrg
27205b261ecSmrgextern Bool RegisterBlockAndWakeupHandlers(
27305b261ecSmrg    BlockHandlerProcPtr /*blockHandler*/,
27405b261ecSmrg    WakeupHandlerProcPtr /*wakeupHandler*/,
27505b261ecSmrg    pointer /*blockData*/);
27605b261ecSmrg
27705b261ecSmrgextern void RemoveBlockAndWakeupHandlers(
27805b261ecSmrg    BlockHandlerProcPtr /*blockHandler*/,
27905b261ecSmrg    WakeupHandlerProcPtr /*wakeupHandler*/,
28005b261ecSmrg    pointer /*blockData*/);
28105b261ecSmrg
28205b261ecSmrgextern void InitBlockAndWakeupHandlers(void);
28305b261ecSmrg
28405b261ecSmrgextern void ProcessWorkQueue(void);
28505b261ecSmrg
28605b261ecSmrgextern void ProcessWorkQueueZombies(void);
28705b261ecSmrg
28805b261ecSmrgextern Bool QueueWorkProc(
28905b261ecSmrg    Bool (* /*function*/)(
29005b261ecSmrg        ClientPtr /*clientUnused*/,
29105b261ecSmrg        pointer /*closure*/),
29205b261ecSmrg    ClientPtr /*client*/,
29305b261ecSmrg    pointer /*closure*/
29405b261ecSmrg);
29505b261ecSmrg
29605b261ecSmrgtypedef Bool (* ClientSleepProcPtr)(
29705b261ecSmrg    ClientPtr /*client*/,
29805b261ecSmrg    pointer /*closure*/);
29905b261ecSmrg
30005b261ecSmrgextern Bool ClientSleep(
30105b261ecSmrg    ClientPtr /*client*/,
30205b261ecSmrg    ClientSleepProcPtr /* function */,
30305b261ecSmrg    pointer /*closure*/);
30405b261ecSmrg
30505b261ecSmrg#ifndef ___CLIENTSIGNAL_DEFINED___
30605b261ecSmrg#define ___CLIENTSIGNAL_DEFINED___
30705b261ecSmrgextern Bool ClientSignal(
30805b261ecSmrg    ClientPtr /*client*/);
30905b261ecSmrg#endif /* ___CLIENTSIGNAL_DEFINED___ */
31005b261ecSmrg
31105b261ecSmrgextern void ClientWakeup(
31205b261ecSmrg    ClientPtr /*client*/);
31305b261ecSmrg
31405b261ecSmrgextern Bool ClientIsAsleep(
31505b261ecSmrg    ClientPtr /*client*/);
31605b261ecSmrg
31705b261ecSmrg/* atom.c */
31805b261ecSmrg
31905b261ecSmrgextern Atom MakeAtom(
32005b261ecSmrg    char * /*string*/,
32105b261ecSmrg    unsigned /*len*/,
32205b261ecSmrg    Bool /*makeit*/);
32305b261ecSmrg
32405b261ecSmrgextern Bool ValidAtom(
32505b261ecSmrg    Atom /*atom*/);
32605b261ecSmrg
32705b261ecSmrgextern char *NameForAtom(
32805b261ecSmrg    Atom /*atom*/);
32905b261ecSmrg
33005b261ecSmrgextern void AtomError(void);
33105b261ecSmrg
33205b261ecSmrgextern void FreeAllAtoms(void);
33305b261ecSmrg
33405b261ecSmrgextern void InitAtoms(void);
33505b261ecSmrg
33605b261ecSmrg/* main.c */
33705b261ecSmrg
33805b261ecSmrgextern void SetVendorRelease(int release);
33905b261ecSmrg
34005b261ecSmrgextern void SetVendorString(char *string);
34105b261ecSmrg
34205b261ecSmrg/* events.c */
34305b261ecSmrg
34405b261ecSmrgextern void SetMaskForEvent(
34505b261ecSmrg    Mask /* mask */,
34605b261ecSmrg    int /* event */);
34705b261ecSmrg
34805b261ecSmrg
34905b261ecSmrgextern Bool IsParent(
35005b261ecSmrg    WindowPtr /* maybeparent */,
35105b261ecSmrg    WindowPtr /* child */);
35205b261ecSmrg
35305b261ecSmrgextern WindowPtr GetCurrentRootWindow(void);
35405b261ecSmrg
35505b261ecSmrgextern WindowPtr GetSpriteWindow(void);
35605b261ecSmrg
35705b261ecSmrg
35805b261ecSmrgextern void NoticeEventTime(xEventPtr /* xE */);
35905b261ecSmrg
36005b261ecSmrgextern void EnqueueEvent(
36105b261ecSmrg    xEventPtr /* xE */,
36205b261ecSmrg    DeviceIntPtr /* device */,
36305b261ecSmrg    int	/* count */);
36405b261ecSmrg
36505b261ecSmrgextern void ComputeFreezes(void);
36605b261ecSmrg
36705b261ecSmrgextern void CheckGrabForSyncs(
36805b261ecSmrg    DeviceIntPtr /* dev */,
36905b261ecSmrg    Bool /* thisMode */,
37005b261ecSmrg    Bool /* otherMode */);
37105b261ecSmrg
37205b261ecSmrgextern void ActivatePointerGrab(
37305b261ecSmrg    DeviceIntPtr /* mouse */,
37405b261ecSmrg    GrabPtr /* grab */,
37505b261ecSmrg    TimeStamp /* time */,
37605b261ecSmrg    Bool /* autoGrab */);
37705b261ecSmrg
37805b261ecSmrgextern void DeactivatePointerGrab(
37905b261ecSmrg    DeviceIntPtr /* mouse */);
38005b261ecSmrg
38105b261ecSmrgextern void ActivateKeyboardGrab(
38205b261ecSmrg    DeviceIntPtr /* keybd */,
38305b261ecSmrg    GrabPtr /* grab */,
38405b261ecSmrg    TimeStamp /* time */,
38505b261ecSmrg    Bool /* passive */);
38605b261ecSmrg
38705b261ecSmrgextern void DeactivateKeyboardGrab(
38805b261ecSmrg    DeviceIntPtr /* keybd */);
38905b261ecSmrg
39005b261ecSmrgextern void AllowSome(
39105b261ecSmrg    ClientPtr	/* client */,
39205b261ecSmrg    TimeStamp /* time */,
39305b261ecSmrg    DeviceIntPtr /* thisDev */,
39405b261ecSmrg    int /* newState */);
39505b261ecSmrg
39605b261ecSmrgextern void ReleaseActiveGrabs(
39705b261ecSmrg    ClientPtr client);
39805b261ecSmrg
39905b261ecSmrgextern int DeliverEventsToWindow(
40005b261ecSmrg    WindowPtr /* pWin */,
40105b261ecSmrg    xEventPtr /* pEvents */,
40205b261ecSmrg    int /* count */,
40305b261ecSmrg    Mask /* filter */,
40405b261ecSmrg    GrabPtr /* grab */,
40505b261ecSmrg    int /* mskidx */);
40605b261ecSmrg
40705b261ecSmrgextern int DeliverDeviceEvents(
40805b261ecSmrg    WindowPtr /* pWin */,
40905b261ecSmrg    xEventPtr /* xE */,
41005b261ecSmrg    GrabPtr /* grab */,
41105b261ecSmrg    WindowPtr /* stopAt */,
41205b261ecSmrg    DeviceIntPtr /* dev */,
41305b261ecSmrg    int /* count */);
41405b261ecSmrg
41505b261ecSmrgextern void DefineInitialRootWindow(
41605b261ecSmrg    WindowPtr /* win */);
41705b261ecSmrg
41805b261ecSmrgextern void WindowHasNewCursor(
41905b261ecSmrg    WindowPtr /* pWin */);
42005b261ecSmrg
42105b261ecSmrgextern Bool CheckDeviceGrabs(
42205b261ecSmrg    DeviceIntPtr /* device */,
42305b261ecSmrg    xEventPtr /* xE */,
42405b261ecSmrg    int /* checkFirst */,
42505b261ecSmrg    int /* count */);
42605b261ecSmrg
42705b261ecSmrgextern void DeliverFocusedEvent(
42805b261ecSmrg    DeviceIntPtr /* keybd */,
42905b261ecSmrg    xEventPtr /* xE */,
43005b261ecSmrg    WindowPtr /* window */,
43105b261ecSmrg    int /* count */);
43205b261ecSmrg
43305b261ecSmrgextern void DeliverGrabbedEvent(
43405b261ecSmrg    xEventPtr /* xE */,
43505b261ecSmrg    DeviceIntPtr /* thisDev */,
43605b261ecSmrg    Bool /* deactivateGrab */,
43705b261ecSmrg    int /* count */);
43805b261ecSmrg
43905b261ecSmrg#ifdef XKB
44005b261ecSmrgextern void FixKeyState(
44105b261ecSmrg    xEvent * /* xE */,
44205b261ecSmrg    DeviceIntPtr /* keybd */);
44305b261ecSmrg#endif /* XKB */
44405b261ecSmrg
44505b261ecSmrgextern void RecalculateDeliverableEvents(
44605b261ecSmrg    WindowPtr /* pWin */);
44705b261ecSmrg
44805b261ecSmrgextern int OtherClientGone(
44905b261ecSmrg    pointer /* value */,
45005b261ecSmrg    XID /* id */);
45105b261ecSmrg
45205b261ecSmrgextern void DoFocusEvents(
45305b261ecSmrg    DeviceIntPtr /* dev */,
45405b261ecSmrg    WindowPtr /* fromWin */,
45505b261ecSmrg    WindowPtr /* toWin */,
45605b261ecSmrg    int /* mode */);
45705b261ecSmrg
45805b261ecSmrgextern int SetInputFocus(
45905b261ecSmrg    ClientPtr /* client */,
46005b261ecSmrg    DeviceIntPtr /* dev */,
46105b261ecSmrg    Window /* focusID */,
46205b261ecSmrg    CARD8 /* revertTo */,
46305b261ecSmrg    Time /* ctime */,
46405b261ecSmrg    Bool /* followOK */);
46505b261ecSmrg
46605b261ecSmrgextern int GrabDevice(
46705b261ecSmrg    ClientPtr /* client */,
46805b261ecSmrg    DeviceIntPtr /* dev */,
46905b261ecSmrg    unsigned /* this_mode */,
47005b261ecSmrg    unsigned /* other_mode */,
47105b261ecSmrg    Window /* grabWindow */,
47205b261ecSmrg    unsigned /* ownerEvents */,
47305b261ecSmrg    Time /* ctime */,
47405b261ecSmrg    Mask /* mask */,
47505b261ecSmrg    CARD8 * /* status */);
47605b261ecSmrg
47705b261ecSmrgextern void InitEvents(void);
47805b261ecSmrg
47905b261ecSmrgextern void CloseDownEvents(void);
48005b261ecSmrg
48105b261ecSmrgextern void DeleteWindowFromAnyEvents(
48205b261ecSmrg    WindowPtr	/* pWin */,
48305b261ecSmrg    Bool /* freeResources */);
48405b261ecSmrg
48505b261ecSmrg
48605b261ecSmrgextern Mask EventMaskForClient(
48705b261ecSmrg    WindowPtr /* pWin */,
48805b261ecSmrg    ClientPtr /* client */);
48905b261ecSmrg
49005b261ecSmrg
49105b261ecSmrg
49205b261ecSmrgextern int DeliverEvents(
49305b261ecSmrg    WindowPtr /*pWin*/,
49405b261ecSmrg    xEventPtr /*xE*/,
49505b261ecSmrg    int /*count*/,
49605b261ecSmrg    WindowPtr /*otherParent*/);
49705b261ecSmrg
49805b261ecSmrg
49905b261ecSmrgextern void WriteEventsToClient(
50005b261ecSmrg    ClientPtr /*pClient*/,
50105b261ecSmrg    int	     /*count*/,
50205b261ecSmrg    xEventPtr /*events*/);
50305b261ecSmrg
50405b261ecSmrgextern int TryClientEvents(
50505b261ecSmrg    ClientPtr /*client*/,
50605b261ecSmrg    xEventPtr /*pEvents*/,
50705b261ecSmrg    int /*count*/,
50805b261ecSmrg    Mask /*mask*/,
50905b261ecSmrg    Mask /*filter*/,
51005b261ecSmrg    GrabPtr /*grab*/);
51105b261ecSmrg
51205b261ecSmrgextern void WindowsRestructured(void);
51305b261ecSmrg
51405b261ecSmrg#ifdef PANORAMIX
51505b261ecSmrgextern void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff);
51605b261ecSmrg#endif
51705b261ecSmrg
51805b261ecSmrg#ifdef RANDR
51905b261ecSmrgvoid
52005b261ecSmrgScreenRestructured (ScreenPtr pScreen);
52105b261ecSmrg#endif
52205b261ecSmrg
52305b261ecSmrgextern void ResetClientPrivates(void);
52405b261ecSmrg
52505b261ecSmrgextern int AllocateClientPrivateIndex(void);
52605b261ecSmrg
52705b261ecSmrgextern Bool AllocateClientPrivate(
52805b261ecSmrg    int /*index*/,
52905b261ecSmrg    unsigned /*amount*/);
53005b261ecSmrg
53105b261ecSmrgextern int ffs(int i);
53205b261ecSmrg
53305b261ecSmrg/*
53405b261ecSmrg *  callback manager stuff
53505b261ecSmrg */
53605b261ecSmrg
53705b261ecSmrg#ifndef _XTYPEDEF_CALLBACKLISTPTR
53805b261ecSmrgtypedef struct _CallbackList *CallbackListPtr; /* also in misc.h */
53905b261ecSmrg#define _XTYPEDEF_CALLBACKLISTPTR
54005b261ecSmrg#endif
54105b261ecSmrg
54205b261ecSmrgtypedef void (*CallbackProcPtr) (
54305b261ecSmrg    CallbackListPtr *, pointer, pointer);
54405b261ecSmrg
54505b261ecSmrgtypedef Bool (*AddCallbackProcPtr) (
54605b261ecSmrg    CallbackListPtr *, CallbackProcPtr, pointer);
54705b261ecSmrg
54805b261ecSmrgtypedef Bool (*DeleteCallbackProcPtr) (
54905b261ecSmrg    CallbackListPtr *, CallbackProcPtr, pointer);
55005b261ecSmrg
55105b261ecSmrgtypedef void (*CallCallbacksProcPtr) (
55205b261ecSmrg    CallbackListPtr *, pointer);
55305b261ecSmrg
55405b261ecSmrgtypedef void (*DeleteCallbackListProcPtr) (
55505b261ecSmrg    CallbackListPtr *);
55605b261ecSmrg
55705b261ecSmrgtypedef struct _CallbackProcs {
55805b261ecSmrg    AddCallbackProcPtr		AddCallback;
55905b261ecSmrg    DeleteCallbackProcPtr	DeleteCallback;
56005b261ecSmrg    CallCallbacksProcPtr	CallCallbacks;
56105b261ecSmrg    DeleteCallbackListProcPtr	DeleteCallbackList;
56205b261ecSmrg} CallbackFuncsRec, *CallbackFuncsPtr;
56305b261ecSmrg
56405b261ecSmrgextern Bool AddCallback(
56505b261ecSmrg    CallbackListPtr * /*pcbl*/,
56605b261ecSmrg    CallbackProcPtr /*callback*/,
56705b261ecSmrg    pointer /*data*/);
56805b261ecSmrg
56905b261ecSmrgextern Bool DeleteCallback(
57005b261ecSmrg    CallbackListPtr * /*pcbl*/,
57105b261ecSmrg    CallbackProcPtr /*callback*/,
57205b261ecSmrg    pointer /*data*/);
57305b261ecSmrg
57405b261ecSmrgextern void CallCallbacks(
57505b261ecSmrg    CallbackListPtr * /*pcbl*/,
57605b261ecSmrg    pointer /*call_data*/);
57705b261ecSmrg
57805b261ecSmrgextern void DeleteCallbackList(
57905b261ecSmrg    CallbackListPtr * /*pcbl*/);
58005b261ecSmrg
58105b261ecSmrgextern void InitCallbackManager(void);
58205b261ecSmrg
58305b261ecSmrg/*
58405b261ecSmrg *  ServerGrabCallback stuff
58505b261ecSmrg */
58605b261ecSmrg
58705b261ecSmrgextern CallbackListPtr ServerGrabCallback;
58805b261ecSmrg
58905b261ecSmrgtypedef enum {SERVER_GRABBED, SERVER_UNGRABBED,
59005b261ecSmrg	      CLIENT_PERVIOUS, CLIENT_IMPERVIOUS } ServerGrabState;
59105b261ecSmrg
59205b261ecSmrgtypedef struct {
59305b261ecSmrg    ClientPtr client;
59405b261ecSmrg    ServerGrabState grabstate;
59505b261ecSmrg} ServerGrabInfoRec;
59605b261ecSmrg
59705b261ecSmrg/*
59805b261ecSmrg *  EventCallback stuff
59905b261ecSmrg */
60005b261ecSmrg
60105b261ecSmrgextern CallbackListPtr EventCallback;
60205b261ecSmrg
60305b261ecSmrgtypedef struct {
60405b261ecSmrg    ClientPtr client;
60505b261ecSmrg    xEventPtr events;
60605b261ecSmrg    int count;
60705b261ecSmrg} EventInfoRec;
60805b261ecSmrg
60905b261ecSmrg/*
61005b261ecSmrg *  DeviceEventCallback stuff
61105b261ecSmrg */
61205b261ecSmrg
61305b261ecSmrgextern CallbackListPtr DeviceEventCallback;
61405b261ecSmrg
61505b261ecSmrgtypedef struct {
61605b261ecSmrg    xEventPtr events;
61705b261ecSmrg    int count;
61805b261ecSmrg} DeviceEventInfoRec;
61905b261ecSmrg
62005b261ecSmrg/*
62105b261ecSmrg * SelectionCallback stuff
62205b261ecSmrg */
62305b261ecSmrg
62405b261ecSmrgextern CallbackListPtr SelectionCallback;
62505b261ecSmrg
62605b261ecSmrgtypedef enum {
62705b261ecSmrg    SelectionSetOwner,
62805b261ecSmrg    SelectionWindowDestroy,
62905b261ecSmrg    SelectionClientClose
63005b261ecSmrg} SelectionCallbackKind;
63105b261ecSmrg
63205b261ecSmrgtypedef struct {
63305b261ecSmrg    struct _Selection	    *selection;
63405b261ecSmrg    SelectionCallbackKind   kind;
63505b261ecSmrg} SelectionInfoRec;
63605b261ecSmrg
63705b261ecSmrg/* strcasecmp.c */
63805b261ecSmrg#if NEED_STRCASECMP
63905b261ecSmrg#define strcasecmp xstrcasecmp
64005b261ecSmrgextern int xstrcasecmp(char *s1, char *s2);
64105b261ecSmrg#endif
64205b261ecSmrg
64305b261ecSmrg#endif /* DIX_H */
644