Rect *a;
gint ox = *x, oy = *y;
- /* XXX figure out if it is on screen now, and be rude if it is */
-
/* get where the frame would be */
frame_client_gravity(self->frame, x, y, w, h);
*y = a->y - self->frame->area.width*9/10;
}
+ /* If rudeness wasn't requested, then figure out of the client is currently
+ entirely on the screen. If it is, then be rude even though it wasn't
+ requested */
+ if (!rude) {
+ a = screen_area_monitor(self->desktop, client_monitor(self));
+ if (RECT_CONTAINS_RECT(*a, self->area))
+ rude = TRUE;
+ }
+
/* This here doesn't let windows even a pixel outside the screen,
* when called from client_manage, programs placing themselves are
* forced completely onscreen, while things like
(resized && config_resize_redraw))));
/* if the client is enlarging, then resize the client before the frame */
- if (send_resize_client && user && (w > oldw || h > oldh))
+ if (send_resize_client && user && (w > oldw || h > oldh)) {
XResizeWindow(ob_display, self->window, MAX(w, oldw), MAX(h, oldh));
+ /* resize the plate to show the client padding color underneath */
+ frame_adjust_client_area(self->frame);
+ }
/* find the frame's dimensions and move/resize it */
if (self->decorations != fdecor || self->max_horz != fhorz)
}
/* if the client is shrinking, then resize the frame before the client */
- if (send_resize_client && (!user || (w <= oldw || h <= oldh)))
+ if (send_resize_client && (!user || (w <= oldw || h <= oldh))) {
+ /* resize the plate to show the client padding color underneath */
+ frame_adjust_client_area(self->frame);
+
XResizeWindow(ob_display, self->window, w, h);
+ }
XFlush(ob_display);
}