Set event sequence number in WriteEventsToClient instead of at callers.

TryClientEvents already did this; this commit just moves the assignment
one level down so that no event source has to worry about sequence
numbers.

...No event source, that is, except XKB, which inexplicably calls
WriteToClient directly for several events.

Signed-off-by: Jamey Sharp <jamey@minilop.net>
Reviewed-by: Julien Cristau <jcristau@debian.org>
Reviewed-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
Jamey Sharp 2010-05-15 13:12:44 -07:00
parent 4b9600a416
commit 8033fb6c97
24 changed files with 10 additions and 60 deletions

View File

@ -480,7 +480,6 @@ SendScreenSaverNotify (ScreenPtr pScreen, int state, Bool forced)
ScreenSaverEventPtr pEv; ScreenSaverEventPtr pEv;
unsigned long mask; unsigned long mask;
xScreenSaverNotifyEvent ev; xScreenSaverNotifyEvent ev;
ClientPtr client;
int kind; int kind;
UpdateCurrentTimeIf (); UpdateCurrentTimeIf ();
@ -499,18 +498,16 @@ SendScreenSaverNotify (ScreenPtr pScreen, int state, Bool forced)
kind = ScreenSaverInternal; kind = ScreenSaverInternal;
for (pEv = pPriv->events; pEv; pEv = pEv->next) for (pEv = pPriv->events; pEv; pEv = pEv->next)
{ {
client = pEv->client;
if (!(pEv->mask & mask)) if (!(pEv->mask & mask))
continue; continue;
ev.type = ScreenSaverNotify + ScreenSaverEventBase; ev.type = ScreenSaverNotify + ScreenSaverEventBase;
ev.state = state; ev.state = state;
ev.sequenceNumber = client->sequence;
ev.timestamp = currentTime.milliseconds; ev.timestamp = currentTime.milliseconds;
ev.root = WindowTable[pScreen->myNum]->drawable.id; ev.root = WindowTable[pScreen->myNum]->drawable.id;
ev.window = savedScreenInfo[pScreen->myNum].wid; ev.window = savedScreenInfo[pScreen->myNum].wid;
ev.kind = kind; ev.kind = kind;
ev.forced = forced; ev.forced = forced;
WriteEventsToClient (client, 1, (xEvent *) &ev); WriteEventsToClient (pEv->client, 1, (xEvent *) &ev);
} }
} }

View File

@ -198,12 +198,10 @@ SecurityDeleteAuthorization(
while ((pEventClient = pAuth->eventClients)) while ((pEventClient = pAuth->eventClients))
{ {
/* send revocation event event */ /* send revocation event event */
ClientPtr client = rClient(pEventClient);
xSecurityAuthorizationRevokedEvent are; xSecurityAuthorizationRevokedEvent are;
are.type = SecurityEventBase + XSecurityAuthorizationRevoked; are.type = SecurityEventBase + XSecurityAuthorizationRevoked;
are.sequenceNumber = client->sequence;
are.authId = pAuth->id; are.authId = pAuth->id;
WriteEventsToClient(client, 1, (xEvent *)&are); WriteEventsToClient(rClient(pEventClient), 1, (xEvent *)&are);
FreeResource(pEventClient->resource, RT_NONE); FreeResource(pEventClient->resource, RT_NONE);
} }

View File

@ -885,7 +885,6 @@ void
SendShapeNotify (WindowPtr pWin, int which) SendShapeNotify (WindowPtr pWin, int which)
{ {
ShapeEventPtr *pHead, pShapeEvent; ShapeEventPtr *pHead, pShapeEvent;
ClientPtr client;
xShapeNotifyEvent se; xShapeNotifyEvent se;
BoxRec extents; BoxRec extents;
RegionPtr region; RegionPtr region;
@ -940,18 +939,16 @@ SendShapeNotify (WindowPtr pWin, int which)
return; return;
} }
for (pShapeEvent = *pHead; pShapeEvent; pShapeEvent = pShapeEvent->next) { for (pShapeEvent = *pHead; pShapeEvent; pShapeEvent = pShapeEvent->next) {
client = pShapeEvent->client;
se.type = ShapeNotify + ShapeEventBase; se.type = ShapeNotify + ShapeEventBase;
se.kind = which; se.kind = which;
se.window = pWin->drawable.id; se.window = pWin->drawable.id;
se.sequenceNumber = client->sequence;
se.x = extents.x1; se.x = extents.x1;
se.y = extents.y1; se.y = extents.y1;
se.width = extents.x2 - extents.x1; se.width = extents.x2 - extents.x1;
se.height = extents.y2 - extents.y1; se.height = extents.y2 - extents.y1;
se.time = currentTime.milliseconds; se.time = currentTime.milliseconds;
se.shaped = shaped; se.shaped = shaped;
WriteEventsToClient (client, 1, (xEvent *) &se); WriteEventsToClient (pShapeEvent->client, 1, (xEvent *) &se);
} }
} }

