X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=2285bed853179db43500e66918340b58dd1cd4bb;hb=0417d1226c7a523cd4420195d86dd744f514b2fe;hp=e37c1d241c22c66bbf969c49f2779ee736d5cc41;hpb=ef042d220b1d5ff9752579bf6cfa41431d1a67ad;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index e37c1d24..2285bed8 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -344,14 +344,17 @@ void client_manage(Window window) place_client(self, &x, &y); - /* make sure the window is visible. - - this is about the rude parameter: - non-normal clients has less rules, and - windows that are being restored from a session - do also. we can assume you want it back where - you saved it */ - client_move_onscreen(self, client_normal(self) && !self->session); + /* make sure the window is visible. */ + client_find_onscreen(self, &x, &y, + self->frame->area.width, + self->frame->area.height, + /* non-normal clients has less rules, and + windows that are being restored from a session + do also. we can assume you want it back where + you saved it */ + client_normal(self) && !self->session); + if (x != ox || y != oy) + client_move(self, x, y); } keyboard_grab_for_client(self, TRUE); @@ -1792,9 +1795,8 @@ static ObStackingLayer calc_layer(ObClient *self) else if (self->type == OB_CLIENT_TYPE_DESKTOP) l = OB_STACKING_LAYER_DESKTOP; else if (self->type == OB_CLIENT_TYPE_DOCK) { - if (self->above) l = OB_STACKING_LAYER_DOCK_ABOVE; - else if (self->below) l = OB_STACKING_LAYER_DOCK_BELOW; - else l = OB_STACKING_LAYER_DOCK_NORMAL; + if (self->below) l = OB_STACKING_LAYER_NORMAL; + else l = OB_STACKING_LAYER_ABOVE; } else if (self->above) l = OB_STACKING_LAYER_ABOVE; else if (self->below) l = OB_STACKING_LAYER_BELOW; @@ -3006,6 +3008,12 @@ void client_set_undecorated(ObClient *self, gboolean undecorated) if (self->undecorated != undecorated) { self->undecorated = undecorated; client_setup_decor_and_functions(self); + // Make sure the client knows it might have moved. Maybe there is a + // better way of doing this so only one client_configure is sent, but + // since 125 of these are sent per second when moving the window (with + // user = FALSE) i doubt it matters much. + client_configure(self, OB_CORNER_TOPLEFT, self->area.x, self->area.y, + self->area.width, self->area.height, TRUE, TRUE); client_change_state(self); /* reflect this in the state hints */ } }