[PATCH:libX11 1/2] Use C99 named initializers to fill in events passed to XSendEvent
Matthieu Herrb
matthieu at herrb.eu
Fri Jul 11 22:37:55 PDT 2014
On 07/12/2014 06:22 AM, Alan Coopersmith wrote:
> 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>
Reviewed-by: Matthieu Herrb <matthieu at herrb.eu>
> ---
> 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));
> + }
> }
>
More information about the xorg-devel
mailing list