View File

@ -943,7 +943,6 @@ ProcShmPutImage(ClientPtr client)
ev.type = ShmCompletionCode; ev.type = ShmCompletionCode;
ev.drawable = stuff->drawable; ev.drawable = stuff->drawable;
ev.sequenceNumber = client->sequence;
ev.minorEvent = X_ShmPutImage; ev.minorEvent = X_ShmPutImage;
ev.majorEvent = ShmReqCode; ev.majorEvent = ShmReqCode;
ev.shmseg = stuff->shmseg; ev.shmseg = stuff->shmseg;

View File

@ -372,7 +372,6 @@ SyncSendAlarmNotifyEvents(SyncAlarm *pAlarm)
ane.type = SyncEventBase + XSyncAlarmNotify; ane.type = SyncEventBase + XSyncAlarmNotify;
ane.kind = XSyncAlarmNotify; ane.kind = XSyncAlarmNotify;
ane.sequenceNumber = pAlarm->client->sequence;
ane.alarm = pAlarm->alarm_id; ane.alarm = pAlarm->alarm_id;
if (pTrigger->pCounter) if (pTrigger->pCounter)
{ {
@ -395,10 +394,7 @@ SyncSendAlarmNotifyEvents(SyncAlarm *pAlarm)
/* send to other interested clients */ /* send to other interested clients */
for (pcl = pAlarm->pEventClients; pcl; pcl = pcl->next) for (pcl = pAlarm->pEventClients; pcl; pcl = pcl->next)
{
ane.sequenceNumber = pcl->client->sequence;
WriteEventsToClient(pcl->client, 1, (xEvent *) &ane); WriteEventsToClient(pcl->client, 1, (xEvent *) &ane);
}
} }
@ -423,7 +419,6 @@ SyncSendCounterNotifyEvents(ClientPtr client, SyncAwait **ppAwait,
SyncTrigger *pTrigger = &(*ppAwait)->trigger; SyncTrigger *pTrigger = &(*ppAwait)->trigger;
pev->type = SyncEventBase + XSyncCounterNotify; pev->type = SyncEventBase + XSyncCounterNotify;
pev->kind = XSyncCounterNotify; pev->kind = XSyncCounterNotify;
pev->sequenceNumber = client->sequence;
pev->counter = pTrigger->pCounter->id; pev->counter = pTrigger->pCounter->id;
pev->wait_value_lo = XSyncValueLow32(pTrigger->test_value); pev->wait_value_lo = XSyncValueLow32(pTrigger->test_value);
pev->wait_value_hi = XSyncValueHigh32(pTrigger->test_value); pev->wait_value_hi = XSyncValueHigh32(pTrigger->test_value);

View File

@ -54,7 +54,6 @@ xcalibrate_event_hook (int x, int y, int pressure, void *closure)
xXCalibrateRawTouchscreenEvent ev; xXCalibrateRawTouchscreenEvent ev;
ev.type = XCalibrateEventBase + X_XCalibrateRawTouchscreen; ev.type = XCalibrateEventBase + X_XCalibrateRawTouchscreen;
ev.sequenceNumber = pClient->sequence;
ev.x = x; ev.x = x;
ev.y = y; ev.y = y;
ev.pressure = pressure; ev.pressure = pressure;

View File

@ -1100,7 +1100,6 @@ ProcXvShmPutImage(ClientPtr client)
ev.type = ShmCompletionCode; ev.type = ShmCompletionCode;
ev.drawable = stuff->drawable; ev.drawable = stuff->drawable;
ev.sequenceNumber = client->sequence;
ev.minorEvent = xv_ShmPutImage; ev.minorEvent = xv_ShmPutImage;
ev.majorEvent = XvReqCode; ev.majorEvent = XvReqCode;
ev.shmseg = stuff->shmseg; ev.shmseg = stuff->shmseg;

View File

@ -50,7 +50,6 @@ DamageExtNotify (DamageExtPtr pDamageExt, BoxPtr pBoxes, int nBoxes)
UpdateCurrentTimeIf (); UpdateCurrentTimeIf ();
ev.type = DamageEventBase + XDamageNotify; ev.type = DamageEventBase + XDamageNotify;
ev.level = pDamageExt->level; ev.level = pDamageExt->level;
ev.sequenceNumber = pClient->sequence;
ev.drawable = pDamageExt->drawable; ev.drawable = pDamageExt->drawable;
ev.damage = pDamageExt->id; ev.damage = pDamageExt->id;
ev.timestamp = currentTime.milliseconds; ev.timestamp = currentTime.milliseconds;

View File

@ -3741,7 +3741,6 @@ SendErrorToClient(ClientPtr client, unsigned majorCode, unsigned minorCode,
memset(&rep, 0, sizeof(xError)); memset(&rep, 0, sizeof(xError));
rep.type = X_Error; rep.type = X_Error;
rep.sequenceNumber = client->sequence;
rep.errorCode = errorCode; rep.errorCode = errorCode;
rep.majorCode = majorCode; rep.majorCode = majorCode;
rep.minorCode = minorCode; rep.minorCode = minorCode;

View File

@ -1841,7 +1841,6 @@ int
TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents, TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
int count, Mask mask, Mask filter, GrabPtr grab) int count, Mask mask, Mask filter, GrabPtr grab)
{ {
int i;
int type; int type;
#ifdef DEBUG_EVENTS #ifdef DEBUG_EVENTS
@ -1908,7 +1907,6 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
{ {
xEvent release = *pEvents; xEvent release = *pEvents;
release.u.u.type = KeyRelease; release.u.u.type = KeyRelease;
release.u.u.sequenceNumber = client->sequence;
WriteEventsToClient(client, 1, &release); WriteEventsToClient(client, 1, &release);
#ifdef DEBUG_EVENTS #ifdef DEBUG_EVENTS
ErrorF(" (plus fake core release for repeat)"); ErrorF(" (plus fake core release for repeat)");
@ -1929,7 +1927,6 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
{ {
deviceKeyButtonPointer release = *(deviceKeyButtonPointer *)pEvents; deviceKeyButtonPointer release = *(deviceKeyButtonPointer *)pEvents;
release.type = DeviceKeyRelease; release.type = DeviceKeyRelease;
release.sequenceNumber = client->sequence;
#ifdef DEBUG_EVENTS #ifdef DEBUG_EVENTS
ErrorF(" (plus fake xi1 release for repeat)"); ErrorF(" (plus fake xi1 release for repeat)");
#endif #endif
@ -1943,14 +1940,6 @@ TryClientEvents (ClientPtr client, DeviceIntPtr dev, xEvent *pEvents,
} }
} }
type &= 0177;
if (type != KeymapNotify)
{
/* all extension events must have a sequence number */
for (i = 0; i < count; i++)
pEvents[i].u.u.sequenceNumber = client->sequence;
}
if (BitIsOn(criticalEvents, type)) if (BitIsOn(criticalEvents, type))
{ {
if (client->smart_priority < SMART_MAX_PRIORITY) if (client->smart_priority < SMART_MAX_PRIORITY)
@ -5672,6 +5661,10 @@ WriteEventsToClient(ClientPtr pClient, int count, xEvent *events)
if (!pClient || pClient == serverClient || pClient->clientGone) if (!pClient || pClient == serverClient || pClient->clientGone)
return; return;
for (i = 0; i < count; i++)
if ((events[i].u.u.type & 0x7f) != KeymapNotify)
events[i].u.u.sequenceNumber = pClient->sequence;
/* Let XKB rewrite the state, as it depends on client preferences. */ /* Let XKB rewrite the state, as it depends on client preferences. */
XkbFilterEvents(pClient, count, events); XkbFilterEvents(pClient, count, events);

View File

@ -88,7 +88,6 @@ do_butmap_change(DeviceIntPtr dev, CARD8 *map, int len, ClientPtr client)
if (!XIShouldNotify(clients[i], dev)) if (!XIShouldNotify(clients[i], dev))
continue; continue;
core_mn.u.u.sequenceNumber = clients[i]->sequence;
WriteEventsToClient(clients[i], 1, &core_mn); WriteEventsToClient(clients[i], 1, &core_mn);
} }

View File

@ -187,7 +187,6 @@ __glXdriSwapEvent(ClientPtr client, void *data, int type, CARD64 ust,
/* unknown swap completion type */ /* unknown swap completion type */
break; break;
} }
wire.sequenceNumber = client->sequence;
wire.drawable = drawable->drawId; wire.drawable = drawable->drawId;
wire.ust_hi = ust >> 32; wire.ust_hi = ust >> 32;
wire.ust_lo = ust & 0xffffffff; wire.ust_lo = ust & 0xffffffff;

View File

@ -331,7 +331,6 @@ SendXF86VidModeNotify(ScreenPtr pScreen, int state, Bool forced)
XF86VidModeEventPtr pEv; XF86VidModeEventPtr pEv;
unsigned long mask; unsigned long mask;
xXF86VidModeNotifyEvent ev; xXF86VidModeNotifyEvent ev;
ClientPtr client;
int kind; int kind;
UpdateCurrentTimeIf (); UpdateCurrentTimeIf ();
@ -343,17 +342,15 @@ SendXF86VidModeNotify(ScreenPtr pScreen, int state, Bool forced)
kind = XF86VidModeModeChange; kind = XF86VidModeModeChange;
for (pEv = pPriv->events; pEv; pEv = pEv->next) for (pEv = pPriv->events; pEv; pEv = pEv->next)
{ {
client = pEv->client;
if (!(pEv->mask & mask)) if (!(pEv->mask & mask))
continue; continue;
ev.type = XF86VidModeNotify + XF86VidModeEventBase; ev.type = XF86VidModeNotify + XF86VidModeEventBase;
ev.state = state; ev.state = state;
ev.sequenceNumber = client->sequence;
ev.timestamp = currentTime.milliseconds; ev.timestamp = currentTime.milliseconds;
ev.root = WindowTable[pScreen->myNum]->drawable.id; ev.root = WindowTable[pScreen->myNum]->drawable.id;
ev.kind = kind; ev.kind = kind;
ev.forced = forced; ev.forced = forced;
WriteEventsToClient (client, 1, (xEvent *) &ev); WriteEventsToClient (pEv->client, 1, (xEvent *) &ev);
} }
} }

