X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenu.c;h=f7eef7fb08c3e4bcad316bf9fe88a89a79f190d1;hb=71b7b043a2ca6fc99a41a1e47e76f96eb7218ad9;hp=8f7c8b6cb301277a81c96e31806a67c3da57ca63;hpb=7af1c6a9c3a57f3ded34fad3f9f4a30fe377a65e;p=chaz%2Fopenbox diff --git a/openbox/menu.c b/openbox/menu.c index 8f7c8b6c..f7eef7fb 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -311,8 +311,6 @@ void menu_show_full(Menu *self, int x, int y, Client *client) self->client = client; if (!self->shown) { - GSList *it; - if (!self->parent) { grab_pointer(TRUE, None); grab_keyboard(TRUE); @@ -400,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) { @@ -418,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) { @@ -425,7 +436,7 @@ void menu_control_mouseover(MenuEntry *self, gboolean enter) { != self->parent->open_submenu) menu_hide(self->parent->open_submenu); - if (self->submenu) { + if (self->submenu && self->parent->open_submenu != self->submenu) { self->parent->open_submenu = self->submenu; /* shouldn't be invalid since it must be displayed */ @@ -438,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;