1706f2543Smrg/***********************************************************
2706f2543Smrg
3706f2543SmrgCopyright 1987, 1998  The Open Group
4706f2543Smrg
5706f2543SmrgPermission to use, copy, modify, distribute, and sell this software and its
6706f2543Smrgdocumentation for any purpose is hereby granted without fee, provided that
7706f2543Smrgthe above copyright notice appear in all copies and that both that
8706f2543Smrgcopyright notice and this permission notice appear in supporting
9706f2543Smrgdocumentation.
10706f2543Smrg
11706f2543SmrgThe above copyright notice and this permission notice shall be included in
12706f2543Smrgall copies or substantial portions of the Software.
13706f2543Smrg
14706f2543SmrgTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15706f2543SmrgIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16706f2543SmrgFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
17706f2543SmrgOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
18706f2543SmrgAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
19706f2543SmrgCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20706f2543Smrg
21706f2543SmrgExcept as contained in this notice, the name of The Open Group shall not be
22706f2543Smrgused in advertising or otherwise to promote the sale, use or other dealings
23706f2543Smrgin this Software without prior written authorization from The Open Group.
24706f2543Smrg
25706f2543Smrg
26706f2543SmrgCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
27706f2543Smrg
28706f2543Smrg                        All Rights Reserved
29706f2543Smrg
30706f2543SmrgPermission to use, copy, modify, and distribute this software and its
31706f2543Smrgdocumentation for any purpose and without fee is hereby granted,
32706f2543Smrgprovided that the above copyright notice appear in all copies and that
33706f2543Smrgboth that copyright notice and this permission notice appear in
34706f2543Smrgsupporting documentation, and that the name of Digital not be
35706f2543Smrgused in advertising or publicity pertaining to distribution of the
36706f2543Smrgsoftware without specific, written prior permission.
37706f2543Smrg
38706f2543SmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
39706f2543SmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
40706f2543SmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
41706f2543SmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
42706f2543SmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
43706f2543SmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
44706f2543SmrgSOFTWARE.
45706f2543Smrg
46706f2543Smrg******************************************************************/
47706f2543Smrg
48706f2543Smrg#ifndef DIX_H
49706f2543Smrg#define DIX_H
50706f2543Smrg
51706f2543Smrg#include "callback.h"
52706f2543Smrg#include "gc.h"
53706f2543Smrg#include "window.h"
54706f2543Smrg#include "input.h"
55706f2543Smrg#include "cursor.h"
56706f2543Smrg#include "geext.h"
57706f2543Smrg#include "events.h"
58706f2543Smrg#include <X11/extensions/XI.h>
59706f2543Smrg
60706f2543Smrg#define EARLIER -1
61706f2543Smrg#define SAMETIME 0
62706f2543Smrg#define LATER 1
63706f2543Smrg
64706f2543Smrg#define NullClient ((ClientPtr) 0)
65706f2543Smrg#define REQUEST(type) \
66706f2543Smrg	type *stuff = (type *)client->requestBuffer
67706f2543Smrg
68706f2543Smrg
69706f2543Smrg#define REQUEST_SIZE_MATCH(req)\
70706f2543Smrg    if ((sizeof(req) >> 2) != client->req_len)\
71706f2543Smrg         return(BadLength)
72706f2543Smrg
73706f2543Smrg#define REQUEST_AT_LEAST_SIZE(req) \
74706f2543Smrg    if ((sizeof(req) >> 2) > client->req_len )\
75706f2543Smrg         return(BadLength)
76706f2543Smrg
77706f2543Smrg#define REQUEST_AT_LEAST_EXTRA_SIZE(req, extra)  \
78706f2543Smrg    if (((sizeof(req) + ((uint64_t) extra)) >> 2) > client->req_len ) \
79706f2543Smrg         return(BadLength)
80706f2543Smrg
81706f2543Smrg#define REQUEST_FIXED_SIZE(req, n)\
82706f2543Smrg    if (((sizeof(req) >> 2) > client->req_len) || \
83706f2543Smrg        (((n) >> 2) >= client->req_len) || \
84706f2543Smrg        ((((uint64_t) sizeof(req) + (n) + 3) >> 2) != (uint64_t) client->req_len))  \
85706f2543Smrg         return(BadLength)
86706f2543Smrg
87706f2543Smrg#define LEGAL_NEW_RESOURCE(id,client)\
88706f2543Smrg    if (!LegalNewID(id,client)) \
89706f2543Smrg    {\
90706f2543Smrg	client->errorValue = id;\
91706f2543Smrg        return BadIDChoice;\
92706f2543Smrg    }
93706f2543Smrg
94706f2543Smrg#define VALIDATE_DRAWABLE_AND_GC(drawID, pDraw, mode)\
95706f2543Smrg    {\
96706f2543Smrg	int rc = dixLookupDrawable(&(pDraw), drawID, client, M_ANY, mode);\
97706f2543Smrg	if (rc != Success)\
98706f2543Smrg	    return rc;\
99706f2543Smrg	rc = dixLookupGC(&(pGC), stuff->gc, client, DixUseAccess);\
100706f2543Smrg	if (rc != Success)\
101706f2543Smrg	    return rc;\
102706f2543Smrg	if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen))\
103706f2543Smrg	    return BadMatch;\
104706f2543Smrg    }\
105706f2543Smrg    if (pGC->serialNumber != pDraw->serialNumber)\
106706f2543Smrg	ValidateGC(pDraw, pGC);
107706f2543Smrg
108706f2543Smrg
109706f2543Smrg#define WriteReplyToClient(pClient, size, pReply) { \
110706f2543Smrg   if ((pClient)->swapped) \
111706f2543Smrg      (*ReplySwapVector[((xReq *)(pClient)->requestBuffer)->reqType]) \
112706f2543Smrg           (pClient, (int)(size), pReply); \
113706f2543Smrg      else (void) WriteToClient(pClient, (int)(size), (char *)(pReply)); }
114706f2543Smrg
115706f2543Smrg#define WriteSwappedDataToClient(pClient, size, pbuf) \
116706f2543Smrg   if ((pClient)->swapped) \
117706f2543Smrg      (*(pClient)->pSwapReplyFunc)(pClient, (int)(size), pbuf); \
118706f2543Smrg   else (void) WriteToClient (pClient, (int)(size), (char *)(pbuf));
119706f2543Smrg
120706f2543Smrgtypedef struct _TimeStamp *TimeStampPtr;
121706f2543Smrg
122706f2543Smrg#ifndef _XTYPEDEF_CLIENTPTR
123706f2543Smrgtypedef struct _Client *ClientPtr; /* also in misc.h */
124706f2543Smrg#define _XTYPEDEF_CLIENTPTR
125706f2543Smrg#endif
126706f2543Smrg
127706f2543Smrgtypedef struct _WorkQueue	*WorkQueuePtr;
128706f2543Smrg
129706f2543Smrgextern _X_EXPORT ClientPtr clients[MAXCLIENTS];
130706f2543Smrgextern _X_EXPORT ClientPtr serverClient;
131706f2543Smrgextern _X_EXPORT int currentMaxClients;
132706f2543Smrgextern _X_EXPORT char dispatchExceptionAtReset;
133706f2543Smrg
134706f2543Smrgtypedef int HWEventQueueType;
135706f2543Smrgtypedef HWEventQueueType* HWEventQueuePtr;
136706f2543Smrg
137706f2543Smrgextern _X_EXPORT HWEventQueuePtr checkForInput[2];
138706f2543Smrg
139706f2543Smrgtypedef struct _TimeStamp {
140706f2543Smrg    CARD32 months;	/* really ~49.7 days */
141706f2543Smrg    CARD32 milliseconds;
142706f2543Smrg}           TimeStamp;
143706f2543Smrg
144706f2543Smrg/* dispatch.c */
145706f2543Smrg
146706f2543Smrgextern _X_EXPORT void SetInputCheck(
147706f2543Smrg    HWEventQueuePtr /*c0*/,
148706f2543Smrg    HWEventQueuePtr /*c1*/);
149706f2543Smrg
150706f2543Smrgextern _X_EXPORT void CloseDownClient(
151706f2543Smrg    ClientPtr /*client*/);
152706f2543Smrg
153706f2543Smrgextern _X_EXPORT void UpdateCurrentTime(void);
154706f2543Smrg
155706f2543Smrgextern _X_EXPORT void UpdateCurrentTimeIf(void);
156706f2543Smrg
157706f2543Smrgextern _X_EXPORT int dixDestroyPixmap(
158706f2543Smrg    pointer /*value*/,
159706f2543Smrg    XID /*pid*/);
160706f2543Smrg
161706f2543Smrgextern _X_EXPORT void InitClient(
162706f2543Smrg    ClientPtr /*client*/,
163706f2543Smrg    int /*i*/,
164706f2543Smrg    pointer /*ospriv*/);
165706f2543Smrg
166706f2543Smrgextern _X_EXPORT ClientPtr NextAvailableClient(
167706f2543Smrg    pointer /*ospriv*/);
168706f2543Smrg
169706f2543Smrgextern _X_EXPORT void SendErrorToClient(
170706f2543Smrg    ClientPtr /*client*/,
171706f2543Smrg    unsigned int /*majorCode*/,
172706f2543Smrg    unsigned int /*minorCode*/,
173706f2543Smrg    XID /*resId*/,
174706f2543Smrg    int /*errorCode*/);
175706f2543Smrg
176706f2543Smrgextern _X_EXPORT void MarkClientException(
177706f2543Smrg    ClientPtr /*client*/);
178706f2543Smrg
179706f2543Smrgextern _X_HIDDEN Bool CreateConnectionBlock(void);
180706f2543Smrg/* dixutils.c */
181706f2543Smrg
182706f2543Smrgextern _X_EXPORT int CompareISOLatin1Lowered(
183706f2543Smrg    unsigned char * /*a*/,
184706f2543Smrg    int alen,
185706f2543Smrg    unsigned char * /*b*/,
186706f2543Smrg    int blen);
187706f2543Smrg
188706f2543Smrgextern _X_EXPORT int dixLookupWindow(
189706f2543Smrg    WindowPtr *result,
190706f2543Smrg    XID id,
191706f2543Smrg    ClientPtr client,
192706f2543Smrg    Mask access_mode);
193706f2543Smrg
194706f2543Smrgextern _X_EXPORT int dixLookupDrawable(
195706f2543Smrg    DrawablePtr *result,
196706f2543Smrg    XID id,
197706f2543Smrg    ClientPtr client,
198706f2543Smrg    Mask type_mask,
199706f2543Smrg    Mask access_mode);
200706f2543Smrg
201706f2543Smrgextern _X_EXPORT int dixLookupGC(
202706f2543Smrg    GCPtr *result,
203706f2543Smrg    XID id,
204706f2543Smrg    ClientPtr client,
205706f2543Smrg    Mask access_mode);
206706f2543Smrg
207706f2543Smrgextern _X_EXPORT int dixLookupFontable(
208706f2543Smrg    FontPtr *result,
209706f2543Smrg    XID id,
210706f2543Smrg    ClientPtr client,
211706f2543Smrg    Mask access_mode);
212706f2543Smrg
213706f2543Smrgextern _X_EXPORT int dixLookupClient(
214706f2543Smrg    ClientPtr *result,
215706f2543Smrg    XID id,
216706f2543Smrg    ClientPtr client,
217706f2543Smrg    Mask access_mode);
218706f2543Smrg
219706f2543Smrgextern _X_EXPORT void NoopDDA(void);
220706f2543Smrg
221706f2543Smrgextern _X_EXPORT int AlterSaveSetForClient(
222706f2543Smrg    ClientPtr /*client*/,
223706f2543Smrg    WindowPtr /*pWin*/,
224706f2543Smrg    unsigned /*mode*/,
225706f2543Smrg    Bool /*toRoot*/,
226706f2543Smrg    Bool /*map*/);
227706f2543Smrg
228706f2543Smrgextern _X_EXPORT void DeleteWindowFromAnySaveSet(
229706f2543Smrg    WindowPtr /*pWin*/);
230706f2543Smrg
231706f2543Smrgextern _X_EXPORT void BlockHandler(
232706f2543Smrg    pointer /*pTimeout*/,
233706f2543Smrg    pointer /*pReadmask*/);
234706f2543Smrg
235706f2543Smrgextern _X_EXPORT void WakeupHandler(
236706f2543Smrg    int /*result*/,
237706f2543Smrg    pointer /*pReadmask*/);
238706f2543Smrg
239706f2543Smrgvoid
240706f2543SmrgEnableLimitedSchedulingLatency(void);
241706f2543Smrg
242706f2543Smrgvoid
243706f2543SmrgDisableLimitedSchedulingLatency(void);
244706f2543Smrg
245706f2543Smrgtypedef void (* WakeupHandlerProcPtr)(
246706f2543Smrg    pointer /* blockData */,
247706f2543Smrg    int /* result */,
248706f2543Smrg    pointer /* pReadmask */);
249706f2543Smrg
250706f2543Smrgextern _X_EXPORT Bool RegisterBlockAndWakeupHandlers(
251706f2543Smrg    BlockHandlerProcPtr /*blockHandler*/,
252706f2543Smrg    WakeupHandlerProcPtr /*wakeupHandler*/,
253706f2543Smrg    pointer /*blockData*/);
254706f2543Smrg
255706f2543Smrgextern _X_EXPORT void RemoveBlockAndWakeupHandlers(
256706f2543Smrg    BlockHandlerProcPtr /*blockHandler*/,
257706f2543Smrg    WakeupHandlerProcPtr /*wakeupHandler*/,
258706f2543Smrg    pointer /*blockData*/);
259706f2543Smrg
260706f2543Smrgextern _X_EXPORT void InitBlockAndWakeupHandlers(void);
261706f2543Smrg
262706f2543Smrgextern _X_EXPORT void ProcessWorkQueue(void);
263706f2543Smrg
264706f2543Smrgextern _X_EXPORT void ProcessWorkQueueZombies(void);
265706f2543Smrg
266706f2543Smrgextern _X_EXPORT Bool QueueWorkProc(
267706f2543Smrg    Bool (* /*function*/)(
268706f2543Smrg        ClientPtr /*clientUnused*/,
269706f2543Smrg        pointer /*closure*/),
270706f2543Smrg    ClientPtr /*client*/,
271706f2543Smrg    pointer /*closure*/
272706f2543Smrg);
273706f2543Smrg
274706f2543Smrgtypedef Bool (* ClientSleepProcPtr)(
275706f2543Smrg    ClientPtr /*client*/,
276706f2543Smrg    pointer /*closure*/);
277706f2543Smrg
278706f2543Smrgextern _X_EXPORT Bool ClientSleep(
279706f2543Smrg    ClientPtr /*client*/,
280706f2543Smrg    ClientSleepProcPtr /* function */,
281706f2543Smrg    pointer /*closure*/);
282706f2543Smrg
283706f2543Smrg#ifndef ___CLIENTSIGNAL_DEFINED___
284706f2543Smrg#define ___CLIENTSIGNAL_DEFINED___
285706f2543Smrgextern _X_EXPORT Bool ClientSignal(
286706f2543Smrg    ClientPtr /*client*/);
287706f2543Smrg#endif /* ___CLIENTSIGNAL_DEFINED___ */
288706f2543Smrg
289706f2543Smrgextern _X_EXPORT void ClientWakeup(
290706f2543Smrg    ClientPtr /*client*/);
291706f2543Smrg
292706f2543Smrgextern _X_EXPORT Bool ClientIsAsleep(
293706f2543Smrg    ClientPtr /*client*/);
294706f2543Smrg
295706f2543Smrg/* atom.c */
296706f2543Smrg
297706f2543Smrgextern _X_EXPORT Atom MakeAtom(
298706f2543Smrg    const char * /*string*/,
299706f2543Smrg    unsigned /*len*/,
300706f2543Smrg    Bool /*makeit*/);
301706f2543Smrg
302706f2543Smrgextern _X_EXPORT Bool ValidAtom(
303706f2543Smrg    Atom /*atom*/);
304706f2543Smrg
305706f2543Smrgextern _X_EXPORT const char *NameForAtom(
306706f2543Smrg    Atom /*atom*/);
307706f2543Smrg
308706f2543Smrgextern _X_EXPORT void AtomError(void) _X_NORETURN;
309706f2543Smrg
310706f2543Smrgextern _X_EXPORT void FreeAllAtoms(void);
311706f2543Smrg
312706f2543Smrgextern _X_EXPORT void InitAtoms(void);
313706f2543Smrg
314706f2543Smrg/* main.c */
315706f2543Smrg
316706f2543Smrgextern _X_EXPORT void SetVendorRelease(int release);
317706f2543Smrg
318706f2543Smrgextern _X_EXPORT void SetVendorString(char *string);
319706f2543Smrg
320706f2543Smrg/* events.c */
321706f2543Smrg
322706f2543Smrgextern void SetMaskForEvent(
323706f2543Smrg    int /* deviceid */,
324706f2543Smrg    Mask /* mask */,
325706f2543Smrg    int /* event */);
326706f2543Smrg
327706f2543Smrgextern _X_EXPORT void ConfineToShape(
328706f2543Smrg    DeviceIntPtr /* pDev */,
329706f2543Smrg    RegionPtr /* shape */,
330706f2543Smrg    int*      /* px */,
331706f2543Smrg    int*      /* py */);
332706f2543Smrg
333706f2543Smrgextern _X_EXPORT Bool IsParent(
334706f2543Smrg    WindowPtr /* maybeparent */,
335706f2543Smrg    WindowPtr /* child */);
336706f2543Smrg
337706f2543Smrgextern _X_EXPORT WindowPtr GetCurrentRootWindow(DeviceIntPtr pDev);
338706f2543Smrg
339706f2543Smrgextern _X_EXPORT WindowPtr GetSpriteWindow(DeviceIntPtr pDev);
340706f2543Smrg
341706f2543Smrg
342706f2543Smrgextern _X_EXPORT void NoticeEventTime(InternalEvent *ev);
343706f2543Smrg
344706f2543Smrgextern void EnqueueEvent(
345706f2543Smrg    InternalEvent * /* ev */,
346706f2543Smrg    DeviceIntPtr  /* device */);
347706f2543Smrg
348706f2543Smrgextern void ActivatePointerGrab(
349706f2543Smrg    DeviceIntPtr /* mouse */,
350706f2543Smrg    GrabPtr /* grab */,
351706f2543Smrg    TimeStamp /* time */,
352706f2543Smrg    Bool /* autoGrab */);
353706f2543Smrg
354706f2543Smrgextern void DeactivatePointerGrab(
355706f2543Smrg    DeviceIntPtr /* mouse */);
356706f2543Smrg
357706f2543Smrgextern void ActivateKeyboardGrab(
358706f2543Smrg    DeviceIntPtr /* keybd */,
359706f2543Smrg    GrabPtr /* grab */,
360706f2543Smrg    TimeStamp /* time */,
361706f2543Smrg    Bool /* passive */);
362706f2543Smrg
363706f2543Smrgextern void DeactivateKeyboardGrab(
364706f2543Smrg    DeviceIntPtr /* keybd */);
365706f2543Smrg
366706f2543Smrgextern BOOL ActivateFocusInGrab(
367706f2543Smrg    DeviceIntPtr /* dev */,
368706f2543Smrg    WindowPtr /* old */,
369706f2543Smrg    WindowPtr /* win */);
370706f2543Smrg
371706f2543Smrgextern void AllowSome(
372706f2543Smrg    ClientPtr	/* client */,
373706f2543Smrg    TimeStamp /* time */,
374706f2543Smrg    DeviceIntPtr /* thisDev */,
375706f2543Smrg    int /* newState */);
376706f2543Smrg
377706f2543Smrgextern void ReleaseActiveGrabs(
378706f2543Smrg    ClientPtr client);
379706f2543Smrg
380706f2543Smrgextern GrabPtr CheckPassiveGrabsOnWindow(
381706f2543Smrg    WindowPtr /* pWin */,
382706f2543Smrg    DeviceIntPtr /* device */,
383706f2543Smrg    DeviceEvent * /* event */,
384706f2543Smrg    BOOL /* checkCore */,
385706f2543Smrg    BOOL /* activate */);
386706f2543Smrg
387706f2543Smrgextern _X_EXPORT int DeliverEventsToWindow(
388706f2543Smrg    DeviceIntPtr /* pWin */,
389706f2543Smrg    WindowPtr /* pWin */,
390706f2543Smrg    xEventPtr /* pEvents */,
391706f2543Smrg    int /* count */,
392706f2543Smrg    Mask /* filter */,
393706f2543Smrg    GrabPtr /* grab */);
394706f2543Smrg
395706f2543Smrgextern int DeliverDeviceEvents(
396706f2543Smrg    WindowPtr /* pWin */,
397706f2543Smrg    InternalEvent* /* event */,
398706f2543Smrg    GrabPtr /* grab */,
399706f2543Smrg    WindowPtr /* stopAt */,
400706f2543Smrg    DeviceIntPtr /* dev */);
401706f2543Smrg
402706f2543Smrgextern void InitializeSprite(
403706f2543Smrg    DeviceIntPtr /* pDev */,
404706f2543Smrg    WindowPtr    /* pWin */);
405706f2543Smrg
406706f2543Smrgextern void UpdateSpriteForScreen(
407706f2543Smrg    DeviceIntPtr /* pDev */,
408706f2543Smrg    ScreenPtr /* pScreen */);
409706f2543Smrg
410706f2543Smrgextern _X_EXPORT void WindowHasNewCursor(
411706f2543Smrg    WindowPtr /* pWin */);
412706f2543Smrg
413706f2543Smrgextern Bool CheckDeviceGrabs(
414706f2543Smrg    DeviceIntPtr /* device */,
415706f2543Smrg    DeviceEvent* /* event */,
416706f2543Smrg    WindowPtr /* ancestor */);
417706f2543Smrg
418706f2543Smrgextern void DeliverFocusedEvent(
419706f2543Smrg    DeviceIntPtr /* keybd */,
420706f2543Smrg    InternalEvent* /* event */,
421706f2543Smrg    WindowPtr /* window */);
422706f2543Smrg
423706f2543Smrgextern void DeliverGrabbedEvent(
424706f2543Smrg    InternalEvent* /* event */,
425706f2543Smrg    DeviceIntPtr /* thisDev */,
426706f2543Smrg    Bool /* deactivateGrab */);
427706f2543Smrg
428706f2543Smrgextern void FixKeyState(
429706f2543Smrg    DeviceEvent* /* event */,
430706f2543Smrg    DeviceIntPtr /* keybd */);
431706f2543Smrg
432706f2543Smrgextern void RecalculateDeliverableEvents(
433706f2543Smrg    WindowPtr /* pWin */);
434706f2543Smrg
435706f2543Smrgextern _X_EXPORT int OtherClientGone(
436706f2543Smrg    pointer /* value */,
437706f2543Smrg    XID /* id */);
438706f2543Smrg
439706f2543Smrgextern void DoFocusEvents(
440706f2543Smrg    DeviceIntPtr /* dev */,
441706f2543Smrg    WindowPtr /* fromWin */,
442706f2543Smrg    WindowPtr /* toWin */,
443706f2543Smrg    int /* mode */);
444706f2543Smrg
445706f2543Smrgextern int SetInputFocus(
446706f2543Smrg    ClientPtr /* client */,
447706f2543Smrg    DeviceIntPtr /* dev */,
448706f2543Smrg    Window /* focusID */,
449706f2543Smrg    CARD8 /* revertTo */,
450706f2543Smrg    Time /* ctime */,
451706f2543Smrg    Bool /* followOK */);
452706f2543Smrg
453706f2543Smrgextern int GrabDevice(
454706f2543Smrg    ClientPtr /* client */,
455706f2543Smrg    DeviceIntPtr /* dev */,
456706f2543Smrg    unsigned /* this_mode */,
457706f2543Smrg    unsigned /* other_mode */,
458706f2543Smrg    Window /* grabWindow */,
459706f2543Smrg    unsigned /* ownerEvents */,
460706f2543Smrg    Time /* ctime */,
461706f2543Smrg    GrabMask* /* mask */,
462706f2543Smrg    int /* grabtype */,
463706f2543Smrg    Cursor /* curs */,
464706f2543Smrg    Window /* confineToWin */,
465706f2543Smrg    CARD8 * /* status */);
466706f2543Smrg
467706f2543Smrgextern void InitEvents(void);
468706f2543Smrg
469706f2543Smrgextern void CloseDownEvents(void);
470706f2543Smrg
471706f2543Smrgextern void DeleteWindowFromAnyEvents(
472706f2543Smrg    WindowPtr	/* pWin */,
473706f2543Smrg    Bool /* freeResources */);
474706f2543Smrg
475706f2543Smrg
476706f2543Smrgextern Mask EventMaskForClient(
477706f2543Smrg    WindowPtr /* pWin */,
478706f2543Smrg    ClientPtr /* client */);
479706f2543Smrg
480706f2543Smrg
481706f2543Smrg
482706f2543Smrgextern _X_EXPORT int DeliverEvents(
483706f2543Smrg    WindowPtr /*pWin*/,
484706f2543Smrg    xEventPtr /*xE*/,
485706f2543Smrg    int /*count*/,
486706f2543Smrg    WindowPtr /*otherParent*/);
487706f2543Smrg
488706f2543Smrgextern Bool CheckMotion(
489706f2543Smrg    DeviceEvent* /* ev */,
490706f2543Smrg    DeviceIntPtr /* pDev */);
491706f2543Smrg
492706f2543Smrgextern _X_EXPORT void WriteEventsToClient(
493706f2543Smrg    ClientPtr /*pClient*/,
494706f2543Smrg    int	     /*count*/,
495706f2543Smrg    xEventPtr /*events*/);
496706f2543Smrg
497706f2543Smrgextern _X_EXPORT int TryClientEvents(
498706f2543Smrg    ClientPtr /*client*/,
499706f2543Smrg    DeviceIntPtr /* device */,
500706f2543Smrg    xEventPtr /*pEvents*/,
501706f2543Smrg    int /*count*/,
502706f2543Smrg    Mask /*mask*/,
503706f2543Smrg    Mask /*filter*/,
504706f2543Smrg    GrabPtr /*grab*/);
505706f2543Smrg
506706f2543Smrgextern _X_EXPORT void WindowsRestructured(void);
507706f2543Smrg
508706f2543Smrgextern int SetClientPointer(
509706f2543Smrg        ClientPtr /* client */,
510706f2543Smrg        DeviceIntPtr /* device */);
511706f2543Smrg
512706f2543Smrgextern _X_EXPORT DeviceIntPtr PickPointer(
513706f2543Smrg    ClientPtr /* client */);
514706f2543Smrg
515706f2543Smrgextern _X_EXPORT DeviceIntPtr PickKeyboard(
516706f2543Smrg    ClientPtr /* client */);
517706f2543Smrg
518706f2543Smrgextern Bool IsInterferingGrab(
519706f2543Smrg        ClientPtr /* client */,
520706f2543Smrg        DeviceIntPtr /* dev */,
521706f2543Smrg        xEvent* /* events */);
522706f2543Smrg
523706f2543Smrg#ifdef PANORAMIX
524706f2543Smrgextern _X_EXPORT void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff);
525706f2543Smrg#endif
526706f2543Smrg
527706f2543Smrg#ifdef RANDR
528706f2543Smrgextern _X_EXPORT void
529706f2543SmrgScreenRestructured (ScreenPtr pScreen);
530706f2543Smrg#endif
531706f2543Smrg
532706f2543Smrg#ifndef HAVE_FFS
533706f2543Smrgextern _X_EXPORT int ffs(int i);
534706f2543Smrg#endif
535706f2543Smrg
536706f2543Smrg
537706f2543Smrg/*
538706f2543Smrg *  ServerGrabCallback stuff
539706f2543Smrg */
540706f2543Smrg
541706f2543Smrgextern _X_EXPORT CallbackListPtr ServerGrabCallback;
542706f2543Smrg
543706f2543Smrgtypedef enum {SERVER_GRABBED, SERVER_UNGRABBED,
544706f2543Smrg	      CLIENT_PERVIOUS, CLIENT_IMPERVIOUS } ServerGrabState;
545706f2543Smrg
546706f2543Smrgtypedef struct {
547706f2543Smrg    ClientPtr client;
548706f2543Smrg    ServerGrabState grabstate;
549706f2543Smrg} ServerGrabInfoRec;
550706f2543Smrg
551706f2543Smrg/*
552706f2543Smrg *  EventCallback stuff
553706f2543Smrg */
554706f2543Smrg
555706f2543Smrgextern _X_EXPORT CallbackListPtr EventCallback;
556706f2543Smrg
557706f2543Smrgtypedef struct {
558706f2543Smrg    ClientPtr client;
559706f2543Smrg    xEventPtr events;
560706f2543Smrg    int count;
561706f2543Smrg} EventInfoRec;
562706f2543Smrg
563706f2543Smrg/*
564706f2543Smrg *  DeviceEventCallback stuff
565706f2543Smrg */
566706f2543Smrg
567706f2543Smrgextern _X_EXPORT CallbackListPtr DeviceEventCallback;
568706f2543Smrg
569706f2543Smrgtypedef struct {
570706f2543Smrg    InternalEvent *event;
571706f2543Smrg    DeviceIntPtr device;
572706f2543Smrg} DeviceEventInfoRec;
573706f2543Smrg
574706f2543Smrgextern int XItoCoreType(int xi_type);
575706f2543Smrgextern Bool DevHasCursor(DeviceIntPtr pDev);
576706f2543Smrgextern Bool _X_EXPORT IsPointerDevice( DeviceIntPtr dev);
577706f2543Smrgextern Bool _X_EXPORT IsKeyboardDevice(DeviceIntPtr dev);
578706f2543Smrgextern Bool IsPointerEvent(InternalEvent *event);
579706f2543Smrgextern _X_EXPORT Bool IsMaster(DeviceIntPtr dev);
580706f2543Smrg
581706f2543Smrgextern _X_HIDDEN void CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
582706f2543Smrgextern _X_HIDDEN int CorePointerProc(DeviceIntPtr dev, int what);
583706f2543Smrgextern _X_HIDDEN int CoreKeyboardProc(DeviceIntPtr dev, int what);
584706f2543Smrg
585706f2543Smrg
586706f2543Smrg/*
587706f2543Smrg * These are deprecated compatibility functions and will be removed soon!
588706f2543Smrg * Please use the noted replacements instead.
589706f2543Smrg */
590706f2543Smrg/* replaced by dixLookupWindow */
591706f2543Smrgextern _X_EXPORT WindowPtr SecurityLookupWindow(
592706f2543Smrg    XID id,
593706f2543Smrg    ClientPtr client,
594706f2543Smrg    Mask access_mode);
595706f2543Smrg/* replaced by dixLookupWindow */
596706f2543Smrgextern _X_EXPORT WindowPtr LookupWindow(
597706f2543Smrg    XID id,
598706f2543Smrg    ClientPtr client);
599706f2543Smrg
600706f2543Smrg/* replaced by dixLookupDrawable */
601706f2543Smrgextern _X_EXPORT pointer SecurityLookupDrawable(
602706f2543Smrg    XID id,
603706f2543Smrg    ClientPtr client,
604706f2543Smrg    Mask access_mode);
605706f2543Smrg
606706f2543Smrg/* replaced by dixLookupDrawable */
607706f2543Smrgextern _X_EXPORT pointer LookupDrawable(
608706f2543Smrg    XID id,
609706f2543Smrg    ClientPtr client);
610706f2543Smrg
611706f2543Smrg/* replaced by dixLookupClient */
612706f2543Smrgextern _X_EXPORT ClientPtr LookupClient(
613706f2543Smrg    XID id,
614706f2543Smrg    ClientPtr client);
615706f2543Smrg
616706f2543Smrg#endif /* DIX_H */
617