summaryrefslogtreecommitdiff
path: root/openbox/client.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-07-15 12:35:10 -0400
committerDana Jansens <danakj@orodu.net>2007-07-15 12:35:10 -0400
commita9f2b2c681cd7028398ef62513dec003376bda6b (patch)
treef03f616bd9c6f3ca9d086eebf27dcbed91067211 /openbox/client.c
parent2ff02fc55e2007dd4a04b3fb6561049a07a13e8a (diff)
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.
Diffstat (limited to 'openbox/client.c')
-rw-r--r--openbox/client.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/openbox/client.c b/openbox/client.c
index 8b2087d0..b8a2ea24 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -382,7 +382,8 @@ void client_manage(Window window)
*/
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 @@ gboolean client_find_onscreen(ObClient *self, gint *x, gint *y, gint w, gint h,
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.