all repos — openbox @ 327a0b3de75187a23bb01ce5e8e6992fd1106a81

openbox fork - make it a bit more like ryudo

always adjust the frames size and position together, so there is no more weird resizing before moving and edge flickering when resizing from the top/left
Dana Jansens danakj@orodu.net
commit

327a0b3de75187a23bb01ce5e8e6992fd1106a81

parent

a822cbe13b18eca60b220b9b312210c02b946a3b

M engines/engineinterface.hengines/engineinterface.h

@@ -18,12 +18,9 @@ typedef void EngineFrameGrabClient(Frame *self, Client *client);

/* frame_release_client */ typedef void EngineFrameReleaseClient(Frame *self, Client *client); -/* frame_adjust_size */ -/*! Update the frame's size to match the client */ -typedef void EngineFrameAdjustSize(Frame *self); -/* frame_adjust_position */ -/*! Update the frame's position to match the client */ -typedef void EngineFrameAdjustPosition(Frame *self); +/* frame_adjust_area */ +/*! Update the frame's size/position to match the client */ +typedef void EngineFrameAdjustArea(Frame *self); /* frame_adjust_shape */ /*! Shape the frame window to the client window */ typedef void EngineFrameAdjustShape(Frame *self);
M engines/openbox/openbox.cengines/openbox/openbox.c

@@ -407,7 +407,7 @@ }

#endif } -void frame_adjust_size(ObFrame *self) +void frame_adjust_area(ObFrame *self) { if (self->frame.client->decorations & Decor_Border) { self->bwidth = s_bwidth;

@@ -461,11 +461,19 @@ 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)); + + /* find the new coordinates */ + self->frame.area.x = self->frame.client->area.x; + self->frame.area.y = self->frame.client->area.y; + frame_client_gravity((Frame*)self, + &self->frame.area.x, &self->frame.area.y); + /* move and resize the top level frame */ + 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)); /* do this in two steps because clients whose gravity is set to 'Static' don't end up getting moved at all with an XMoveResizeWindow */

@@ -491,16 +499,6 @@

render(self); frame_adjust_shape(self); -} - -void frame_adjust_position(ObFrame *self) -{ - self->frame.area.x = self->frame.client->area.x; - self->frame.area.y = self->frame.client->area.y; - frame_client_gravity((Frame*)self, - &self->frame.area.x, &self->frame.area.y); - XMoveWindow(ob_display, self->frame.window, - self->frame.area.x, self->frame.area.y); } void frame_adjust_state(ObFrame *self)

@@ -548,8 +546,7 @@

/* map the client so it maps when the frame does */ XMapWindow(ob_display, client->window); - frame_adjust_size(self); - frame_adjust_position(self); + frame_adjust_area(self); /* set all the windows for the frame in the client_map */ g_hash_table_insert(client_map, (gpointer)self->frame.window, client);
M openbox/client.copenbox/client.c

@@ -815,10 +815,9 @@

client_change_allowed_actions(self); if (self->frame) { - /* change the decors on the frame */ - engine_frame_adjust_size(self->frame); - /* with more/less decorations, we may need to be repositioned */ - engine_frame_adjust_position(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); /* with new decor, the window's maximized size may change */ client_remaximize(self); }

@@ -1386,12 +1385,9 @@ XResizeWindow(ob_display, self->window, w, h);

/* move/resize the frame to match the request */ if (self->frame) { - /* Adjust the size and then the position, as required by the EWMH */ - if (resized) - engine_frame_adjust_size(self->frame); + engine_frame_adjust_area(self->frame); + if (moved) { - engine_frame_adjust_position(self->frame); - if (!user || final) { XEvent event; event.type = ConfigureNotify;

@@ -1625,7 +1621,8 @@ if (!self->iconic)

self->wmstate = shade ? IconicState : NormalState; self->shaded = shade; client_change_state(self); - engine_frame_adjust_size(self->frame); + /* resize the frame to just the titlebar */ + engine_frame_adjust_area(self->frame); } void client_close(Client *self)
M openbox/engine.copenbox/engine.c

@@ -42,8 +42,7 @@ LOADSYM(shutdown, eshutdown);

LOADSYM(frame_new, engine_frame_new); LOADSYM(frame_grab_client, engine_frame_grab_client); LOADSYM(frame_release_client, engine_frame_release_client); - LOADSYM(frame_adjust_size, engine_frame_adjust_size); - LOADSYM(frame_adjust_position, engine_frame_adjust_position); + LOADSYM(frame_adjust_area, engine_frame_adjust_area); LOADSYM(frame_adjust_shape, engine_frame_adjust_shape); LOADSYM(frame_adjust_state, engine_frame_adjust_state); LOADSYM(frame_adjust_focus, engine_frame_adjust_focus);
M openbox/engine.hopenbox/engine.h

@@ -11,8 +11,7 @@

EngineFrameGrabClient *engine_frame_grab_client; EngineFrameReleaseClient *engine_frame_release_client; -EngineFrameAdjustSize *engine_frame_adjust_size; -EngineFrameAdjustPosition *engine_frame_adjust_position; +EngineFrameAdjustArea *engine_frame_adjust_area; EngineFrameAdjustShape *engine_frame_adjust_shape; EngineFrameAdjustState *engine_frame_adjust_state; EngineFrameAdjustFocus *engine_frame_adjust_focus;