all repos — openbox @ a9f2b2c681cd7028398ef62513dec003376bda6b

openbox fork - make it a bit more like ryudo

a number for placing windows, to keep them on screen, but let you place them off-screen

1. when a window is not on any monitor, don't just ignore it, stick it on the first monitor arbitrarily (rather than the closest monitor - room for improvement?)
2. when placing a window with per-app settings, don't rudely force it back on screen fully.
Dana Jansens danakj@orodu.net
commit

a9f2b2c681cd7028398ef62513dec003376bda6b

parent

2ff02fc55e2007dd4a04b3fb6561049a07a13e8a

2 files changed, 13 insertions(+), 8 deletions(-)

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

@@ -382,7 +382,8 @@ the place_client call

*/ ob_state() == OB_STATE_RUNNING && (transient || - (!(self->positioned & USPosition) && + (!((self->positioned & USPosition) || + (settings && settings->pos_given)) && client_normal(self) && !self->session))); }

@@ -983,10 +984,15 @@

for (i = 0; i < screen_num_monitors; ++i) { Rect *a; - if (!screen_physical_area_monitor_contains(i, &desired)) - continue; + if (!screen_physical_area_monitor_contains(i, &desired)) { + if (i < screen_num_monitors - 1) + continue; - a = screen_area(self->desktop, SCREEN_AREA_ONE_MONITOR, &desired); + /* the window is not inside any monitor! so just use the first + one */ + a = screen_area(self->desktop, 0, NULL); + } else + a = screen_area(self->desktop, SCREEN_AREA_ONE_MONITOR, &desired); /* This makes sure windows aren't entirely outside of the screen so you can't see them at all.
M openbox/place.copenbox/place.c

@@ -411,8 +411,6 @@ settings->position.x;

else *x = screen->x + settings->position.x; - ob_debug("x %d settings %d\n", *x, settings->position.x); - if (settings->center_y) *y = screen->y + screen->height / 2 - client->area.height / 2; else if (settings->opposite_y)

@@ -480,6 +478,7 @@ gboolean place_client(ObClient *client, gint *x, gint *y,

ObAppSettings *settings) { gboolean ret; + gboolean userplaced = FALSE; /* per-app settings override program specified position * but not user specified */

@@ -490,7 +489,7 @@ return FALSE;

/* try a number of methods */ ret = place_transient_splash(client, x, y) || - place_per_app_setting(client, x, y, settings) || + (userplaced = place_per_app_setting(client, x, y, settings)) || (config_place_policy == OB_PLACE_POLICY_MOUSE && place_under_mouse(client, x, y)) || place_nooverlap(client, x, y) ||

@@ -499,5 +498,5 @@ g_assert(ret);

/* get where the client should be */ frame_frame_gravity(client->frame, x, y); - return ret; + return !userplaced; }