all repos — openbox @ 6ad5f085fa5a38ab8373769cac5cd52839d0a7a5

openbox fork - make it a bit more like ryudo

Fix menu placement to avoid dead xinerama areas, possibly break other stuff

Use screen_find_monitor(area) instead of screen_find_monitor_point(
topleft corner) in order to find a better monitor when the menu isn't
opening with the mouse cursor in the top left corner.

I made screen_find_monitor return the primary screen when it failed to
find a monitor containing the rect, instead of the total area, no idea
what behaviour this will change but I doubt it will be worse.
Mikael Magnusson mikachu@gmail.com
commit

6ad5f085fa5a38ab8373769cac5cd52839d0a7a5

parent

cc4e44e8376f5b76cb23f8cd642f32e0e41b9150

2 files changed, 10 insertions(+), 3 deletions(-)

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

@@ -324,11 +324,18 @@ void menu_frame_move_on_screen(ObMenuFrame *self, gint x, gint y,

gint *dx, gint *dy) { const Rect *a = NULL; - gint pos, half; + Rect search = self->area; + gint pos, half, monitor; *dx = *dy = 0; + RECT_SET_POINT(search, x, y); - a = screen_physical_area_monitor(screen_find_monitor_point(x, y)); + if (self->parent) + monitor = self->parent->monitor; + else + monitor = screen_find_monitor(&search); + + a = screen_physical_area_monitor(monitor); half = g_list_length(self->entries) / 2; pos = g_list_index(self->entries, self->selected);
M openbox/screen.copenbox/screen.c

@@ -1652,7 +1652,7 @@ most = i;

} } } - return most; + return most < screen_num_monitors ? most : screen_monitor_primary(FALSE); } const Rect* screen_physical_area_all_monitors(void)