changeset 23975:b0040d620df9

In each active map, for each menu bar item, use only the first submap. (menu_bar_one_keymap): Initialize menu_bar_one_keymap_changed_items. (menu_bar_item): Update and test menu_bar_one_keymap_changed_items. (syms_of_keyboard): Staticpro and init it.
author Richard M. Stallman <rms@gnu.org>
date Sat, 02 Jan 1999 00:11:36 +0000
parents dcc1ebab38c1
children 12c74d5eff80
files src/keyboard.c
diffstat 1 files changed, 17 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/keyboard.c	Sat Jan 02 00:10:53 1999 +0000
+++ b/src/keyboard.c	Sat Jan 02 00:11:36 1999 +0000
@@ -5701,12 +5701,16 @@
 /* Scan one map KEYMAP, accumulating any menu items it defines
    in menu_bar_items_vector.  */
 
+static Lisp_Object menu_bar_one_keymap_changed_items;
+
 static void
 menu_bar_one_keymap (keymap)
      Lisp_Object keymap;
 {
   Lisp_Object tail, item, table;
 
+  menu_bar_one_keymap_changed_items = Qnil;
+
   /* Loop over all keymap entries that have menu strings.  */
   for (tail = keymap; CONSP (tail); tail = XCONS (tail)->cdr)
     {
@@ -5739,6 +5743,7 @@
 {
   struct gcpro gcpro1;
   int i;
+  Lisp_Object tem;
 
   if (EQ (item, Qundefined))
     {
@@ -5767,6 +5772,15 @@
   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.  */
@@ -9075,6 +9089,9 @@
   read_key_sequence_cmd = Qnil;
   staticpro (&read_key_sequence_cmd);
 
+  menu_bar_one_keymap_changed_items = Qnil;
+  staticpro (&menu_bar_one_keymap_changed_items);
+
   defsubr (&Sevent_convert_list);
   defsubr (&Sread_key_sequence);
   defsubr (&Sread_key_sequence_vector);