- client_try_configure(c, &x, &y, &w, &h, &lw, &lh, TRUE);
- client_move_resize(c, x + (ow - w), y + (oh - h), w, h);
- client_action_end(data);
+ client_try_configure(c, &x, &y, &nw, &nh, &lw, &lh, TRUE);
+ xoff = xoff == 0 ? 0 : (xoff < 0 ? MAX(xoff, ow-nw) : MIN(xoff, ow-nw));
+ yoff = yoff == 0 ? 0 : (yoff < 0 ? MAX(yoff, oh-nh) : MIN(yoff, oh-nh));
+ client_move_resize(c, x + xoff, y + yoff, nw, nh);
+ client_action_end(data, FALSE);