summaryrefslogtreecommitdiff
path: root/openbox
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2007-05-20 15:16:57 +0000
committerDana Jansens <danakj@orodu.net>2007-05-20 15:16:57 +0000
commit64d812c6d7b2e8da981a97a921981fbdb073551a (patch)
tree32b55ee423ef6f615ef136406280aff5bda5d15f /openbox
parent928305d0b7ba46db3608cab8564c0cd0ec1a0724 (diff)
fix windows moving to monitors other than their own. client_find_onscreen uses their desired coordiantes instead of their old ones
Diffstat (limited to 'openbox')
-rw-r--r--openbox/client.c4
-rw-r--r--openbox/place.c20
2 files changed, 20 insertions, 4 deletions
diff --git a/openbox/client.c b/openbox/client.c
index 0dd12214..e77a4ea6 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -853,9 +853,11 @@ gboolean client_find_onscreen(ObClient *self, gint *x, gint *y, gint w, gint h,
gint ox = *x, oy = *y;
gboolean rudel = rude, ruder = rude, rudet = rude, rudeb = rude;
gint fw, fh;
+ Rect desired;
+ RECT_SET(desired, *x, *y, w, h);
all_a = screen_area(self->desktop);
- mon_a = screen_area_monitor(self->desktop, client_monitor(self));
+ mon_a = screen_area_monitor(self->desktop, screen_find_monitor(&desired));
/* get where the frame would be */
frame_client_gravity(self->frame, x, y, w, h);
diff --git a/openbox/place.c b/openbox/place.c
index 214bb59c..99257bf1 100644
--- a/openbox/place.c
+++ b/openbox/place.c
@@ -23,6 +23,7 @@
#include "frame.h"
#include "focus.h"
#include "config.h"
+#include "debug.h"
static void add_choice(guint *choice, guint mychoice)
{
@@ -70,6 +71,8 @@ static Rect **pick_head(ObClient *c)
/* try direct parent first */
if (c->transient_for && c->transient_for != OB_TRAN_GROUP) {
add_choice(choice, client_monitor(c->transient_for));
+ ob_debug("placement adding choice %d for parent\n",
+ client_monitor(c->transient_for));
}
/* more than one window in its group (more than just this window) */
@@ -82,25 +85,36 @@ static Rect **pick_head(ObClient *c)
if (itc != c &&
(itc->desktop == c->desktop ||
itc->desktop == DESKTOP_ALL || c->desktop == DESKTOP_ALL))
+ {
add_choice(choice, client_monitor(it->data));
+ ob_debug("placement adding choice %d for group sibling\n",
+ client_monitor(it->data));
+ }
}
/* try on all desktops */
for (it = c->group->members; it; it = g_slist_next(it)) {
ObClient *itc = it->data;
- if (itc != c)
+ if (itc != c) {
add_choice(choice, client_monitor(it->data));
+ ob_debug("placement adding choice %d for group sibling on "
+ "another desktop\n", client_monitor(it->data));
+ }
}
}
- if (focus_client)
+ if (focus_client) {
add_choice(choice, client_monitor(focus_client));
+ ob_debug("placement adding choice %d for focused window\n",
+ client_monitor(focus_client));
+ }
screen_pointer_pos(&px, &py);
for (i = 0; i < screen_num_monitors; i++)
if (RECT_CONTAINS(*screen_physical_area_monitor(i), px, py)) {
add_choice(choice, i);
+ ob_debug("placement adding choice %d for mouse pointer\n", i);
break;
}
@@ -276,7 +290,7 @@ static gboolean place_smart(ObClient *client, gint *x, gint *y,
areas = pick_head(client);
- for (i = 0; i < screen_num_monitors; ++i) {
+ for (i = 0; i < screen_num_monitors && !ret; ++i) {
spaces = area_add(spaces, areas[i]);
/* stay out from under windows in higher layers */