diff --git a/src/window.c b/src/window.c index 6e80dd68..9cb11882 100644 --- a/src/window.c +++ b/src/window.c @@ -2219,6 +2219,14 @@ void wWindowConfigure(WWindow *wwin, int req_x, int req_y, int req_width, int re wFrameWindowConfigure(wwin->frame, req_x, req_y, req_width, h); } + /* + * When the frame is resized/moved, the X server repositions a client + * with non-NorthWest gravity inside the frame to compensate (visible as + * a GravityNotify with xev), leaving it at the wrong offset. + */ + if (wwin->normal_hints->win_gravity != NorthWestGravity) + XMoveWindow(dpy, wwin->client_win, 0, wwin->frame->top_width); + if (!(req_height > wwin->frame->core->height || req_width > wwin->frame->core->width)) XResizeWindow(dpy, wwin->client_win, req_width, req_height); diff --git a/src/wmspec.c b/src/wmspec.c index 4af9ab13..2621200b 100644 --- a/src/wmspec.c +++ b/src/wmspec.c @@ -1524,7 +1524,7 @@ void wNETWMCheckClientHints(WWindow *wwin, int *layer, int *workspace) *workspace = desktop; } - if (XGetWindowProperty(dpy, wwin->client_win, net_wm_state, 0, 1, False, + if (XGetWindowProperty(dpy, wwin->client_win, net_wm_state, 0, 1024L, False, XA_ATOM, &type_ret, &fmt_ret, &nitems_ret, &bytes_after_ret, (unsigned char **)&data) == Success && data) {