changeset 44078:92101c2bc6bf

(menu_bar_items): Mostly undo 2002-02-20 patch, so menu-bar bindings in keymap and local-map properties _are_ used. But try keymap property first in accordance with 2002-01-03 patch. Added comment describing why this is not always reliable. (tool_bar_items): Ditto for tool-bar.
author Kim F. Storm <storm@cua.dk>
date Thu, 21 Mar 2002 21:32:50 +0000
parents 514cc212d612
children bf72a8fa9d17
files src/keyboard.c
diffstat 1 files changed, 30 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/src/keyboard.c	Thu Mar 21 19:32:01 2002 +0000
+++ b/src/keyboard.c	Thu Mar 21 21:32:50 2002 +0000
@@ -6510,14 +6510,21 @@
       }
     else
       {
-	/* No, so use major and minor mode keymaps.
-	   Don't include local-map or keymap properties, as menu-bar
-	   bindings are not supported in those maps (that would require
-	   checking for menu-bar updates after every command).  */
-	nmaps = current_minor_maps (NULL, &tmaps);
-	maps = (Lisp_Object *) alloca ((nmaps + 2) * sizeof (maps[0]));
-	bcopy (tmaps, maps, nmaps * sizeof (maps[0]));
-	maps[nmaps++] = current_buffer->keymap;
+	/* No, so use major and minor mode keymaps and keymap property.
+	   Note that menu-bar bindings in the local-map and keymap
+	   properties may not work reliable, as they are only
+	   recognized when the menu-bar (or mode-line) is updated,
+	   which does not normally happen after every command.  */
+	Lisp_Object tem;
+	int nminor;
+	nminor = current_minor_maps (NULL, &tmaps);
+	maps = (Lisp_Object *) alloca ((nminor + 3) * sizeof (maps[0]));
+	nmaps = 0;
+	if (tem = get_local_map (PT, current_buffer, Qkeymap), !NILP (tem))
+	  maps[nmaps++] = tem;
+	bcopy (tmaps, (void *) (maps + nmaps), nminor * sizeof (maps[0]));
+	nmaps += nminor;
+	maps[nmaps++] = get_local_map (PT, current_buffer, Qlocal_map);
       }
     maps[nmaps++] = current_global_map;
   }
@@ -7158,14 +7165,21 @@
     }
   else
     {
-      /* No, so use major and minor mode keymaps.
-	 Don't include local-map or keymap properties, as tool-bar
-	 bindings are not supported in those maps (that would require
-	 checking for tool-bar updates after every command).  */
-      nmaps = current_minor_maps (NULL, &tmaps);
-      maps = (Lisp_Object *) alloca ((nmaps + 2) * sizeof (maps[0]));
-      bcopy (tmaps, maps, nmaps * sizeof (maps[0]));
-      maps[nmaps++] = current_buffer->keymap;
+      /* No, so use major and minor mode keymaps and keymap property.
+	 Note that tool-bar bindings in the local-map and keymap
+	 properties may not work reliable, as they are only
+	 recognized when the tool-bar (or mode-line) is updated,
+	 which does not normally happen after every command.  */
+      Lisp_Object tem;
+      int nminor;
+      nminor = current_minor_maps (NULL, &tmaps);
+      maps = (Lisp_Object *) alloca ((nminor + 3) * sizeof (maps[0]));
+      nmaps = 0;
+      if (tem = get_local_map (PT, current_buffer, Qkeymap), !NILP (tem))
+	maps[nmaps++] = tem;
+      bcopy (tmaps, (void *) (maps + nmaps), nminor * sizeof (maps[0]));
+      nmaps += nminor;
+      maps[nmaps++] = get_local_map (PT, current_buffer, Qlocal_map);
     }
 
   /* Add global keymap at the end.  */