X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=67b9564710531210bb1807f34739d508a8b311da;hb=c9ba6046685a62bda33b1439c8d699f3fd67d33e;hp=21c9ac7ab8df5b9b6421a974407ae6ab0d5f9a65;hpb=e238e4ac2d404b474100b71af88d0fc239d2386c;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 21c9ac7a..67b95647 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -794,7 +794,7 @@ void client_setup_decor_and_functions(Client *self) /* can't maximize without moving/resizing */ if (!((self->functions & Func_Move) && (self->functions & Func_Resize))) - self->functions &= ~Func_Maximize; + self->functions &= ~(Func_Maximize | Func_Fullscreen); /* finally, user specified disabled decorations are applied to subtract decorations */ @@ -822,7 +822,7 @@ void client_setup_decor_and_functions(Client *self) if (self->frame) { /* change the decors on the frame, and with more/less decorations, we may also need to be repositioned */ - engine_frame_adjust_area(self->frame); + engine_frame_adjust_area(self->frame, TRUE, TRUE); /* with new decor, the window's maximized size may change */ client_remaximize(self); } @@ -1307,6 +1307,18 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, } } + /* these override the above states! if you cant move you can't move! */ + if (user) { + if (!(self->functions & Func_Move)) { + x = self->area.x; + y = self->area.y; + } + if (!(self->functions & Func_Resize)) { + w = self->area.width; + h = self->area.height; + } + } + if (x == self->area.x && y == self->area.y && w == self->area.width && h == self->area.height) return; /* no change */ @@ -1390,30 +1402,29 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, /* move/resize the frame to match the request */ if (self->frame) { - engine_frame_adjust_area(self->frame); - - if (moved) { - if (!user || final) { - XEvent event; - event.type = ConfigureNotify; - event.xconfigure.display = ob_display; - event.xconfigure.event = self->window; - event.xconfigure.window = self->window; + if (moved || resized) + engine_frame_adjust_area(self->frame, moved, resized); + + if (!user || final) { + XEvent event; + event.type = ConfigureNotify; + event.xconfigure.display = ob_display; + event.xconfigure.event = self->window; + event.xconfigure.window = self->window; - /* root window coords with border in mind */ - event.xconfigure.x = x - self->border_width + - self->frame->size.left; - event.xconfigure.y = y - self->border_width + - self->frame->size.top; + /* root window coords with border in mind */ + event.xconfigure.x = x - self->border_width + + self->frame->size.left; + event.xconfigure.y = y - self->border_width + + self->frame->size.top; - event.xconfigure.width = self->area.width; - event.xconfigure.height = self->area.height; - event.xconfigure.border_width = self->border_width; - event.xconfigure.above = self->frame->plate; - event.xconfigure.override_redirect = FALSE; - XSendEvent(event.xconfigure.display, event.xconfigure.window, - FALSE, StructureNotifyMask, &event); - } + event.xconfigure.width = self->area.width; + event.xconfigure.height = self->area.height; + event.xconfigure.border_width = self->border_width; + event.xconfigure.above = self->frame->plate; + event.xconfigure.override_redirect = FALSE; + XSendEvent(event.xconfigure.display, event.xconfigure.window, + FALSE, StructureNotifyMask, &event); } } } @@ -1630,7 +1641,7 @@ void client_shade(Client *self, gboolean shade) self->shaded = shade; client_change_state(self); /* resize the frame to just the titlebar */ - engine_frame_adjust_area(self->frame); + engine_frame_adjust_area(self->frame, FALSE, FALSE); } void client_close(Client *self)