all repos — openbox @ 64d812c6d7b2e8da981a97a921981fbdb073551a

openbox fork - make it a bit more like ryudo

fix windows moving to monitors other than their own. client_find_onscreen uses their desired coordiantes instead of their old ones
Dana Jansens danakj@orodu.net
commit

64d812c6d7b2e8da981a97a921981fbdb073551a

parent

928305d0b7ba46db3608cab8564c0cd0ec1a0724

2 files changed, 20 insertions(+), 4 deletions(-)

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

@@ -853,9 +853,11 @@ Rect *mon_a, *all_a;

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);
M openbox/place.copenbox/place.c

@@ -23,6 +23,7 @@ #include "screen.h"

#include "frame.h" #include "focus.h" #include "config.h" +#include "debug.h" static void add_choice(guint *choice, guint mychoice) {

@@ -70,6 +71,8 @@

/* 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 @@ ObClient *itc = it->data;

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 @@ }

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 */