View File

@ -161,7 +161,6 @@ DRI2InvalidateBuffersEvent(DrawablePtr pDraw, void *priv)
ClientPtr client = priv; ClientPtr client = priv;
event.type = DRI2EventBase + DRI2_InvalidateBuffers; event.type = DRI2EventBase + DRI2_InvalidateBuffers;
event.sequenceNumber = client->sequence;
event.drawable = pDraw->id; event.drawable = pDraw->id;
WriteEventsToClient(client, 1, (xEvent *)&event); WriteEventsToClient(client, 1, (xEvent *)&event);
@ -363,7 +362,6 @@ DRI2SwapEvent(ClientPtr client, void *data, int type, CARD64 ust, CARD64 msc,
DrawablePtr pDrawable = data; DrawablePtr pDrawable = data;
event.type = DRI2EventBase + DRI2_BufferSwapComplete; event.type = DRI2EventBase + DRI2_BufferSwapComplete;
event.sequenceNumber = client->sequence;
event.event_type = type; event.event_type = type;
event.drawable = pDrawable->id; event.drawable = pDrawable->id;
event.ust_hi = (CARD64)ust >> 32; event.ust_hi = (CARD64)ust >> 32;

View File

@ -341,7 +341,6 @@ ProcAppleWMSelectInput (register ClientPtr client)
void void
AppleWMSendEvent (int type, unsigned int mask, int which, int arg) { AppleWMSendEvent (int type, unsigned int mask, int which, int arg) {
WMEventPtr *pHead, pEvent; WMEventPtr *pHead, pEvent;
ClientPtr client;
xAppleWMNotifyEvent se; xAppleWMNotifyEvent se;
int i; int i;
@ -349,15 +348,13 @@ AppleWMSendEvent (int type, unsigned int mask, int which, int arg) {
if (i != Success || !pHead) if (i != Success || !pHead)
return; return;
for (pEvent = *pHead; pEvent; pEvent = pEvent->next) { for (pEvent = *pHead; pEvent; pEvent = pEvent->next) {
client = pEvent->client;
if ((pEvent->mask & mask) == 0) if ((pEvent->mask & mask) == 0)
continue; continue;
se.type = type + WMEventBase; se.type = type + WMEventBase;
se.kind = which; se.kind = which;
se.arg = arg; se.arg = arg;
se.sequenceNumber = client->sequence;
se.time = currentTime.milliseconds; se.time = currentTime.milliseconds;
WriteEventsToClient (client, 1, (xEvent *) &se); WriteEventsToClient (pEvent->client, 1, (xEvent *) &se);
} }
} }

View File

@ -192,22 +192,16 @@ static void surface_notify(
{ {
DRISurfaceNotifyArg *arg = _arg; DRISurfaceNotifyArg *arg = _arg;
int client_index = (int) x_cvt_vptr_to_uint(data); int client_index = (int) x_cvt_vptr_to_uint(data);
ClientPtr client;
xAppleDRINotifyEvent se; xAppleDRINotifyEvent se;
if (client_index < 0 || client_index >= currentMaxClients) if (client_index < 0 || client_index >= currentMaxClients)
return; return;
client = clients[client_index];
if (client == NULL)
return;
se.type = DRIEventBase + AppleDRISurfaceNotify; se.type = DRIEventBase + AppleDRISurfaceNotify;
se.kind = arg->kind; se.kind = arg->kind;
se.arg = arg->id; se.arg = arg->id;
se.sequenceNumber = client->sequence;
se.time = currentTime.milliseconds; se.time = currentTime.milliseconds;
WriteEventsToClient (client, 1, (xEvent *) &se); WriteEventsToClient (clients[client_index], 1, (xEvent *) &se);
} }
static int static int

View File

@ -319,7 +319,6 @@ winWindowsWMSendEvent (int type, unsigned int mask, int which, int arg,
se.y = y; se.y = y;
se.w = w; se.w = w;
se.h = h; se.h = h;
se.sequenceNumber = client->sequence;
se.time = currentTime.milliseconds; se.time = currentTime.milliseconds;
WriteEventsToClient (client, 1, (xEvent *) &se); WriteEventsToClient (client, 1, (xEvent *) &se);
} }

View File

@ -254,7 +254,6 @@ RRDeliverCrtcEvent (ClientPtr client, WindowPtr pWin, RRCrtcPtr crtc)
ce.type = RRNotify + RREventBase; ce.type = RRNotify + RREventBase;
ce.subCode = RRNotify_CrtcChange; ce.subCode = RRNotify_CrtcChange;
ce.sequenceNumber = client->sequence;
ce.timestamp = pScrPriv->lastSetTime.milliseconds; ce.timestamp = pScrPriv->lastSetTime.milliseconds;
ce.window = pWin->drawable.id; ce.window = pWin->drawable.id;
ce.crtc = crtc->id; ce.crtc = crtc->id;

View File

@ -337,7 +337,6 @@ RRDeliverOutputEvent(ClientPtr client, WindowPtr pWin, RROutputPtr output)
oe.type = RRNotify + RREventBase; oe.type = RRNotify + RREventBase;
oe.subCode = RRNotify_OutputChange; oe.subCode = RRNotify_OutputChange;
oe.sequenceNumber = client->sequence;
oe.timestamp = pScrPriv->lastSetTime.milliseconds; oe.timestamp = pScrPriv->lastSetTime.milliseconds;
oe.configTimestamp = pScrPriv->lastConfigTime.milliseconds; oe.configTimestamp = pScrPriv->lastConfigTime.milliseconds;
oe.window = pWin->drawable.id; oe.window = pWin->drawable.id;

View File

@ -40,7 +40,6 @@ DeliverPropertyEvent(WindowPtr pWin, void *value)
if (!(pRREvent->mask & RROutputPropertyNotifyMask)) if (!(pRREvent->mask & RROutputPropertyNotifyMask))
continue; continue;
event->sequenceNumber = pRREvent->client->sequence;
event->window = pRREvent->window->drawable.id; event->window = pRREvent->window->drawable.id;
WriteEventsToClient(pRREvent->client, 1, (xEvent *)event); WriteEventsToClient(pRREvent->client, 1, (xEvent *)event);
} }

