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, y);
- 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)
#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);
}
}