From: Kim F. Storm Date: Thu, 21 Mar 2002 21:33:31 +0000 (+0000) Subject: (menu_bar_items): Mostly undo 2002-02-20 patch, so X-Git-Tag: ttn-vms-21-2-B4~16035 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fd6463412b9e4cd83483c148b5fee9a3c7906de9;p=emacs.git (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. --- diff --git a/src/ChangeLog b/src/ChangeLog index 56d5076d021..868fc5a14f7 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2002-03-21 Kim F. Storm + + * keyboard.c (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. + 2002-03-21 Jason Rumney * w32fns.c (x_clear_image_1): Disable color table code. diff --git a/src/keyboard.c b/src/keyboard.c index d04580b7c5a..7862796f8fb 100644 --- a/src/keyboard.c +++ b/src/keyboard.c @@ -6510,14 +6510,21 @@ menu_bar_items (old) } 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 @@ tool_bar_items (reuse, nitems) } 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. */