# HG changeset patch # User Richard M. Stallman # Date 851634379 0 # Node ID 6409ef81a2a84708cc0b8a9b71af12462b7fa8d1 # Parent d393cbcfb69c039c918c980de465299dc2739939 (single_keymap_panes): New arg DEPTH. Cut off recursion at that depth. Callers changed. diff -r d393cbcfb69c -r 6409ef81a2a8 src/xmenu.c --- a/src/xmenu.c Thu Dec 26 21:01:10 1996 +0000 +++ b/src/xmenu.c Thu Dec 26 21:06:19 1996 +0000 @@ -504,7 +504,7 @@ But don't make a pane that is empty--ignore that map instead. P is the number of panes we have made so far. */ for (mapno = 0; mapno < nmaps; mapno++) - single_keymap_panes (keymaps[mapno], Qnil, Qnil, notreal); + single_keymap_panes (keymaps[mapno], Qnil, Qnil, notreal, 10); finish_menu_items (); } @@ -514,19 +514,25 @@ The other arguments are passed along or point to local variables of the previous function. If NOTREAL is nonzero, - don't bother really computing whether an item is enabled. */ + don't bother really computing whether an item is enabled. + + If we encounter submenus deeper than MAXDEPTH levels, ignore them. */ static void -single_keymap_panes (keymap, pane_name, prefix, notreal) +single_keymap_panes (keymap, pane_name, prefix, notreal, maxdepth) Lisp_Object keymap; Lisp_Object pane_name; Lisp_Object prefix; int notreal; + int maxdepth; { Lisp_Object pending_maps; Lisp_Object tail, item, item1, item_string, table; struct gcpro gcpro1, gcpro2, gcpro3, gcpro4; + if (maxdepth <= 0) + return; + pending_maps = Qnil; push_menu_pane (pane_name, prefix); @@ -593,7 +599,8 @@ { push_submenu_start (); single_keymap_panes (submap, Qnil, - XCONS (item)->car, notreal); + XCONS (item)->car, notreal, + maxdepth - 1); push_submenu_end (); } #endif @@ -662,7 +669,8 @@ { push_submenu_start (); single_keymap_panes (submap, Qnil, - character, notreal); + character, notreal, + maxdepth - 1); push_submenu_end (); } #endif @@ -683,7 +691,7 @@ /* We no longer discard the @ from the beginning of the string here. Instead, we do this in xmenu_show. */ single_keymap_panes (Fcar (elt), string, - XCONS (eltcdr)->cdr, notreal); + XCONS (eltcdr)->cdr, notreal, maxdepth - 1); pending_maps = Fcdr (pending_maps); } } @@ -1425,7 +1433,7 @@ push_menu_item (item_name, Qt, item_key, mapvec[i], Qnil); } else - single_keymap_panes (mapvec[i], item_name, item_key, 0); + single_keymap_panes (mapvec[i], item_name, item_key, 0, 10); } /* Create a tree of widget_value objects