X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=openbox%2Fclient.c;h=3396796201c0b2bcb4e45f748a6777823cbffa62;hb=564b727966ef1a38309d45b2ab040c3deeb658a4;hp=6b8635be8eaa9d69c40930f6dca485ce4cf18e01;hpb=55d2916c1e24e021d9b9692d2373dc4afff4c5c2;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 6b8635be..33967962 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -754,8 +754,6 @@ gboolean client_find_onscreen(ObClient *self, gint *x, gint *y, gint w, gint h, 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); @@ -781,6 +779,15 @@ gboolean client_find_onscreen(ObClient *self, gint *x, gint *y, gint w, gint 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 @@ -2430,8 +2437,11 @@ void client_configure_full(ObClient *self, gint x, gint y, gint w, gint h, (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) @@ -2477,8 +2487,12 @@ void client_configure_full(ObClient *self, gint x, gint y, gint w, gint h, } /* 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); }