X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fclient.c;h=87cdba96973d61b55cef4f8f76bcff33ea6bbcee;hb=069e9607fa433190307bb8242294a109e88165de;hp=24d771277ac5baa3a1e1bd40a883611caef4f736;hpb=092616de9a809a1c9a646901521ffcc1f337e913;p=chaz%2Fopenbox diff --git a/openbox/client.c b/openbox/client.c index 24d77127..87cdba96 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -1027,10 +1027,7 @@ void client_setup_decor_and_functions(Client *self) 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 */ @@ -1091,8 +1088,11 @@ static void client_change_allowed_actions(Client *self) 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) @@ -1340,10 +1340,10 @@ void client_update_icons(Client *self) ++y; } self->icons[j].data[t] = - (((data[i] >> 24) & 0xff) << default_alpha_offset) + - (((data[i] >> 16) & 0xff) << default_red_offset) + - (((data[i] >> 8) & 0xff) << default_green_offset) + - (((data[i] >> 0) & 0xff) << default_blue_offset); + (((data[i] >> 24) & 0xff) << RrDefaultAlphaOffset) + + (((data[i] >> 16) & 0xff) << RrDefaultRedOffset) + + (((data[i] >> 8) & 0xff) << RrDefaultGreenOffset) + + (((data[i] >> 0) & 0xff) << RrDefaultBlueOffset); } g_assert(i <= num); } @@ -1772,6 +1772,9 @@ 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) { + if (self->decorations != self->frame->decorations) + moved = resized = TRUE; + if (moved || resized) frame_adjust_area(self->frame, moved, resized); @@ -1779,7 +1782,7 @@ void client_configure(Client *self, Corner anchor, int x, int y, int w, int h, clients (emacs) freaking out, cuz they send back a configure every time they receive this event, which resends them this event... etc. */ - if ((moved || resized) && (!user || final)) { + if ((!user && moved) || (user && final)) { XEvent event; event.type = ConfigureNotify; event.xconfigure.display = ob_display;