all repos — openbox @ 6a3ac556b9ed5fd6e578da20a144f22dd4769267

openbox fork - make it a bit more like ryudo

when checking that a window is onscreen, if there are screens with higher indices than where it appeared, they would trump things and force the window onto the first screen.  now, only assume the window is on no screens if it actually is on no screens
Dana Jansens danakj@orodu.net
commit

6a3ac556b9ed5fd6e578da20a144f22dd4769267

parent

d11ac82062d729be5d63c9c40c5c2bb312a8b8f1

1 files changed, 11 insertions(+), 2 deletions(-)

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

@@ -993,6 +993,7 @@ gboolean rudel = rude, ruder = rude, rudet = rude, rudeb = rude;

gint fw, fh; Rect desired; guint i; + gboolean found_mon; RECT_SET(desired, *x, *y, w, h); frame_rect_to_frame(self->frame, &desired);

@@ -1042,18 +1043,26 @@ if (stationary_t && newbl.y > oldbl.y)

rudeb = TRUE; } + /* we iterate through every monitor that the window is at least partially + on, to make sure it is obeying the rules on them all + + if the window does not appear on any monitors, then use the first one + */ + found_mon = FALSE; for (i = 0; i < screen_num_monitors; ++i) { Rect *a; if (!screen_physical_area_monitor_contains(i, &desired)) { - if (i < screen_num_monitors - 1) + if (i < screen_num_monitors - 1 || found_mon) continue; /* the window is not inside any monitor! so just use the first one */ a = screen_area(self->desktop, 0, NULL); - } else + } else { + found_mon = TRUE; 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.