You need to sign in or sign up before continuing.
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