MCPcopy Create free account
hub / github.com/NetHack/NetHack / X11_select_menu

Function X11_select_menu

win/X11/winmenu.c:883–1146  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

881}
882
883int
884X11_select_menu(winid window, int how, menu_item **menu_list)
885{
886 x11_menu_item *curr;
887 struct xwindow *wp;
888 struct menu_info_t *menu_info;
889 Arg args[10];
890 Cardinal num_args;
891 int retval;
892 Dimension v_pixel_width, v_pixel_height;
893 boolean labeled;
894 Widget viewport_widget, form, label, all;
895 char gacc[QBUFSZ], *ap;
896 boolean permi;
897
898 *menu_list = (menu_item *) 0;
899 check_winid(window);
900 wp = &window_list[window];
901 menu_info = wp->menu_information;
902 if (!menu_info->is_menu) {
903 impossible("select_menu: called before start_menu");
904 return 0;
905 }
906
907 debugpline2("X11_select_menu(%i, %i)", window, how);
908
909 create_menu_translation_tables();
910
911 if (menu_info->permi && how != PICK_NONE) {
912 /* Core is reusing perm_invent window for picking an item.
913 But it could be even on a different screen!
914 Create a new temp window for it instead. */
915 winid newwin = X11_create_nhwindow(NHW_MENU);
916 struct xwindow *nwp = &window_list[newwin];
917
918 X11_start_menu(newwin, MENU_BEHAVE_STANDARD);
919 move_menu(&menu_info->new_menu, &nwp->menu_information->new_menu);
920 for (curr = nwp->menu_information->new_menu.base; curr;
921 curr = curr->next)
922 curr->window = newwin;
923 nwp->menu_information->permi = FALSE;
924 retval = X11_select_menu(newwin, how, menu_list);
925 destroy_menu_entry_widgets(nwp);
926 X11_destroy_nhwindow(newwin);
927 return retval;
928 }
929
930 menu_info->how = (short) how;
931
932 /* collect group accelerators; for PICK_NONE, they're ignored;
933 for PICK_ONE, only those which match exactly one entry will be
934 accepted; for PICK_ANY, those which match any entry are okay */
935 gacc[0] = '\0';
936 if (menu_info->how != PICK_NONE) {
937 int i, n, gcnt[128];
938#define GSELIDX(c) ((c) & 127) /* guard against `signed char' */
939
940 for (i = 0; i < SIZE(gcnt); i++)

Callers 2

X11_display_nhwindowFunction · 0.85
X11_display_fileFunction · 0.85

Calls 15

X11_create_nhwindowFunction · 0.85
X11_start_menuFunction · 0.85
move_menuFunction · 0.85
X11_destroy_nhwindowFunction · 0.85
copy_ofFunction · 0.85
menu_popdownFunction · 0.85
menu_create_buttonsFunction · 0.85
free_menu_line_entriesFunction · 0.85
menu_create_entriesFunction · 0.85
positionpopupFunction · 0.85

Tested by

no test coverage detected