aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorStefan Monnier <[email protected]>2003-05-04 01:39:33 +0000
committerStefan Monnier <[email protected]>2003-05-04 01:39:33 +0000
commit4216b545a9294b1a0126a934cea7660bef0c4627 (patch)
treefa988d15509bb3757caad6b02383f2fea5b5ca00 /src
parent0695ce9138846ceb06db58f1fc5b3d174074a4f1 (diff)
(input_available_signal): Mark static.
(menu_bar_items): Use map_keymap. (menu_bar_one_keymap): Remove. (menu_bar_item): Adjust arglist (for use in map_keymap). Properly hide a second binding when not both are keymaps.
Diffstat (limited to 'src')
-rw-r--r--src/keyboard.c51
1 files changed, 12 insertions, 39 deletions
diff --git a/src/keyboard.c b/src/keyboard.c
index 70c9d90530..454200f619 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -6689,7 +6689,7 @@ read_avail_input (expected)
#ifdef SIGIO /* for entire page */
/* Note SIGIO has been undef'd if FIONREAD is missing. */
-SIGTYPE
+static SIGTYPE
input_available_signal (signo)
int signo;
{
@@ -6855,7 +6855,10 @@ menu_bar_items (old)
def = get_keymap (access_keymap (maps[mapno], Qmenu_bar, 1, 0, 1),
0, 1);
if (CONSP (def))
- menu_bar_one_keymap (def);
+ {
+ menu_bar_one_keymap_changed_items = Qnil;
+ map_keymap (def, menu_bar_item, Qnil, NULL, 1);
+ }
}
/* Move to the end those items that should be at the end. */
@@ -6909,48 +6912,15 @@ menu_bar_items (old)
return menu_bar_items_vector;
}
-/* 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;
-
- menu_bar_one_keymap_changed_items = Qnil;
-
- /* Loop over all keymap entries that have menu strings. */
- for (tail = keymap; CONSP (tail); tail = XCDR (tail))
- {
- item = XCAR (tail);
- if (CONSP (item))
- menu_bar_item (XCAR (item), XCDR (item));
- else if (VECTORP (item))
- {
- /* Loop over the char values represented in the vector. */
- int len = XVECTOR (item)->size;
- int c;
- for (c = 0; c < len; c++)
- {
- Lisp_Object character;
- XSETFASTINT (character, c);
- menu_bar_item (character, XVECTOR (item)->contents[c]);
- }
- }
- }
-}
-
/* Add one item to menu_bar_items_vector, for KEY, ITEM_STRING and DEF.
If there's already an item for KEY, add this DEF to it. */
Lisp_Object item_properties;
static void
-menu_bar_item (key, item)
- Lisp_Object key, item;
+menu_bar_item (key, item, dummy1, dummy2)
+ Lisp_Object key, item, dummy1;
+ void *dummy2;
{
struct gcpro gcpro1;
int i;
@@ -7023,7 +6993,10 @@ menu_bar_item (key, item)
{
Lisp_Object old;
old = XVECTOR (menu_bar_items_vector)->contents[i + 2];
- XVECTOR (menu_bar_items_vector)->contents[i + 2] = Fcons (item, old);
+ /* If the new and the old items are not both keymaps,
+ the lookup will only find `item'. */
+ item = Fcons (item, KEYMAPP (item) && KEYMAPP (XCAR (old)) ? old : Qnil);
+ XVECTOR (menu_bar_items_vector)->contents[i + 2] = item;
}
}