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:
Mikael Magnusson 2011-05-10 16:03:33 +02:00 committed by Dana Jansens
parent cc4e44e837
commit 6ad5f085fa
2 changed files with 10 additions and 3 deletions

View file

@ -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);

View file

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