=== modified file 'src/xdisp.c' --- src/xdisp.c 2012-11-27 03:10:32 +0000 +++ src/xdisp.c 2012-11-28 07:13:04 +0000 @@ -10903,6 +10903,9 @@ static int window_outdated (struct window *w) { + if (w->pseudo_window_p) + /* Always update menu bar windows. */ + return 1; eassert (XBUFFER (w->buffer) == current_buffer); return (w->last_modified < MODIFF || w->last_overlay_modified < OVERLAY_MODIFF); @@ -13114,14 +13117,6 @@ /* Notice any pending interrupt request to change frame size. */ do_pending_window_change (1); - /* do_pending_window_change could change the selected_window due to - frame resizing which makes the selected window too small. */ - if (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw) - { - sw = w; - reconsider_clip_changes (w, current_buffer); - } - /* Clear frames marked as garbaged. */ clear_garbaged_frames (); @@ -13129,6 +13124,15 @@ if (NILP (Vmemory_full)) prepare_menu_bars (); + /* Resync because prepare_menu_bars may run Lisp or do_pending_window_change + could change the selected_window due to frame resizing which makes the + selected window too small. */ + if (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw) + { + sw = w; + reconsider_clip_changes (w, current_buffer); + } + if (windows_or_buffers_changed) update_mode_lines++;