all repos — openbox @ c234ed9ecd9d5228744aae018768ff0c04f2d217

openbox fork - make it a bit more like ryudo

maybe fix transients placed offscreen under certain conditions
Mikael Magnusson mikachu@comhem.se
commit

c234ed9ecd9d5228744aae018768ff0c04f2d217

parent

997a68aaaec3e72b56ab0b8da0e1800fd5984c4f

3 files changed, 20 insertions(+), 14 deletions(-)

jump to
M openbox/client.copenbox/client.c

@@ -415,8 +415,9 @@

if (ob_state() == OB_STATE_RUNNING) { gint x = self->area.x, ox = x; gint y = self->area.y, oy = y; + gboolean transient; - place_client(self, &x, &y, settings); + transient = place_client(self, &x, &y, settings); /* make sure the window is visible. */ client_find_onscreen(self, &x, &y,

@@ -432,10 +433,11 @@ place.c or by the user are allowed partially

off-screen and on xinerama divides (ie, it is up to the placement routines to avoid the xinerama divides) */ - ((self->positioned & PPosition) && - !(self->positioned & USPosition)) && - client_normal(self) && - !self->session); + transient || + (((self->positioned & PPosition) && + !(self->positioned & USPosition)) && + client_normal(self) && + !self->session)); if (x != ox || y != oy) client_move(self, x, y); }
M openbox/place.copenbox/place.c

@@ -412,21 +412,24 @@ }

return FALSE; } -void place_client(ObClient *client, gint *x, gint *y, ObAppSettings *settings) +/* Return TRUE if we want client.c to enforce on-screen-keeping */ +gboolean place_client(ObClient *client, gint *x, gint *y, ObAppSettings *settings) { + gboolean ret = FALSE; if (client->positioned) - return; - if (place_transient(client, x, y) || + return FALSE; + if (place_transient(client, x, y)) + ret = TRUE;; + else if (!( place_per_app_setting(client, x, y, settings) || ((config_place_policy == OB_PLACE_POLICY_MOUSE) ? place_under_mouse(client, x, y) : place_smart(client, x, y, SMART_FULL) || place_smart(client, x, y, SMART_GROUP) || place_smart(client, x, y, SMART_FOCUSED) || - place_random(client, x, y))) - { - /* get where the client should be */ - frame_frame_gravity(client->frame, x, y); - } else + place_random(client, x, y)))) g_assert_not_reached(); /* the last one better succeed */ + /* get where the client should be */ + frame_frame_gravity(client->frame, x, y); + return ret; }
M openbox/place.hopenbox/place.h

@@ -30,6 +30,7 @@ OB_PLACE_POLICY_SMART,

OB_PLACE_POLICY_MOUSE } ObPlacePolicy; -void place_client(struct _ObClient *client, gint *x, gint *y, struct _ObAppSettings *settings); +gboolean place_client(struct _ObClient *client, gint *x, gint *y, + struct _ObAppSettings *settings); #endif