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 ( ...@@ -67,19 +67,23 @@ Status XIconifyWindow (
Window w, Window w,
int screen) int screen)
{ {
XClientMessageEvent ev;
Window root = RootWindow (dpy, screen);
Atom prop; Atom prop;
prop = XInternAtom (dpy, "WM_CHANGE_STATE", False); 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; return (XSendEvent (dpy, root, False,
ev.window = w; SubstructureRedirectMask|SubstructureNotifyMask,
ev.message_type = prop; (XEvent *)&ev));
ev.format = 32; }
ev.data.l[0] = IconicState;
return (XSendEvent (dpy, root, False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev));
} }
...@@ -41,7 +41,6 @@ Status XReconfigureWMWindow ( ...@@ -41,7 +41,6 @@ Status XReconfigureWMWindow (
unsigned int mask, unsigned int mask,
XWindowChanges *changes) XWindowChanges *changes)
{ {
XConfigureRequestEvent ev;
Window root = RootWindow (dpy, screen); Window root = RootWindow (dpy, screen);
_XAsyncHandler async; _XAsyncHandler async;
_XAsyncErrorState async_state; _XAsyncErrorState async_state;
...@@ -120,20 +119,24 @@ Status XReconfigureWMWindow ( ...@@ -120,20 +119,24 @@ Status XReconfigureWMWindow (
/* /*
* If the request succeeded, then everything is okay; otherwise, send event * If the request succeeded, then everything is okay; otherwise, send event
*/ */
if (!async_state.error_count) return True; if (!async_state.error_count)
return True;
ev.type = ConfigureRequest; else {
ev.window = w; XConfigureRequestEvent ev = {
ev.parent = root; .type = ConfigureRequest,
ev.value_mask = (mask & AllMaskBits); .window = w,
ev.x = changes->x; .parent = root,
ev.y = changes->y; .value_mask = (mask & AllMaskBits),
ev.width = changes->width; .x = changes->x,
ev.height = changes->height; .y = changes->y,
ev.border_width = changes->border_width; .width = changes->width,
ev.above = changes->sibling; .height = changes->height,
ev.detail = changes->stack_mode; .border_width = changes->border_width,
return (XSendEvent (dpy, root, False, .above = changes->sibling,
SubstructureRedirectMask|SubstructureNotifyMask, .detail = changes->stack_mode,
(XEvent *)&ev)); };
return (XSendEvent (dpy, root, False,
SubstructureRedirectMask|SubstructureNotifyMask,
(XEvent *)&ev));
}
} }
...@@ -67,16 +67,18 @@ Status XWithdrawWindow ( ...@@ -67,16 +67,18 @@ Status XWithdrawWindow (
Window w, Window w,
int screen) int screen)
{ {
XUnmapEvent ev;
Window root = RootWindow (dpy, screen);
XUnmapWindow (dpy, w); XUnmapWindow (dpy, w);
ev.type = UnmapNotify; {
ev.event = root; Window root = RootWindow (dpy, screen);
ev.window = w; XUnmapEvent ev = {
ev.from_configure = False; .type = UnmapNotify,
return (XSendEvent (dpy, root, False, .event = root,
SubstructureRedirectMask|SubstructureNotifyMask, .window = w,
(XEvent *)&ev)); .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