Mercurial > emacs
changeset 97807:75ebbf217ac0
(update_tool_bar_unwind): New function.
(update_tool_bar): Temporarily set selected frame before building
tool-bar items.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Fri, 29 Aug 2008 01:06:42 +0000 |
parents | 6ec6d8b1b3b9 |
children | 1aab9bdd9355 |
files | src/xdisp.c |
diffstat | 1 files changed, 17 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xdisp.c Fri Aug 29 01:06:33 2008 +0000 +++ b/src/xdisp.c Fri Aug 29 01:06:42 2008 +0000 @@ -9834,6 +9834,14 @@ int last_tool_bar_item; +static Lisp_Object +update_tool_bar_unwind (frame) + Lisp_Object frame; +{ + selected_frame = frame; + return Qnil; +} + /* Update the tool-bar item list for frame F. This has to be done before we start to fill in any display lines. Called from prepare_menu_bars. If SAVE_MATCH_DATA is non-zero, we must save @@ -9878,7 +9886,7 @@ { struct buffer *prev = current_buffer; int count = SPECPDL_INDEX (); - Lisp_Object new_tool_bar; + Lisp_Object frame, new_tool_bar; int new_n_tool_bar; struct gcpro gcpro1; @@ -9900,6 +9908,14 @@ GCPRO1 (new_tool_bar); + /* We must temporarily set the selected frame to this frame + before calling tool_bar_items, because the calculation of + the tool-bar keymap uses the selected frame (see + `tool-bar-make-keymap' in tool-bar.el). */ + record_unwind_protect (update_tool_bar_unwind, selected_frame); + XSETFRAME (frame, f); + selected_frame = frame; + /* Build desired tool-bar items from keymaps. */ new_tool_bar = tool_bar_items (Fcopy_sequence (f->tool_bar_items), &new_n_tool_bar);