dix: write out X_GetWindowAttributes reply directly
No need for using a complex callback machinery, if we just move the little pieces of byte-swapping directly into the request handler. Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
This commit is contained in:
parent
71139c015e
commit
f59ffc7c93
|
@ -789,25 +789,6 @@ ProcChangeWindowAttributes(ClientPtr client)
|
||||||
stuff->valueMask, (XID *) &stuff[1], client);
|
stuff->valueMask, (XID *) &stuff[1], client);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
ProcGetWindowAttributes(ClientPtr client)
|
|
||||||
{
|
|
||||||
WindowPtr pWin;
|
|
||||||
|
|
||||||
REQUEST(xResourceReq);
|
|
||||||
xGetWindowAttributesReply wa;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
REQUEST_SIZE_MATCH(xResourceReq);
|
|
||||||
rc = dixLookupWindow(&pWin, stuff->id, client, DixGetAttrAccess);
|
|
||||||
if (rc != Success)
|
|
||||||
return rc;
|
|
||||||
memset(&wa, 0, sizeof(xGetWindowAttributesReply));
|
|
||||||
GetWindowAttributes(pWin, client, &wa);
|
|
||||||
WriteReplyToClient(client, sizeof(xGetWindowAttributesReply), &wa);
|
|
||||||
return Success;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
ProcDestroyWindow(ClientPtr client)
|
ProcDestroyWindow(ClientPtr client)
|
||||||
{
|
{
|
||||||
|
|
|
@ -183,24 +183,6 @@ SGenericReply(ClientPtr pClient, int size, xGenericReply * pRep)
|
||||||
WriteToClient(pClient, size, pRep);
|
WriteToClient(pClient, size, pRep);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Extra-large reply */
|
|
||||||
void _X_COLD
|
|
||||||
SGetWindowAttributesReply(ClientPtr pClient, int size,
|
|
||||||
xGetWindowAttributesReply * pRep)
|
|
||||||
{
|
|
||||||
swaps(&pRep->sequenceNumber);
|
|
||||||
swapl(&pRep->length);
|
|
||||||
swapl(&pRep->visualID);
|
|
||||||
swaps(&pRep->class);
|
|
||||||
swapl(&pRep->backingBitPlanes);
|
|
||||||
swapl(&pRep->backingPixel);
|
|
||||||
swapl(&pRep->colormap);
|
|
||||||
swapl(&pRep->allEventMasks);
|
|
||||||
swapl(&pRep->yourEventMask);
|
|
||||||
swaps(&pRep->doNotPropagateMask);
|
|
||||||
WriteToClient(pClient, size, pRep);
|
|
||||||
}
|
|
||||||
|
|
||||||
void _X_COLD
|
void _X_COLD
|
||||||
SQueryTreeReply(ClientPtr pClient, int size, xQueryTreeReply * pRep)
|
SQueryTreeReply(ClientPtr pClient, int size, xQueryTreeReply * pRep)
|
||||||
{
|
{
|
||||||
|
|
|
@ -718,7 +718,7 @@ ReplySwapPtr ReplySwapVector[256] = {
|
||||||
ReplyNotSwappd,
|
ReplyNotSwappd,
|
||||||
ReplyNotSwappd,
|
ReplyNotSwappd,
|
||||||
ReplyNotSwappd,
|
ReplyNotSwappd,
|
||||||
(ReplySwapPtr) SGetWindowAttributesReply,
|
ReplyNotSwappd,
|
||||||
ReplyNotSwappd,
|
ReplyNotSwappd,
|
||||||
ReplyNotSwappd, /* 5 */
|
ReplyNotSwappd, /* 5 */
|
||||||
ReplyNotSwappd,
|
ReplyNotSwappd,
|
||||||
|
|
80
dix/window.c
80
dix/window.c
|
@ -100,6 +100,7 @@ Equipment Corporation.
|
||||||
|
|
||||||
#include "dix/colormap_priv.h"
|
#include "dix/colormap_priv.h"
|
||||||
#include "dix/cursor_priv.h"
|
#include "dix/cursor_priv.h"
|
||||||
|
#include "dix/dispatch.h"
|
||||||
#include "dix/dix_priv.h"
|
#include "dix/dix_priv.h"
|
||||||
#include "dix/exevents_priv.h"
|
#include "dix/exevents_priv.h"
|
||||||
#include "dix/input_priv.h"
|
#include "dix/input_priv.h"
|
||||||
|
@ -1582,42 +1583,55 @@ ChangeWindowAttributes(WindowPtr pWin, Mask vmask, XID *vlist, ClientPtr client)
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****
|
int
|
||||||
* GetWindowAttributes
|
ProcGetWindowAttributes(ClientPtr client)
|
||||||
* Notice that this is different than ChangeWindowAttributes
|
|
||||||
*****/
|
|
||||||
|
|
||||||
void
|
|
||||||
GetWindowAttributes(WindowPtr pWin, ClientPtr client,
|
|
||||||
xGetWindowAttributesReply * wa)
|
|
||||||
{
|
{
|
||||||
wa->type = X_Reply;
|
REQUEST(xResourceReq);
|
||||||
wa->bitGravity = pWin->bitGravity;
|
REQUEST_SIZE_MATCH(xResourceReq);
|
||||||
wa->winGravity = pWin->winGravity;
|
|
||||||
wa->backingStore = pWin->backingStore;
|
|
||||||
wa->length = bytes_to_int32(sizeof(xGetWindowAttributesReply) -
|
|
||||||
sizeof(xGenericReply));
|
|
||||||
wa->sequenceNumber = client->sequence;
|
|
||||||
wa->backingBitPlanes = wBackingBitPlanes(pWin);
|
|
||||||
wa->backingPixel = wBackingPixel(pWin);
|
|
||||||
wa->saveUnder = (BOOL) pWin->saveUnder;
|
|
||||||
wa->override = pWin->overrideRedirect;
|
|
||||||
if (!pWin->mapped)
|
|
||||||
wa->mapState = IsUnmapped;
|
|
||||||
else if (pWin->realized)
|
|
||||||
wa->mapState = IsViewable;
|
|
||||||
else
|
|
||||||
wa->mapState = IsUnviewable;
|
|
||||||
|
|
||||||
wa->colormap = wColormap(pWin);
|
WindowPtr pWin;
|
||||||
wa->mapInstalled = (wa->colormap == None) ? xFalse
|
int rc = dixLookupWindow(&pWin, stuff->id, client, DixGetAttrAccess);
|
||||||
: IsMapInstalled(wa->colormap, pWin);
|
if (rc != Success)
|
||||||
|
return rc;
|
||||||
|
|
||||||
wa->yourEventMask = EventMaskForClient(pWin, client);
|
xGetWindowAttributesReply rep = {
|
||||||
wa->allEventMasks = pWin->eventMask | wOtherEventMasks(pWin);
|
.type = X_Reply,
|
||||||
wa->doNotPropagateMask = wDontPropagateMask(pWin);
|
.bitGravity = pWin->bitGravity,
|
||||||
wa->class = pWin->drawable.class;
|
.winGravity = pWin->winGravity,
|
||||||
wa->visualID = wVisual(pWin);
|
.backingStore = pWin->backingStore,
|
||||||
|
.length = bytes_to_int32(sizeof(xGetWindowAttributesReply) -
|
||||||
|
sizeof(xGenericReply)),
|
||||||
|
.sequenceNumber = client->sequence,
|
||||||
|
.backingBitPlanes = wBackingBitPlanes(pWin),
|
||||||
|
.backingPixel = wBackingPixel(pWin),
|
||||||
|
.saveUnder = (BOOL) pWin->saveUnder,
|
||||||
|
.override = pWin->overrideRedirect,
|
||||||
|
.mapState = (!pWin->mapped ? IsUnmapped :
|
||||||
|
(pWin->realized ? IsViewable : IsUnviewable)),
|
||||||
|
.colormap = wColormap(pWin),
|
||||||
|
.mapInstalled = (wColormap(pWin) == None) ? xFalse
|
||||||
|
: IsMapInstalled(wColormap(pWin), pWin),
|
||||||
|
.yourEventMask = EventMaskForClient(pWin, client),
|
||||||
|
.allEventMasks = pWin->eventMask | wOtherEventMasks(pWin),
|
||||||
|
.doNotPropagateMask = wDontPropagateMask(pWin),
|
||||||
|
.class = pWin->drawable.class,
|
||||||
|
.visualID = wVisual(pWin),
|
||||||
|
};
|
||||||
|
|
||||||
|
if (client->swapped) {
|
||||||
|
swaps(&rep.sequenceNumber);
|
||||||
|
swapl(&rep.length);
|
||||||
|
swapl(&rep.visualID);
|
||||||
|
swaps(&rep.class);
|
||||||
|
swapl(&rep.backingBitPlanes);
|
||||||
|
swapl(&rep.backingPixel);
|
||||||
|
swapl(&rep.colormap);
|
||||||
|
swapl(&rep.allEventMasks);
|
||||||
|
swapl(&rep.yourEventMask);
|
||||||
|
swaps(&rep.doNotPropagateMask);
|
||||||
|
}
|
||||||
|
WriteToClient(client, sizeof(rep), &rep);
|
||||||
|
return Success;
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowPtr
|
WindowPtr
|
||||||
|
|
|
@ -42,11 +42,6 @@ extern void SGenericReply(ClientPtr /* pClient */ ,
|
||||||
int /* size */ ,
|
int /* size */ ,
|
||||||
xGenericReply * /* pRep */ );
|
xGenericReply * /* pRep */ );
|
||||||
|
|
||||||
extern void SGetWindowAttributesReply(ClientPtr /* pClient */ ,
|
|
||||||
int /* size */ ,
|
|
||||||
xGetWindowAttributesReply *
|
|
||||||
/* pRep */ );
|
|
||||||
|
|
||||||
extern void SQueryTreeReply(ClientPtr /* pClient */ ,
|
extern void SQueryTreeReply(ClientPtr /* pClient */ ,
|
||||||
int /* size */ ,
|
int /* size */ ,
|
||||||
xQueryTreeReply * /* pRep */ );
|
xQueryTreeReply * /* pRep */ );
|
||||||
|
|
Loading…
Reference in New Issue