menu = (Menu)xv_create(NULL, MENU,
MENU_TITLE_ITEM, "Mail Folders",
MENU_NOTIFY_PROC, change_to_folder,
MENU_STRINGS, "/usr/spool/mail", "˜/mbox", NULL,
MENU_ITEM,
MENU_STRING, "˜/Mail"
MENU_GEN_PULLRIGHT, gen_folder_menu,
NULL,
NULL);
There is a shortcut attribute that allows you to specify both the menu item’s string and the
MENU_GEN_PULLRIGHT procedure in the same call. The attribute is MENU_GEN_
PULLRIGHT_ITEM
. It is used as follows:
MENU_GEN_PULLRIGHT_ITEM, "˜/Mail", gen_folder_menu,
The menu-generating routine may do whatever is necessary to build a new menu, but you
should be careful that the routine does not take too much processing time, since the user is
waiting with the MENU button pressed for the menu to be displayed. Also remember that a
pointer grab is going on, so the routine should avoid any interaction with the user (such as
error dialog boxes).
The form of the menu-generating procedure is:
Menu
menu_gen_proc(menu_item, op)
Menu_item menu_item;
Menu_generate op;
This routine may be called each time the menu is needed. If the menu only needs to be
created once, you can return to the same menu each time you need the menu.
The op parameter is one of the following enumerated types:
typedef enum {
MENU_DISPLAY,
MENU_DISPLAY_DONE,
MENU_NOTIFY,
MENU_NOTIFY_DONE
} Menu_generate;
op indicates the condition in which your routine has been called. The MENU_DISPLAY value
indicates that the menu is going to be displayed while MENU_DISPLAY_DONE indicates that
the menu has been displayed and dismissed. If