#ifndef DIX_H
#define DIX_H
#include "callback.h"
#include "gc.h"
#include "window.h"
#include "input.h"
#include "cursor.h"
#include "geext.h"
#include "events.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 _X_EXPORT ClientPtr clients[MAXCLIENTS];
extern _X_EXPORT ClientPtr serverClient;
extern _X_EXPORT int currentMaxClients;
extern _X_EXPORT char dispatchExceptionAtReset;
typedef int HWEventQueueType;
typedef HWEventQueueType* HWEventQueuePtr;
extern _X_EXPORT HWEventQueuePtr checkForInput[2];
typedef struct _TimeStamp {
CARD32 months;
CARD32 milliseconds;
} TimeStamp;
extern _X_EXPORT void SetInputCheck(
HWEventQueuePtr ,
HWEventQueuePtr );
extern _X_EXPORT void CloseDownClient(
ClientPtr );
extern _X_EXPORT void UpdateCurrentTime(void);
extern _X_EXPORT void UpdateCurrentTimeIf(void);
extern _X_EXPORT int dixDestroyPixmap(
pointer ,
XID );
extern _X_EXPORT void InitClient(
ClientPtr ,
int ,
pointer );
extern _X_EXPORT ClientPtr NextAvailableClient(
pointer );
extern _X_EXPORT void SendErrorToClient(
ClientPtr ,
unsigned int ,
unsigned int ,
XID ,
int );
extern _X_EXPORT void MarkClientException(
ClientPtr );
extern _X_HIDDEN Bool CreateConnectionBlock(void);
extern _X_EXPORT int CompareISOLatin1Lowered(
unsigned char * ,
int alen,
unsigned char * ,
int blen);
extern _X_EXPORT int dixLookupWindow(
WindowPtr *result,
XID id,
ClientPtr client,
Mask access_mode);
extern _X_EXPORT int dixLookupDrawable(
DrawablePtr *result,
XID id,
ClientPtr client,
Mask type_mask,
Mask access_mode);
extern _X_EXPORT int dixLookupGC(
GCPtr *result,
XID id,
ClientPtr client,
Mask access_mode);
extern _X_EXPORT int dixLookupFontable(
FontPtr *result,
XID id,
ClientPtr client,
Mask access_mode);
extern _X_EXPORT int dixLookupClient(
ClientPtr *result,
XID id,
ClientPtr client,
Mask access_mode);
extern _X_EXPORT void NoopDDA(void);
extern _X_EXPORT int AlterSaveSetForClient(
ClientPtr ,
WindowPtr ,
unsigned ,
Bool ,
Bool );
extern _X_EXPORT void DeleteWindowFromAnySaveSet(
WindowPtr );
extern _X_EXPORT void BlockHandler(
pointer ,
pointer );
extern _X_EXPORT void WakeupHandler(
int ,
pointer );
void
EnableLimitedSchedulingLatency(void);
void
DisableLimitedSchedulingLatency(void);
typedef void (* WakeupHandlerProcPtr)(
pointer ,
int ,
pointer );
extern _X_EXPORT Bool RegisterBlockAndWakeupHandlers(
BlockHandlerProcPtr ,
WakeupHandlerProcPtr ,
pointer );
extern _X_EXPORT void RemoveBlockAndWakeupHandlers(
BlockHandlerProcPtr ,
WakeupHandlerProcPtr ,
pointer );
extern _X_EXPORT void InitBlockAndWakeupHandlers(void);
extern _X_EXPORT void ProcessWorkQueue(void);
extern _X_EXPORT void ProcessWorkQueueZombies(void);
extern _X_EXPORT Bool QueueWorkProc(
Bool (* )(
ClientPtr ,
pointer ),
ClientPtr ,
pointer
);
typedef Bool (* ClientSleepProcPtr)(
ClientPtr ,
pointer );
extern _X_EXPORT Bool ClientSleep(
ClientPtr ,
ClientSleepProcPtr ,
pointer );
#ifndef ___CLIENTSIGNAL_DEFINED___
#define ___CLIENTSIGNAL_DEFINED___
extern _X_EXPORT Bool ClientSignal(
ClientPtr );
#endif
extern _X_EXPORT void ClientWakeup(
ClientPtr );
extern _X_EXPORT Bool ClientIsAsleep(
ClientPtr );
extern _X_EXPORT Atom MakeAtom(
const char * ,
unsigned ,
Bool );
extern _X_EXPORT Bool ValidAtom(
Atom );
extern _X_EXPORT const char *NameForAtom(
Atom );
extern _X_EXPORT void AtomError(void) _X_NORETURN;
extern _X_EXPORT void FreeAllAtoms(void);
extern _X_EXPORT void InitAtoms(void);
extern _X_EXPORT void SetVendorRelease(int release);
extern _X_EXPORT void SetVendorString(char *string);
extern void SetMaskForEvent(
int ,
Mask ,
int );
extern _X_EXPORT void ConfineToShape(
DeviceIntPtr ,
RegionPtr ,
int* ,
int* );
extern _X_EXPORT Bool IsParent(
WindowPtr ,
WindowPtr );
extern _X_EXPORT WindowPtr GetCurrentRootWindow(DeviceIntPtr pDev);
extern _X_EXPORT WindowPtr GetSpriteWindow(DeviceIntPtr pDev);
extern _X_EXPORT void NoticeEventTime(InternalEvent *ev);
extern void EnqueueEvent(
InternalEvent * ,
DeviceIntPtr );
extern void ActivatePointerGrab(
DeviceIntPtr ,
GrabPtr ,
TimeStamp ,
Bool );
extern void DeactivatePointerGrab(
DeviceIntPtr );
extern void ActivateKeyboardGrab(
DeviceIntPtr ,
GrabPtr ,
TimeStamp ,
Bool );
extern void DeactivateKeyboardGrab(
DeviceIntPtr );
extern BOOL ActivateFocusInGrab(
DeviceIntPtr ,
WindowPtr ,
WindowPtr );
extern void AllowSome(
ClientPtr ,
TimeStamp ,
DeviceIntPtr ,
int );
extern void ReleaseActiveGrabs(
ClientPtr client);
extern GrabPtr CheckPassiveGrabsOnWindow(
WindowPtr ,
DeviceIntPtr ,
DeviceEvent * ,
BOOL ,
BOOL );
extern _X_EXPORT int DeliverEventsToWindow(
DeviceIntPtr ,
WindowPtr ,
xEventPtr ,
int ,
Mask ,
GrabPtr );
extern int DeliverDeviceEvents(
WindowPtr ,
InternalEvent* ,
GrabPtr ,
WindowPtr ,
DeviceIntPtr );
extern void InitializeSprite(
DeviceIntPtr ,
WindowPtr );
extern void UpdateSpriteForScreen(
DeviceIntPtr ,
ScreenPtr );
extern _X_EXPORT void WindowHasNewCursor(
WindowPtr );
extern Bool CheckDeviceGrabs(
DeviceIntPtr ,
DeviceEvent* ,
WindowPtr );
extern void DeliverFocusedEvent(
DeviceIntPtr ,
InternalEvent* ,
WindowPtr );
extern void DeliverGrabbedEvent(
InternalEvent* ,
DeviceIntPtr ,
Bool );
extern void FixKeyState(
DeviceEvent* ,
DeviceIntPtr );
extern void RecalculateDeliverableEvents(
WindowPtr );
extern _X_EXPORT 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 ,
GrabMask* ,
int ,
Cursor ,
Window ,
CARD8 * );
extern void InitEvents(void);
extern void CloseDownEvents(void);
extern void DeleteWindowFromAnyEvents(
WindowPtr ,
Bool );
extern Mask EventMaskForClient(
WindowPtr ,
ClientPtr );
extern _X_EXPORT int DeliverEvents(
WindowPtr ,
xEventPtr ,
int ,
WindowPtr );
extern Bool CheckMotion(
DeviceEvent* ,
DeviceIntPtr );
extern _X_EXPORT void WriteEventsToClient(
ClientPtr ,
int ,
xEventPtr );
extern _X_EXPORT int TryClientEvents(
ClientPtr ,
DeviceIntPtr ,
xEventPtr ,
int ,
Mask ,
Mask ,
GrabPtr );
extern _X_EXPORT void WindowsRestructured(void);
extern int SetClientPointer(
ClientPtr ,
DeviceIntPtr );
extern _X_EXPORT DeviceIntPtr PickPointer(
ClientPtr );
extern _X_EXPORT DeviceIntPtr PickKeyboard(
ClientPtr );
extern Bool IsInterferingGrab(
ClientPtr ,
DeviceIntPtr ,
xEvent* );
#ifdef PANORAMIX
extern _X_EXPORT void ReinitializeRootWindow(WindowPtr win, int xoff, int yoff);
#endif
#ifdef RANDR
extern _X_EXPORT void
ScreenRestructured (ScreenPtr pScreen);
#endif
extern _X_EXPORT int ffs(int i);
extern _X_EXPORT CallbackListPtr ServerGrabCallback;
typedef enum {SERVER_GRABBED, SERVER_UNGRABBED,
CLIENT_PERVIOUS, CLIENT_IMPERVIOUS } ServerGrabState;
typedef struct {
ClientPtr client;
ServerGrabState grabstate;
} ServerGrabInfoRec;
extern _X_EXPORT CallbackListPtr EventCallback;
typedef struct {
ClientPtr client;
xEventPtr events;
int count;
} EventInfoRec;
extern _X_EXPORT CallbackListPtr DeviceEventCallback;
typedef struct {
InternalEvent *event;
DeviceIntPtr device;
} DeviceEventInfoRec;
extern int XItoCoreType(int xi_type);
extern Bool DevHasCursor(DeviceIntPtr pDev);
extern Bool _X_EXPORT IsPointerDevice( DeviceIntPtr dev);
extern Bool _X_EXPORT IsKeyboardDevice(DeviceIntPtr dev);
extern Bool IsPointerEvent(InternalEvent *event);
extern _X_EXPORT Bool IsMaster(DeviceIntPtr dev);
extern _X_HIDDEN void CopyKeyClass(DeviceIntPtr device, DeviceIntPtr master);
extern _X_HIDDEN int CorePointerProc(DeviceIntPtr dev, int what);
extern _X_HIDDEN int CoreKeyboardProc(DeviceIntPtr dev, int what);
extern _X_EXPORT WindowPtr SecurityLookupWindow(
XID id,
ClientPtr client,
Mask access_mode);
extern _X_EXPORT WindowPtr LookupWindow(
XID id,
ClientPtr client);
extern _X_EXPORT pointer SecurityLookupDrawable(
XID id,
ClientPtr client,
Mask access_mode);
extern _X_EXPORT pointer LookupDrawable(
XID id,
ClientPtr client);
extern _X_EXPORT ClientPtr LookupClient(
XID id,
ClientPtr client);
#endif