- if (self->frame.client->decorations & Decor_Handle) {
- XMoveResizeWindow(ob_display, self->handle,
- -self->bwidth, HANDLE_Y(self),
- self->width, s_handle_height);
- XMoveWindow(ob_display, self->lgrip,
- -self->bwidth, -self->bwidth);
- XMoveWindow(ob_display, self->rgrip,
- -self->bwidth + self->width -
- GRIP_WIDTH, -self->bwidth);
- self->innersize.bottom += s_handle_height +
- self->bwidth;
- XMapWindow(ob_display, self->handle);
- } else
- XUnmapWindow(ob_display, self->handle);
-
- XResizeWindow(ob_display, self->frame.window, self->width,
- (self->frame.client->shaded ? TITLE_HEIGHT :
- self->innersize.top + self->innersize.bottom +
- self->frame.client->area.height));
-
- /* do this in two steps because clients whose gravity is set to
- 'Static' don't end up getting moved at all with an XMoveResizeWindow */
- XMoveWindow(ob_display, self->frame.plate,
- self->innersize.left - self->cbwidth,
- self->innersize.top - self->cbwidth);
- XResizeWindow(ob_display, self->frame.plate,
- self->frame.client->area.width,
- self->frame.client->area.height);
-
- STRUT_SET(self->frame.size,
- self->innersize.left + self->bwidth,
- self->innersize.top + self->bwidth,
- self->innersize.right + self->bwidth,
- self->innersize.bottom + self->bwidth);
+ /* move and resize the top level frame.
+ shading can change without being moved or resized */
+ XMoveResizeWindow(ob_display, self->frame.window,
+ self->frame.area.x, self->frame.area.y,
+ self->width,
+ (self->frame.client->shaded ? TITLE_HEIGHT :
+ self->innersize.top + self->innersize.bottom +
+ self->frame.client->area.height));
+
+ if (resized) {
+ /* move and resize the plate */
+ XMoveResizeWindow(ob_display, self->frame.plate,
+ self->innersize.left - self->cbwidth,
+ self->innersize.top - self->cbwidth,
+ self->frame.client->area.width,
+ self->frame.client->area.height);
+ /* when the client has StaticGravity, it likes to move around. */
+ XMoveWindow(ob_display, self->frame.client->window, 0, 0);
+ }