[PATCH:libX11 1/2] Use C99 named initializers to fill in events passed to XSendEvent
Alan Coopersmith
alan.coopersmith at oracle.com
Fri Jul 11 21:22:57 PDT 2014
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 considertations.
Before & after output of gcc -S on AMD64 shows insertion of "rep stosq"
instructions to rapidly zero-fill structs.
Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
---
src/Iconify.c | 26 +++++++++++++++-----------
src/ReconfWM.c | 37 ++++++++++++++++++++-----------------
src/Withdraw.c | 22 ++++++++++++----------
3 files changed, 47 insertions(+), 38 deletions(-)
diff --git a/src/Iconify.c b/src/Iconify.c
index 3a969d7..9da4165 100644
--- a/src/Iconify.c
+++ b/src/Iconify.c
@@ -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));
+ }
}
diff --git a/src/ReconfWM.c b/src/ReconfWM.c
index 1776f2e..8dc3534 100644
--- a/src/ReconfWM.c
+++ b/src/ReconfWM.c
@@ -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));
+ }
}
diff --git a/src/Withdraw.c b/src/Withdraw.c
index ac15ddc..1015f5b 100644
--- a/src/Withdraw.c
+++ b/src/Withdraw.c
@@ -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));
+ }
}
--
1.7.9.2
More information about the xorg-devel
mailing list