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.
This commit is contained in:
parent
cc4e44e837
commit
6ad5f085fa
2 changed files with 10 additions and 3 deletions
|
@ -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);
|
||||
|
|
|
@ -1652,7 +1652,7 @@ guint screen_find_monitor(const Rect *search)
|
|||
}
|
||||
}
|
||||
}
|
||||
return most;
|
||||
return most < screen_num_monitors ? most : screen_monitor_primary(FALSE);
|
||||
}
|
||||
|
||||
const Rect* screen_physical_area_all_monitors(void)
|
||||
|
|
Loading…
Reference in a new issue