#ifndef DIX_H
#define DIX_H
#include "gc.h"
#include "window.h"
#include "input.h"
#include "cursor.h"
#include "geext.h"
#include <X11/extensions/XI.h>
#define EARLIER -1
#define SAMETIME 0
#define LATER 1
#define NullClient ((ClientPtr) 0)
#define REQUEST(type) \
type *stuff = (type *)client->requestBuffer
#define REQUEST_SIZE_MATCH(req)\
if ((sizeof(req) >> 2) != client->req_len)\
return(BadLength)
#define REQUEST_AT_LEAST_SIZE(req) \
if ((sizeof(req) >> 2) > client->req_len )\
return(BadLength)
#define REQUEST_FIXED_SIZE(req, n)\
if (((sizeof(req) >> 2) > client->req_len) || \
(((sizeof(req) + (n) + 3) >> 2) != client->req_len)) \
return(BadLength)
#define LEGAL_NEW_RESOURCE(id,client)\
if (!LegalNewID(id,client)) \
{\
client->errorValue = id;\
return(BadIDChoice);\
}
#define VALIDATE_DRAWABLE_AND_GC(drawID, pDraw, mode)\
{\
int rc = dixLookupDrawable(&(pDraw), drawID, client, M_ANY, mode);\
if (rc != Success)\
return rc;\
rc = dixLookupGC(&(pGC), stuff->gc, client, DixUseAccess);\
if (rc != Success)\
return rc;\
if ((pGC->depth != pDraw->depth) || (pGC->pScreen != pDraw->pScreen))\
return (BadMatch);\
}\
if (pGC->serialNumber != pDraw->serialNumber)\
ValidateGC(pDraw, pGC);
#define WriteReplyToClient(pClient, size, pReply) { \
if ((pClient)->swapped) \
(*ReplySwapVector[((xReq *)(pClient)->requestBuffer)->reqType]) \
(pClient, (int)(size), pReply); \
else (void) WriteToClient(pClient, (int)(size), (char *)(pReply)); }
#define WriteSwappedDataToClient(pClient, size, pbuf) \
if ((pClient)->swapped) \
(*(pClient)->pSwapReplyFunc)(pClient, (int)(size), pbuf); \
else (void) WriteToClient (pClient, (int)(size), (char *)(pbuf));
typedef struct _TimeStamp *TimeStampPtr;
#ifndef _XTYPEDEF_CLIENTPTR
typedef struct _Client *ClientPtr;
#define _XTYPEDEF_CLIENTPTR
#endif
typedef struct _WorkQueue *WorkQueuePtr;
extern ClientPtr clients[MAXCLIENTS];
extern ClientPtr serverClient;
extern int currentMaxClients;
extern char dispatchExceptionAtReset;
typedef int HWEventQueueType;
typedef HWEventQueueType* HWEventQueuePtr;
extern HWEventQueuePtr checkForInput[2];
typedef struct _TimeStamp {
CARD32 months;
CARD32 milliseconds;
} TimeStamp;
extern void SetInputCheck(
HWEventQueuePtr ,
HWEventQueuePtr );
extern void CloseDownClient(
ClientPtr );
extern void UpdateCurrentTime(void);
extern void UpdateCurrentTimeIf(void);
extern int dixDestroyPixmap(
pointer ,
XID );
extern void InitClient(
ClientPtr ,
int ,
pointer );
extern ClientPtr NextAvailableClient(
pointer );
extern void SendErrorToClient(
ClientPtr ,
unsigned int ,
unsigned int ,
XID ,
int );
extern void MarkClientException(
ClientPtr );
extern void ddxBeforeReset (void);
extern void CopyISOLatin1Lowered(
unsigned char * ,
unsigned char * ,
int );
extern int CompareISOLatin1Lowered(
unsigned char * ,
int alen,
unsigned char * ,
int blen);
extern int dixLookupWindow(
WindowPtr *result,
XID id,
ClientPtr client,
Mask access_mode);
extern int dixLookupDrawable(
DrawablePtr *result,
XID id,
ClientPtr client,
Mask type_mask,
Mask access_mode);
extern int dixLookupGC(
GCPtr *result,
XID id,
ClientPtr client,
Mask access_mode);
extern int dixLookupClient(
ClientPtr *result,
XID id,
ClientPtr client,
Mask access_mode);
extern void NoopDDA(void);
extern int AlterSaveSetForClient(
ClientPtr ,
WindowPtr ,
unsigned ,
Bool ,
Bool );
extern void DeleteWindowFromAnySaveSet(
WindowPtr );
extern void BlockHandler(
pointer ,
pointer );
extern void WakeupHandler(
int ,
pointer );
typedef void (* WakeupHandlerProcPtr)(
pointer ,
int ,
pointer );
extern Bool RegisterBlockAndWakeupHandlers(
BlockHandlerProcPtr ,
WakeupHandlerProcPtr ,
pointer );
extern void RemoveBlockAndWakeupHandlers(
BlockHandlerProcPtr ,
WakeupHandlerProcPtr ,
pointer );
extern void InitBlockAndWakeupHandlers(void);
extern void ProcessWorkQueue(void);
extern void ProcessWorkQueueZombies(void);
extern Bool QueueWorkProc(
Bool (* )(
ClientPtr ,
pointer ),
ClientPtr ,
pointer
);
typedef Bool (* ClientSleepProcPtr)(
ClientPtr ,
pointer );
extern Bool ClientSleep(
ClientPtr ,
ClientSleepProcPtr ,
pointer );
#ifndef ___CLIENTSIGNAL_DEFINED___
#define ___CLIENTSIGNAL_DEFINED___
extern Bool ClientSignal(
ClientPtr );
#endif
extern void ClientWakeup(
ClientPtr );
extern Bool ClientIsAsleep(
ClientPtr );
extern Atom MakeAtom(
char * ,
unsigned ,
Bool );
extern Bool ValidAtom(
Atom );
extern char *NameForAtom(
Atom );
extern void AtomError(void);
extern void FreeAllAtoms(void);
extern void InitAtoms(void);
extern void SetVendorRelease(int release);
extern void SetVendorString(char *string);
extern void SetMaskForEvent(
int ,
Mask ,
int );
extern void ConfineToShape(
DeviceIntPtr ,
RegionPtr ,
int* ,
int* );
extern Bool IsParent(
WindowPtr ,
WindowPtr );
extern WindowPtr GetCurrentRootWindow(DeviceIntPtr pDev);
extern WindowPtr GetSpriteWindow(DeviceIntPtr pDev);
extern void NoticeEventTime(xEventPtr );
extern void EnqueueEvent(
xEventPtr ,
DeviceIntPtr ,
int );
extern void ActivatePointerGrab(
DeviceIntPtr ,
GrabPtr ,
TimeStamp ,
Bool );
extern void DeactivatePointerGrab(
DeviceIntPtr );
extern void ActivateKeyboardGrab(
DeviceIntPtr ,
GrabPtr ,
TimeStamp ,
Bool );
extern void DeactivateKeyboardGrab(
DeviceIntPtr );
extern void AllowSome(
ClientPtr ,
TimeStamp ,
DeviceIntPtr ,
int ,
Bool );
extern void ReleaseActiveGrabs(
ClientPtr client);
extern int DeliverEventsToWindow(
DeviceIntPtr ,
WindowPtr ,
xEventPtr ,
int ,
Mask ,
GrabPtr ,
int );
extern int DeliverDeviceEvents(
WindowPtr ,
xEventPtr ,
GrabPtr ,
WindowPtr ,
DeviceIntPtr ,
int );
extern void DefineInitialRootWindow(
WindowPtr );
extern void SetupSprite(
DeviceIntPtr ,
ScreenPtr );
extern void InitializeSprite(
DeviceIntPtr ,
WindowPtr );
extern void UpdateSpriteForScreen(
DeviceIntPtr ,
ScreenPtr );
extern void WindowHasNewCursor(
WindowPtr );
extern Bool CheckDeviceGrabs(
DeviceIntPtr ,
xEventPtr ,
int ,
int );
extern void DeliverFocusedEvent(
DeviceIntPtr ,
xEventPtr ,
WindowPtr ,
int );
extern void DeliverGrabbedEvent(
xEventPtr ,
DeviceIntPtr ,
Bool ,
int );
#ifdef XKB
extern void FixKeyState(
xEvent * ,
DeviceIntPtr );
#endif
extern void RecalculateDeliverableEvents(
WindowPtr );
extern int OtherClientGone(
pointer ,
XID );
extern void DoFocusEvents(
DeviceIntPtr ,
WindowPtr ,
WindowPtr ,
int );
extern int SetInputFocus(
ClientPtr ,
DeviceIntPtr ,
Window ,
CARD8 ,
Time ,
Bool );
extern int GrabDevice(
ClientPtr ,
DeviceIntPtr ,
unsigned ,
unsigned ,
Window ,
unsigned ,
Time ,
Mask ,
CARD8 * ,
Bool );
extern void InitEvents(void);
extern void InitSprite(
DeviceIntPtr ,
Bool
);
extern void CloseDownEvents(void);
extern void DeleteWindowFromAnyEvents(
WindowPtr ,
Bool );
extern Mask EventMaskForClient(
WindowPtr ,
ClientPtr );
extern int DeliverEvents(
WindowPtr ,
xEventPtr ,
int ,
WindowPtr );
extern Bool
CheckMotion(
xEvent* ,
DeviceIntPtr );
extern void WriteEventsToClient(
ClientPtr ,
int ,
xEventPtr );
extern int TryClientEvents(
ClientPtr ,
DeviceIntPtr ,
xEventPtr ,
int ,
Mask ,
Mask ,
GrabPtr );
extern void WindowsRestructured(void);
extern Bool SetClientPointer(
ClientPtr ,
ClientPtr ,
DeviceIntPtr );
extern DeviceIntPtr PickPointer(
ClientPtr );
extern DeviceIntPtr PickKeyboard(
ClientPtr );
extern Bool IsInterferingGrab(
ClientPtr ,
DeviceIntPtr ,
xEvent* );
#ifdef PANORAMIX
extern void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff);
#endif
#ifdef RANDR
void
ScreenRestructured (ScreenPtr pScreen);
#endif
extern int ffs(int i);
#ifndef _XTYPEDEF_CALLBACKLISTPTR
typedef struct _CallbackList *CallbackListPtr;
#define _XTYPEDEF_CALLBACKLISTPTR
#endif
typedef void (*CallbackProcPtr) (
CallbackListPtr *, pointer, pointer);
extern Bool AddCallback(
CallbackListPtr * ,
CallbackProcPtr ,
pointer );
extern Bool DeleteCallback(
CallbackListPtr * ,
CallbackProcPtr ,
pointer );
extern void CallCallbacks(
CallbackListPtr * ,
pointer );
extern void DeleteCallbackList(
CallbackListPtr * );
extern void InitCallbackManager(void);
extern CallbackListPtr ServerGrabCallback;
typedef enum {SERVER_GRABBED, SERVER_UNGRABBED,
CLIENT_PERVIOUS, CLIENT_IMPERVIOUS } ServerGrabState;
typedef struct {
ClientPtr client;
ServerGrabState grabstate;
} ServerGrabInfoRec;
extern CallbackListPtr EventCallback;
typedef struct {
ClientPtr client;
xEventPtr events;
int count;
} EventInfoRec;
extern CallbackListPtr DeviceEventCallback;
typedef struct {
xEventPtr events;
int count;
} DeviceEventInfoRec;
extern int XItoCoreType(int xi_type);
extern Bool DevHasCursor(DeviceIntPtr pDev);
extern Bool IsPointerDevice( DeviceIntPtr dev);
extern Bool IsKeyboardDevice(DeviceIntPtr dev);
extern Bool IsPointerEvent(xEvent* xE);
extern WindowPtr SecurityLookupWindow(
XID id,
ClientPtr client,
Mask access_mode);
extern WindowPtr LookupWindow(
XID id,
ClientPtr client);
extern pointer SecurityLookupDrawable(
XID id,
ClientPtr client,
Mask access_mode);
extern pointer LookupDrawable(
XID id,
ClientPtr client);
extern ClientPtr LookupClient(
XID id,
ClientPtr client);
extern void SetGenericFilter(int extension, Mask* filters);
extern int ExtGrabDevice(ClientPtr client,
DeviceIntPtr dev,
int device_mode,
WindowPtr grabWindow,
WindowPtr confineTo,
TimeStamp ctime,
Bool ownerEvents,
CursorPtr cursor,
Mask xi_mask,
GenericMaskPtr ge_masks);
#endif