diff --git a/src/client.c b/src/client.c index 3287306b..10f25719 100644 --- a/src/client.c +++ b/src/client.c @@ -81,6 +81,13 @@ void wClientRestore(WWindow * wwin) if (gy > 0) wwin->frame_y += (wwin->frame->top_width + wwin->frame->bottom_width); #endif + /* account for titlebar and border */ + wwin->frame_y += wwin->frame->top_width; + if (HAS_BORDER(wwin)) { + wwin->frame_x += FRAME_BORDER_WIDTH; + wwin->frame_y += FRAME_BORDER_WIDTH; + } + XSetWindowBorderWidth(dpy, wwin->client_win, wwin->old_border_width); XReparentWindow(dpy, wwin->client_win, wwin->screen_ptr->root_win, wwin->frame_x, wwin->frame_y); diff --git a/src/placement.c b/src/placement.c index b30e0aff..3d219d69 100644 --- a/src/placement.c +++ b/src/placement.c @@ -523,6 +523,7 @@ void PlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, unsigned width, unsigned WScreen *scr = wwin->screen_ptr; int h = WMFontHeight(scr->title_font) + (wPreferences.window_title_clearance + TITLEBAR_EXTEND_SPACE) * 2; + int border_width; if (h > wPreferences.window_title_max_height) h = wPreferences.window_title_max_height; @@ -577,13 +578,14 @@ void PlaceWindow(WWindow *wwin, int *x_ret, int *y_ret, unsigned width, unsigned * this will also take dock/clip etc.. into account * aswell as being xinerama friendly */ - if (*x_ret + width > usableArea.x2) - *x_ret = usableArea.x2 - width; + border_width = (HAS_BORDER(wwin)) ? 2 * FRAME_BORDER_WIDTH : 0; + if (*x_ret + border_width + width > usableArea.x2) + *x_ret = usableArea.x2 - border_width - width; if (*x_ret < usableArea.x1) *x_ret = usableArea.x1; - if (*y_ret + height > usableArea.y2) - *y_ret = usableArea.y2 - height; + if (*y_ret + border_width + height > usableArea.y2) + *y_ret = usableArea.y2 - border_width - height; if (*y_ret < usableArea.y1) *y_ret = usableArea.y1; } diff --git a/src/window.c b/src/window.c index b07d9d43..7f0a1fee 100644 --- a/src/window.c +++ b/src/window.c @@ -591,6 +591,7 @@ WWindow *wManageWindow(WScreen *scr, Window window) char *title; Bool withdraw = False; Bool raise = False; + Bool frame_adjustment = True; /* mutex. */ XGrabServer(dpy); @@ -994,6 +995,7 @@ WWindow *wManageWindow(WScreen *scr, Window window) } else { PlaceWindow(wwin, &x, &y, width, height); + frame_adjustment = False; } if (wPreferences.window_placement == WPM_MANUAL) { dontBring = True; @@ -1144,7 +1146,7 @@ WWindow *wManageWindow(WScreen *scr, Window window) y -= wwin->frame->top_width + wwin->frame->bottom_width; } - { + if (frame_adjustment) { WMRect rect; WArea usableArea; int head; @@ -1161,7 +1163,6 @@ WWindow *wManageWindow(WScreen *scr, Window window) * 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;