X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmenu.c;h=e200654a6543ebd6631a6a6a2960ac1ecae60d43;hb=3afbf3d597ef45a122ae58203a126c57f9796f7b;hp=5efacc2a197b450bd656741bdceec54993354fbe;hpb=b7b187693e2e78b1d68cc88e8521a067194f05b2;p=chaz%2Fopenbox diff --git a/openbox/menu.c b/openbox/menu.c index 5efacc2a..e200654a 100644 --- a/openbox/menu.c +++ b/openbox/menu.c @@ -287,13 +287,30 @@ void menu_show(gchar *name, gint x, gint y, ObClient *client) if (!(self = menu_from_name(name))) return; + /* if the requested menu is already the top visible menu, then don't + bother */ + if (menu_frame_visible) { + frame = menu_frame_visible->data; + if (frame->menu == self) + return; + } + menu_frame_hide_all(); frame = menu_frame_new(self, client); - menu_frame_move(frame, x - ob_rr_theme->bwidth, y - ob_rr_theme->bwidth); - menu_frame_show(frame, NULL); - if (frame->entries) - menu_frame_select_next(frame); + if (client && x < 0 && y < 0) + menu_frame_move(frame, + client->frame->area.x + client->frame->size.left, + client->frame->area.y + client->frame->size.top); + else + menu_frame_move(frame, + x - ob_rr_theme->bwidth, y - ob_rr_theme->bwidth); + if (!menu_frame_show(frame, NULL)) { + menu_frame_free(frame); + } else { + if (frame->entries) + menu_frame_select_next(frame); + } } static ObMenuEntry* menu_entry_new(ObMenu *menu, ObMenuEntryType type, gint id) @@ -359,7 +376,7 @@ void menu_clear_entries(ObMenu *self) #endif while (self->entries) { - menu_entry_free(self->entries->data); + menu_entry_free(self->entries->data); self->entries = g_list_delete_link(self->entries, self->entries); } }