View File

@ -102,13 +102,11 @@ RRDeliverScreenEvent (ClientPtr client, WindowPtr pWin, ScreenPtr pScreen)
se.type = RRScreenChangeNotify + RREventBase; se.type = RRScreenChangeNotify + RREventBase;
se.rotation = (CARD8) (crtc ? crtc->rotation : RR_Rotate_0); se.rotation = (CARD8) (crtc ? crtc->rotation : RR_Rotate_0);
se.timestamp = pScrPriv->lastSetTime.milliseconds; se.timestamp = pScrPriv->lastSetTime.milliseconds;
se.sequenceNumber = client->sequence;
se.configTimestamp = pScrPriv->lastConfigTime.milliseconds; se.configTimestamp = pScrPriv->lastConfigTime.milliseconds;
se.root = pRoot->drawable.id; se.root = pRoot->drawable.id;
se.window = pWin->drawable.id; se.window = pWin->drawable.id;
se.subpixelOrder = PictureGetSubpixelOrder (pScreen); se.subpixelOrder = PictureGetSubpixelOrder (pScreen);
se.sequenceNumber = client->sequence;
se.sizeID = RR10CurrentSizeID (pScreen); se.sizeID = RR10CurrentSizeID (pScreen);
if (se.rotation & (RR_Rotate_90 | RR_Rotate_270)) { if (se.rotation & (RR_Rotate_90 | RR_Rotate_270)) {

View File

@ -169,7 +169,6 @@ CursorDisplayCursor (DeviceIntPtr pDev,
xXFixesCursorNotifyEvent ev; xXFixesCursorNotifyEvent ev;
ev.type = XFixesEventBase + XFixesCursorNotify; ev.type = XFixesEventBase + XFixesCursorNotify;
ev.subtype = XFixesDisplayCursorNotify; ev.subtype = XFixesDisplayCursorNotify;
ev.sequenceNumber = e->pClient->sequence;
ev.window = e->pWindow->drawable.id; ev.window = e->pWindow->drawable.id;
ev.cursorSerial = pCursor->serialNumber; ev.cursorSerial = pCursor->serialNumber;
ev.timestamp = currentTime.milliseconds; ev.timestamp = currentTime.milliseconds;

View File

@ -85,7 +85,6 @@ XFixesSelectionCallback (CallbackListPtr *callbacks, pointer data, pointer args)
memset(&ev, 0, sizeof(xXFixesSelectionNotifyEvent)); memset(&ev, 0, sizeof(xXFixesSelectionNotifyEvent));
ev.type = XFixesEventBase + XFixesSelectionNotify; ev.type = XFixesEventBase + XFixesSelectionNotify;
ev.subtype = subtype; ev.subtype = subtype;
ev.sequenceNumber = e->pClient->sequence;
ev.window = e->pWindow->drawable.id; ev.window = e->pWindow->drawable.id;
if (subtype == XFixesSetSelectionOwnerNotify) if (subtype == XFixesSetSelectionOwnerNotify)
ev.owner = selection->window; ev.owner = selection->window;

View File

@ -102,7 +102,6 @@ XkbSendLegacyMapNotify(DeviceIntPtr kbd, CARD16 xkb_event, CARD16 changed,
if (!XIShouldNotify(clients[i], kbd)) if (!XIShouldNotify(clients[i], kbd))
continue; continue;
core_mn.u.u.sequenceNumber = clients[i]->sequence;
if (keymap_changed) { if (keymap_changed) {
core_mn.u.mappingNotify.request = MappingKeyboard; core_mn.u.mappingNotify.request = MappingKeyboard;