summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorMikael Magnusson <mikachu@comhem.se>2005-09-13 12:13:13 +0000
committerMikael Magnusson <mikachu@comhem.se>2005-09-13 12:13:13 +0000
commit9df57ff1b5c6f2bc631253cc8a51ec3af7d24d7e (patch)
tree5e16b8f6843ca65e5838a47d94b45aa914545184 /openbox
parent6236d2bcc2e4b206ba1bd846454dde67d639c024 (diff)
I meant to check for windows placed by programs, not windows not placed by the user. Now checks for windows placed by programs and not placed by user. This excludes placement schemes which the former check didn't, resulting in some brokenness, particularly with xinerama.
Diffstat (limited to 'openbox')
-rw-r--r--openbox/client.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/openbox/client.c b/openbox/client.c
index 37df6c5e..b5a66d3f 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -349,11 +349,17 @@ void client_manage(Window window)
self->frame->area.width,
self->frame->area.height,
/* non-normal clients has less rules, and
- windows that are being restored from a session
- do also. we can assume you want it back where
- you saved it. Clients saying the user placed
- them are also spared from the evil rules */
- !(self->positioned & USPosition) &&
+ windows that are being restored from a
+ session do also. we can assume you want
+ it back where you saved it. Clients saying
+ they placed themselves are subjected to
+ harder rules, ones that are placed by
+ 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);
if (x != ox || y != oy)
@@ -615,8 +621,8 @@ gboolean client_find_onscreen(ObClient *self, gint *x, gint *y, gint w, gint h,
/* XXX watch for xinerama dead areas */
/* This makes sure windows aren't entirely outside of the screen so you
* can't see them at all */
- a = screen_area(self->desktop);
if (client_normal(self)) {
+ a = screen_area(self->desktop);
if (!self->strut.right && *x >= a->x + a->width - 1)
*x = a->x + a->width - self->frame->area.width;
if (!self->strut.bottom && *y >= a->y + a->height - 1)
@@ -638,9 +644,6 @@ gboolean client_find_onscreen(ObClient *self, gint *x, gint *y, gint w, gint h,
* remember to fix the placement stuff to avoid it also and
* then remove this XXX */
a = screen_physical_area_monitor(client_monitor(self));
- /* this is ben's MOZILLA BITCHSLAP. "oh ya it fucking feels good.
- Java can suck it too." */
-
/* dont let windows map/move into the strut unless they
are bigger than the available area */
if (w <= a->width) {