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);