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