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