# HG changeset patch # User Stefan Monnier # Date 967391279 0 # Node ID fd9ff59434ff9317e549d45f016d29a3b2ea5c0e # Parent e61e8402b4878407011bc54f926bbd6b64221a94 (menu_bar_item): Detect duplicate entries for all items to better match the key-lookup behavior. diff -r e61e8402b487 -r fd9ff59434ff src/keyboard.c --- a/src/keyboard.c Sun Aug 27 13:02:01 2000 +0000 +++ b/src/keyboard.c Sun Aug 27 15:47:59 2000 +0000 @@ -6346,29 +6346,27 @@ &XVECTOR (menu_bar_items_vector)->contents[i], (menu_bar_items_index - i - 4) * sizeof (Lisp_Object)); menu_bar_items_index -= 4; - return; } - - /* If there's no definition for this key yet, - just ignore `undefined'. */ - return; - } - - GCPRO1 (key); /* Is this necessary? */ + } + + /* If this keymap has already contributed to this KEY, + don't contribute to it a second time. */ + tem = Fmemq (key, menu_bar_one_keymap_changed_items); + if (!NILP (tem) || NILP (item)) + return; + + menu_bar_one_keymap_changed_items + = Fcons (key, menu_bar_one_keymap_changed_items); + + /* We add to menu_bar_one_keymap_changed_items before doing the + parse_menu_item, so that if it turns out it wasn't a menu item, + it still correctly hides any further menu item. */ + GCPRO1 (key); i = parse_menu_item (item, 0, 1); UNGCPRO; if (!i) return; - /* If this keymap has already contributed to this KEY, - don't contribute to it a second time. */ - tem = Fmemq (key, menu_bar_one_keymap_changed_items); - if (!NILP (tem)) - return; - - menu_bar_one_keymap_changed_items - = Fcons (key, menu_bar_one_keymap_changed_items); - item = XVECTOR (item_properties)->contents[ITEM_PROPERTY_DEF]; /* Find any existing item for this KEY. */