Commit 0f1fa85f authored by Alan Coopersmith's avatar Alan Coopersmith Committed by Ulrich Sibiller

Use C99 named initializers to fill in events passed to XSendEvent

Forces compiler to zero-fill unset fields in the struct (fixing bug 81236) and allows optimizer to order field initialization to best fit cache layout or other considerations. Before & after output of gcc -S on AMD64 shows insertion of "rep stosq" instructions to rapidly zero-fill structs. Signed-off-by: 's avatarAlan Coopersmith <alan.coopersmith@oracle.com> Reviewed-by: 's avatarMatthieu Herrb <matthieu@herrb.eu> Backported-to-NX-by: 's avatarUlrich Sibiller <uli42@gmx.de>
parent f20f91ee
......@@ -67,19 +67,23 @@ Status XIconifyWindow (
Window w,
int screen)
{
XClientMessageEvent ev;
Window root = RootWindow (dpy, screen);
Atom prop;
prop = XInternAtom (dpy, "WM_CHANGE_STATE", False);
if (prop == None) return False;
if (prop == None)
return False;
else {
XClientMessageEvent ev = {
.type = ClientMessage,
.window = w,
.message_type = prop,
.format = 32,
.data.l[0] = IconicState
};
Window root = RootWindow (dpy, screen);
ev.type = ClientMessage;
ev.window = w;
ev.message_type = prop;
ev.format = 32;
ev.data.l[0] = IconicState;
return (XSendEvent (dpy, root, False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev));
return (XSendEvent (dpy, root, False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev));
}
}
......@@ -41,7 +41,6 @@ Status XReconfigureWMWindow (
unsigned int mask,
XWindowChanges *changes)
{
XConfigureRequestEvent ev;
Window root = RootWindow (dpy, screen);
_XAsyncHandler async;
_XAsyncErrorState async_state;
......@@ -120,20 +119,24 @@ Status XReconfigureWMWindow (
/*
* If the request succeeded, then everything is okay; otherwise, send event
*/
if (!async_state.error_count) return True;
ev.type = ConfigureRequest;
ev.window = w;
ev.parent = root;
ev.value_mask = (mask & AllMaskBits);
ev.x = changes->x;
ev.y = changes->y;
ev.width = changes->width;
ev.height = changes->height;
ev.border_width = changes->border_width;
ev.above = changes->sibling;
ev.detail = changes->stack_mode;
return (XSendEvent (dpy, root, False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev));
if (!async_state.error_count)
return True;
else {
XConfigureRequestEvent ev = {
.type = ConfigureRequest,
.window = w,
.parent = root,
.value_mask = (mask & AllMaskBits),
.x = changes->x,
.y = changes->y,
.width = changes->width,
.height = changes->height,
.border_width = changes->border_width,
.above = changes->sibling,
.detail = changes->stack_mode,
};
return (XSendEvent (dpy, root, False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev));
}
}
......@@ -67,16 +67,18 @@ Status XWithdrawWindow (
Window w,
int screen)
{
XUnmapEvent ev;
Window root = RootWindow (dpy, screen);
XUnmapWindow (dpy, w);
ev.type = UnmapNotify;
ev.event = root;
ev.window = w;
ev.from_configure = False;
return (XSendEvent (dpy, root, False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev));
{
Window root = RootWindow (dpy, screen);
XUnmapEvent ev = {
.type = UnmapNotify,
.event = root,
.window = w,
.from_configure = False
};
return (XSendEvent (dpy, root, False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev));
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment