Mercurial > emacs
changeset 83903:e9cafec4b205
(redisplay_internal): Make sure Elisp code always sees
consistent values of selected_frame and selected_window.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 06 Sep 2007 02:13:47 +0000 |
parents | 4224061ee52d |
children | 2ca0336093b3 |
files | src/ChangeLog src/xdisp.c |
diffstat | 2 files changed, 14 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/ChangeLog Wed Sep 05 19:59:01 2007 +0000 +++ b/src/ChangeLog Thu Sep 06 02:13:47 2007 +0000 @@ -1,3 +1,8 @@ +2007-09-06 Stefan Monnier <monnier@iro.umontreal.ca> + + * xdisp.c (redisplay_internal): Make sure Elisp code always sees + consistent values of selected_frame and selected_window. + 2007-09-04 Jason Rumney <jasonr@gnu.org> * w32console.c (initialize_w32_display): Zero unused hooks.
--- a/src/xdisp.c Wed Sep 05 19:59:01 2007 +0000 +++ b/src/xdisp.c Thu Sep 06 02:13:47 2007 +0000 @@ -10847,6 +10847,7 @@ int count, count1; struct frame *sf; int polling_stopped_here = 0; + Lisp_Object old_frame = selected_frame; /* Non-zero means redisplay has to consider all windows on all frames. Zero means, only selected_window is considered. */ @@ -10908,6 +10909,14 @@ } retry: + if (!EQ (old_frame, selected_frame) + && FRAME_LIVE_P (XFRAME (old_frame))) + /* When running redisplay, we play a bit fast-and-loose and allow e.g. + selected_frame and selected_window to be temporarily out-of-sync so + when we come back here via `goto retry', we need to resync because we + may need to run Elisp code (via prepare_menu_bars). */ + select_frame_for_redisplay (old_frame); + pause = 0; reconsider_clip_changes (w, current_buffer); last_escape_glyph_frame = NULL;