a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/* $XFree86: xc/programs/Xserver/include/dix.h,v 3.26 2003/01/12 02:44:27 dawes Exp $ */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/***********************************************************
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncCopyright 1987, 1998 The Open Group
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncPermission to use, copy, modify, distribute, and sell this software and its
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncdocumentation for any purpose is hereby granted without fee, provided that
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncthe above copyright notice appear in all copies and that both that
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsynccopyright notice and this permission notice appear in supporting
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncdocumentation.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncThe above copyright notice and this permission notice shall be included in
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncall copies or substantial portions of the Software.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncTHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncOPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncAN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncExcept as contained in this notice, the name of The Open Group shall not be
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncused in advertising or otherwise to promote the sale, use or other dealings
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncin this Software without prior written authorization from The Open Group.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncCopyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync All Rights Reserved
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncPermission to use, copy, modify, and distribute this software and its
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncdocumentation for any purpose and without fee is hereby granted,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncprovided that the above copyright notice appear in all copies and that
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncboth that copyright notice and this permission notice appear in
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncsupporting documentation, and that the name of Digital not be
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncused in advertising or publicity pertaining to distribution of the
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncsoftware without specific, written prior permission.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync******************************************************************/
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/* $Xorg: dix.h,v 1.4 2001/02/09 02:05:15 xorgcvs Exp $ */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync register type *stuff = (type *)client->requestBuffer
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync (((sizeof(req) + (n) + 3) >> 2) != client->req_len)) \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync/* XXX if you are using this macro, you are probably not generating Match
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * errors where appropriate */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync client->lastDrawable : (DrawablePtr)LookupDrawable(did, client))
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define SECURITY_VERIFY_DRAWABLE(pDraw, did, client, mode)\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync if (client->lastDrawableID == did && !client->trustLevel)\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync pDraw = (DrawablePtr) SecurityLookupIDByClass(client, did, \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define SECURITY_VERIFY_GEOMETRABLE(pDraw, did, client, mode)\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync if (client->lastDrawableID == did && !client->trustLevel)\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync pDraw = (DrawablePtr) SecurityLookupIDByClass(client, did, \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync if (client->lastGCID == rid && !client->trustLevel)\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync pGC = (GC *) SecurityLookupIDByType(client, rid, RT_GC, mode);\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync SECURITY_VERIFY_DRAWABLE(pDraw, did, client, SecurityUnknownAccess)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync SECURITY_VERIFY_GEOMETRABLE(pDraw, did, client, SecurityUnknownAccess)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync SECURITY_VERIFY_GC(pGC, rid, client, SecurityUnknownAccess)
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#else /* not XCSECURITY */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync pDraw = (DrawablePtr) LookupIDByClass(did, RC_DRAWABLE);\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync pDraw = (DrawablePtr) LookupIDByClass(did, RC_DRAWABLE);\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define SECURITY_VERIFY_DRAWABLE(pDraw, did, client, mode)\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define SECURITY_VERIFY_GEOMETRABLE(pDraw, did, client, mode)\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* XCSECURITY */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * We think that most hardware implementations of DBE will want
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * LookupID*(dbe_back_buffer_id) to return the window structure that the
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * id is a back buffer for. Since both front and back buffers will
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * return the same structure, you need to be able to distinguish
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * somewhere what kind of buffer (front/back) was being asked for, so
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * that ddx can render to the right place. That's the problem that the
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * following code solves. Note: we couldn't embed this in the LookupID*
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * functions because the VALIDATE_DRAWABLE_AND_GC macro often circumvents
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * those functions by checking a one-element cache. That's why we're
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * mucking with VALIDATE_DRAWABLE_AND_GC.
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * If you put -DNEED_DBE_BUF_BITS into PervasiveDBEDefines, the window
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * structure will have two additional bits defined, srcBuffer and
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * dstBuffer, and their values will be maintained via the macros
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * SET_DBE_DSTBUF and SET_DBE_SRCBUF (below). If you also
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * put -DNEED_DBE_BUF_VALIDATE into PervasiveDBEDefines, the function
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * DbeValidateBuffer will be called any time the bits change to give you
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * a chance to do some setup. See the DBE code for more details on this
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * function. We put in these levels of conditionality so that you can do
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * just what you need to do, and no more. If neither of these defines
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * are used, the bits won't be there, and VALIDATE_DRAWABLE_AND_GC will
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * be unchanged. dpw
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define SET_DBE_BUF(_pDraw, _drawID, _whichBuffer, _dstbuf) \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync DbeValidateBuffer((WindowPtr)_pDraw, _drawID, _dstbuf);\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#else /* want buffer bits, but don't need to call DbeValidateBuffer */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define SET_DBE_BUF(_pDraw, _drawID, _whichBuffer, _dstbuf) \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync ((WindowPtr)_pDraw)->_whichBuffer = (_pDraw->id == _drawID);\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* NEED_DBE_BUF_VALIDATE */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#else /* don't want buffer bits in window */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* NEED_DBE_BUF_BITS */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define VALIDATE_DRAWABLE_AND_GC(drawID, pDraw, pGC, client)\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync if ((stuff->gc == INVALID) || (client->lastGCID != stuff->gc) ||\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync SECURITY_VERIFY_GEOMETRABLE(pDraw, drawID, client, SecurityWriteAccess);\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync SECURITY_VERIFY_GC(pGC, stuff->gc, client, SecurityReadAccess);\
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define WriteReplyToClient(pClient, size, pReply) { \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync (*ReplySwapVector[((xReq *)(pClient)->requestBuffer)->reqType]) \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync else (void) WriteToClient(pClient, (int)(size), (char *)(pReply)); }
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define WriteSwappedDataToClient(pClient, size, pbuf) \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync (*(pClient)->pSwapReplyFunc)(pClient, (int)(size), pbuf); \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync else (void) WriteToClient (pClient, (int)(size), (char *)(pbuf));
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsynctypedef struct _Client *ClientPtr; /* also in misc.h */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned int /*majorCode*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned int /*minorCode*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*errorCode*/
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync char* /*reason*/
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*format*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*width*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*height*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* LBX */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned char * /*dest*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned char * /*source*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*length*/
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define SecurityLookupWindow(rid, client, access_mode) \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#define SecurityLookupDrawable(rid, client, access_mode) \
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* XCSECURITY */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned /*mode*/
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*result*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* result */,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* ___CLIENTSIGNAL_DEFINED___ */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync char * /*string*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned /*len*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* event */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* count */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* newState */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* count */,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* mskidx */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* count */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* checkFirst */,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* count */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* count */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* count */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* XKB */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /* mode */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned /* this_mode */,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned /* other_mode */,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned /* ownerEvents */,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsyncextern void CloseDownEvents(void);
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*count*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*count*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*count*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync int /*index*/,
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync unsigned /*amount*/
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * callback manager stuff
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsynctypedef struct _CallbackList *CallbackListPtr; /* also in misc.h */
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * ServerGrabCallback stuff
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync CLIENT_PERVIOUS, CLIENT_IMPERVIOUS } ServerGrabState;
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsynctypedef struct {
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * EventCallback stuff
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsynctypedef struct {
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync * DeviceEventCallback stuff
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsynctypedef struct {
a2760a4d593af57a19ec32cdfd1723b68495df8cvboxsync#endif /* DIX_H */