if (self->type == Type_Desktop && self->desktop != DESKTOP_ALL)
client_set_desktop(self, DESKTOP_ALL, FALSE);
- /* change the decors on the frame, and with more/less decorations,
- we may also need to be repositioned */
- frame_adjust_area(self->frame, TRUE, TRUE);
- /* with new decor, the window's maximized size may change */
+ /* adjust the client's decorations, etc. */
client_reconfigure(self);
} else {
/* this makes sure that these windows appear on all desktops */
void client_reconfigure(Client *self)
{
+ /* by making this pass FALSE for user, we avoid the emacs event storm where
+ every configurenotify causes an update in its normal hints, i think this
+ is generally what we want anyways... */
client_configure(self, Corner_TopLeft, self->area.x, self->area.y,
- self->area.width, self->area.height, TRUE, TRUE);
+ self->area.width, self->area.height, FALSE, TRUE);
}
void client_update_wmhints(Client *self)
/* move/resize the frame to match the request */
if (self->frame) {
+ if (self->decorations != self->frame->decorations)
+ moved = resized = TRUE;
+
if (moved || resized)
frame_adjust_area(self->frame, moved, resized);
event.xconfigure.override_redirect = FALSE;
XSendEvent(event.xconfigure.display, event.xconfigure.window,
FALSE, StructureNotifyMask, &event);
- g_message ("SENT CONFIG");
}
}
}