void menu_frame_move(ObMenuFrame *self, gint x, gint y)
{
RECT_SET_POINT(self->area, x, y);
+ self->monitor = screen_find_monitor_point(x, y);
XMoveWindow(ob_display, self->window, self->area.x, self->area.y);
}
*dx = *dy = 0;
- a = screen_physical_area_monitor(self->monitor);
+ a = screen_physical_area_monitor(screen_find_monitor_point(x, y));
half = g_list_length(self->entries) / 2;
pos = g_list_index(self->entries, self->selected);
if (!menu_frame_show(self))
return FALSE;
- /* find the monitor the menu is on */
- for (i = 0; i < screen_num_monitors; ++i) {
- Rect *a = screen_physical_area_monitor(i);
- gboolean contains = RECT_CONTAINS(*a, x, y);
- g_free(a);
- if (contains) {
- self->monitor = i;
- break;
- }
- }
-
if (self->menu->place_func)
self->menu->place_func(self, &x, &y, mouse, self->menu->data);
else
ob_cursor(OB_CURSOR_POINTER));
}
-guint screen_monitor_pointer()
+guint screen_find_monitor_point(guint x, guint y)
{
Rect mon;
- gint x, y;
- if (screen_pointer_pos(&x, &y))
- RECT_SET(mon, x, y, 1, 1);
- else
- RECT_SET(mon, 0, 0, 1, 1);
+ RECT_SET(mon, x, y, 1, 1);
return screen_find_monitor(&mon);
}
+guint screen_monitor_pointer()
+{
+ gint x, y;
+ if (!screen_pointer_pos(&x, &y))
+ x = y = 0;
+ return screen_find_monitor_point(x, y);
+}
+
gboolean screen_pointer_pos(gint *x, gint *y)
{
Window w;
*/
guint screen_find_monitor(Rect *search);
+/*! Finds the monitor which contains the point @x, @y */
+guint screen_find_monitor_point(guint x, guint y);
+
/*! Sets the root cursor. This function decides which cursor to use, but you
gotta call it to let it know it should change. */
void screen_set_root_cursor();