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 | 3da835474bfae5c303d08bcc29544887150fc78f (patch) | |
tree | 2eb8d144c171c14e39815ef99d5e884b65c27eb0 /src | |
parent | 4312f6d963bba773b4fbfd548633e4e434b5f7c1 (diff) | |
download | emacs-3da835474bfae5c303d08bcc29544887150fc78f.tar.gz |
(single_keymap_panes): New arg DEPTH.
Cut off recursion at that depth. Callers changed.
Diffstat (limited to 'src')
-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 |