diff options
| author | Richard M. Stallman <rms@gnu.org> | 1996-12-26 21:06:19 +0000 |
|---|---|---|
| committer | Richard M. Stallman <rms@gnu.org> | 1996-12-26 21:06:19 +0000 |
| commit | 98381e4289c6694853b4f1fbd2154eca0dc27069 (patch) | |
| tree | 9f6620ef3da477bb5ddb3162432eab48cd945513 | |
| parent | 101d1605856e8165700fa626005260e6f0508010 (diff) | |
| download | emacs-98381e4289c6694853b4f1fbd2154eca0dc27069.tar.gz | |
(single_keymap_panes): New arg DEPTH.
Cut off recursion at that depth. Callers changed.
| -rw-r--r-- | src/xmenu.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/src/xmenu.c b/src/xmenu.c index fee4e97347e..819f81ea954 100644 --- a/src/xmenu.c +++ b/src/xmenu.c @@ -504,7 +504,7 @@ keymap_panes (keymaps, nmaps, notreal) 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 @@ keymap_panes (keymaps, nmaps, notreal) 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 @@ single_keymap_panes (keymap, pane_name, prefix, notreal) { 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 @@ single_keymap_panes (keymap, pane_name, prefix, notreal) { push_submenu_start (); single_keymap_panes (submap, Qnil, - character, notreal); + character, notreal, + maxdepth - 1); push_submenu_end (); } #endif @@ -683,7 +691,7 @@ single_keymap_panes (keymap, pane_name, prefix, notreal) /* 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 @@ single_submenu (item_key, item_name, maps) 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 |
