]> code.delx.au - gnu-emacs/commitdiff
(menu_bar_item): Detect duplicate entries for all items
authorStefan Monnier <monnier@iro.umontreal.ca>
Sun, 27 Aug 2000 15:47:59 +0000 (15:47 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sun, 27 Aug 2000 15:47:59 +0000 (15:47 +0000)
to better match the key-lookup behavior.

src/keyboard.c

index 778cb16dbd68d4e465316626a50e064dfd347e93..35a199fa5c16ed0f948abd6ee9c1065925099266 100644 (file)
@@ -6346,29 +6346,27 @@ menu_bar_item (key, item)
                     &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? */
-  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))
+  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;
+
   item = XVECTOR (item_properties)->contents[ITEM_PROPERTY_DEF];
 
   /* Find any existing item for this KEY.  */