X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenu.c;h=9993b35085650f2645cab2f5fff965f155c28ef9;hb=1ff042579e2cbe367807ed6c8a15e71dfae2a526;hp=15a6cc502964168fc5338ebf4c3072d59a100516;hpb=0443796e404f871cecbca6ba36b240872300c39d;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;