diff src/menubar-x.c @ 82:6a378aca36af r20-0b91

Import from CVS: tag r20-0b91
author cvs
date Mon, 13 Aug 2007 09:07:36 +0200
parents 131b0175ea99
children a145efe76779
line wrap: on
line diff
--- a/src/menubar-x.c	Mon Aug 13 09:06:45 2007 +0200
+++ b/src/menubar-x.c	Mon Aug 13 09:07:36 2007 +0200
@@ -336,6 +336,7 @@
   struct device *d = get_device_from_display (XtDisplay (widget));
   struct frame *f = x_any_window_to_frame (d, XtWindow (widget));
   Lisp_Object rest = Qnil;
+  Lisp_Object frame;
   int any_changes = 0;
 
   if (!f)
@@ -343,6 +344,10 @@
   if (!f)
     return;
 
+  /* make sure f is the selected frame */
+  XSETFRAME (frame, f);
+  Fselect_frame (frame);
+
   if (client_data)
     {
       /* this is an incremental menu construction callback */
@@ -433,12 +438,20 @@
     data = 0;
   else
     {
+      Lisp_Object old_buffer;
+      int count = specpdl_depth ();
+
+      old_buffer = Fcurrent_buffer ();
+      record_unwind_protect (Fset_buffer, old_buffer);
+      Fset_buffer ( XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer);
       data = menu_item_descriptor_to_widget_value (menubar, MENUBAR_TYPE,
 						   deep_p, 0);
 #ifdef ENERGIZE
       if (data)
 	set_panel_button_sensitivity (f, data);
 #endif
+      Fset_buffer (old_buffer);
+      unbind_to (count, Qnil);
     }
   return data;
 }