X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenu.c;h=9993b35085650f2645cab2f5fff965f155c28ef9;hb=34e819738b344a992a1dbfd6cdd165e0c8ddb3a9;hp=15a6cc502964168fc5338ebf4c3072d59a100516;hpb=d0abbec2e522119c0865f668b094c60a1712e24f;p=chaz%2Fopenbox diff --git a/openbox/menu.c b/openbox/menu.c index 15a6cc50..9993b350 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -398,11 +398,22 @@ void menu_entry_fire(MenuEntry *self) */ void menu_control_show(Menu *self, int x, int y, Client *client) { + guint i; + Rect *a = NULL; + g_assert(!self->invalid); - POINT_SET(self->location, - MIN(x, screen_physical_size.width - self->size.width), - MIN(y, screen_physical_size.height - self->size.height)); + for (i = 0; i < screen_num_xin_areas; ++i) { + a = screen_physical_area_xinerama(i); + if (RECT_CONTAINS(*a, x, y)) + break; + } + g_assert(a != NULL); + self->xin_area = i; + + POINT_SET(self->location, + MIN(x, a->x + a->width - 1 - self->size.width), + MIN(y, a->y + a->height - 1 - self->size.height)); XMoveWindow(ob_display, self->frame, self->location.x, self->location.y); if (!self->shown) { @@ -416,6 +427,8 @@ void menu_control_show(Menu *self, int x, int y, Client *client) { void menu_control_mouseover(MenuEntry *self, gboolean enter) { int x; + Rect *a; + self->hilite = enter; if (enter) { @@ -436,7 +449,9 @@ void menu_control_mouseover(MenuEntry *self, gboolean enter) { /* need to get the width. is this bad?*/ menu_render(self->submenu); - if (self->submenu->size.width + x >= screen_physical_size.width) + a = screen_physical_area_xinerama(self->parent->xin_area); + + if (self->submenu->size.width + x >= a->x + a->width) x = self->parent->location.x - self->submenu->size.width - ob_rr_theme->bwidth;