Hi,

This comment is not about your patch :-)
IMO wManageWindow() is so big. Probably we should think split it in multiple 
functions.

Cheers.
kix

On Thu, 15 Nov 2012, Iain Patterson escribió:

>   Fix for the bug reported by Paul Seelig whereby windows drift when
> Window Maker is restarted.  This patch builds on
> b657f15344f193d70747689f96cefddc8baa2181 which is already in next.

> From 614fe5887bc2d38f8d115b791dbaca09e6e4cf5e Mon Sep 17 00:00:00 2001
> From: Iain Patterson <[email protected]>
> Date: Thu, 15 Nov 2012 16:55:52 -0800
> Subject: [PATCH] Prevent windows from drifting on restart.
> 
> Bug report from Paul Seelig:
> 
> "Yet another rather strange glitch:
> 
> - open three terminal windows
> - repeatedly restart wmaker
> - all windows slowly drift to the left and up by just a few pixels
> 
> If i remember correctly, this is also a longstanding issue and nothing
> new. It is no showstopper either, as one rarely restarts wmaker."
> 
> The slight drifting left and up seems to have been due to
> wWindowConfigure() accounting for the window border when placing, which
> was fixed in an earlier commit.
> 
> Windows could still shuffle down, however, because wWindowConfigure()
> was moving the window down to make room for its window frame.
> We now move it up by the titlebar height to cancel out that movement.
> ---
>  src/window.c | 28 +++++++++++++++++++---------
>  1 file changed, 19 insertions(+), 9 deletions(-)
> 
> diff --git a/src/window.c b/src/window.c
> index 9970c1a..b07d9d4 100644
> --- a/src/window.c
> +++ b/src/window.c
> @@ -1144,11 +1144,7 @@ WWindow *wManageWindow(WScreen *scr, Window window)
>                       y -= wwin->frame->top_width + wwin->frame->bottom_width;
>       }
>  
> -     /* wWindowConfigure() will account for the window border
> -      * when placing so the window would be shifted without
> -      * the adjustment below
> -      */
> -     if (HAS_BORDER(wwin)) {
> +     {
>               WMRect rect;
>               WArea usableArea;
>               int head;
> @@ -1161,10 +1157,24 @@ WWindow *wManageWindow(WScreen *scr, Window window)
>               head = wGetHeadForRect(scr, rect);
>               usableArea = wGetUsableAreaForHead(scr, head, NULL, True);
>  
> -             if (x >= usableArea.x1 + 2 * FRAME_BORDER_WIDTH)
> -                     x -= 2 * FRAME_BORDER_WIDTH;
> -             if (y >= usableArea.y1 + 2 * FRAME_BORDER_WIDTH)
> -                     y -= 2 * FRAME_BORDER_WIDTH;
> +             /* wWindowConfigure() will account for the frame
> +              * when placing so the window would be shifted without
> +              * the adjustment below
> +              */
> +
> +             if (y >= usableArea.y1 + wwin->frame->top_width)
> +                     y -= wwin->frame->top_width;
> +
> +             /* wWindowConfigure() will account for the window border
> +              * when placing so the window would be shifted without
> +              * the adjustment below
> +              */
> +             if (HAS_BORDER(wwin)) {
> +                     if (x >= usableArea.x1 + FRAME_BORDER_WIDTH)
> +                             x -= FRAME_BORDER_WIDTH;
> +                     if (y >= usableArea.y1 + FRAME_BORDER_WIDTH)
> +                             y -= FRAME_BORDER_WIDTH;
> +             }
>       }
>  
>       /*
> -- 
> 1.7.11.4
> 


-- 
||// //\\// Rodolfo "kix" Garcia
||\\// //\\ http://www.kix.es/


-- 
To unsubscribe, send mail to [email protected].

Reply via email to