# HG changeset patch # User Chong Yidong # Date 1219972002 0 # Node ID 75ebbf217ac05e0e7a12a26fd073b86926502c6b # Parent 6ec6d8b1b3b91610722a00e0ce577b82e551ff5d (update_tool_bar_unwind): New function. (update_tool_bar): Temporarily set selected frame before building tool-bar items. diff -r 6ec6d8b1b3b9 -r 75ebbf217ac0 src/xdisp.c --- 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);