diff options
| author | Glenn Morris | 2011-02-16 00:39:19 -0800 |
|---|---|---|
| committer | Glenn Morris | 2011-02-16 00:39:19 -0800 |
| commit | 8678d9e413593b0abab296551a20589745c459da (patch) | |
| tree | 6ce66f613a4cccad3708e3682218d7978b97de3f /src | |
| parent | da5e0ce4d6e000b1bc493cb20ce0cc9ecb1ba244 (diff) | |
| parent | 4648b91b097ad9f3dfbd8a988846293ea5a5c78c (diff) | |
| download | emacs-8678d9e413593b0abab296551a20589745c459da.tar.gz emacs-8678d9e413593b0abab296551a20589745c459da.zip | |
Merge from emacs-23; up to 2010-05-28T19:18:47Z!juri@jurta.org.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 6 | ||||
| -rw-r--r-- | src/xdisp.c | 21 |
2 files changed, 25 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index aae583094f2..d70da316ba9 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,9 @@ | |||
| 1 | 2011-02-16 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * xdisp.c (redisplay_internal): Resynchronize `w' if the selected | ||
| 4 | window is changed inside calls to do_pending_window_change. | ||
| 5 | (Bug#8020) | ||
| 6 | |||
| 1 | 2011-02-16 Paul Eggert <eggert@cs.ucla.edu> | 7 | 2011-02-16 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 8 | ||
| 3 | Remove no-longer needed getloadavg symbols. | 9 | Remove no-longer needed getloadavg symbols. |
diff --git a/src/xdisp.c b/src/xdisp.c index 68f7835f0d7..147f2965d0e 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -11419,6 +11419,7 @@ static void | |||
| 11419 | redisplay_internal (int preserve_echo_area) | 11419 | redisplay_internal (int preserve_echo_area) |
| 11420 | { | 11420 | { |
| 11421 | struct window *w = XWINDOW (selected_window); | 11421 | struct window *w = XWINDOW (selected_window); |
| 11422 | struct window *sw; | ||
| 11422 | struct frame *f; | 11423 | struct frame *f; |
| 11423 | int pause; | 11424 | int pause; |
| 11424 | int must_finish = 0; | 11425 | int must_finish = 0; |
| @@ -11479,6 +11480,9 @@ redisplay_internal (int preserve_echo_area) | |||
| 11479 | } | 11480 | } |
| 11480 | 11481 | ||
| 11481 | retry: | 11482 | retry: |
| 11483 | /* Remember the currently selected window. */ | ||
| 11484 | sw = w; | ||
| 11485 | |||
| 11482 | if (!EQ (old_frame, selected_frame) | 11486 | if (!EQ (old_frame, selected_frame) |
| 11483 | && FRAME_LIVE_P (XFRAME (old_frame))) | 11487 | && FRAME_LIVE_P (XFRAME (old_frame))) |
| 11484 | /* When running redisplay, we play a bit fast-and-loose and allow e.g. | 11488 | /* When running redisplay, we play a bit fast-and-loose and allow e.g. |
| @@ -11546,6 +11550,14 @@ redisplay_internal (int preserve_echo_area) | |||
| 11546 | /* Notice any pending interrupt request to change frame size. */ | 11550 | /* Notice any pending interrupt request to change frame size. */ |
| 11547 | do_pending_window_change (1); | 11551 | do_pending_window_change (1); |
| 11548 | 11552 | ||
| 11553 | /* do_pending_window_change could change the selected_window due to | ||
| 11554 | frame resizing which makes the selected window too small. */ | ||
| 11555 | if (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw) | ||
| 11556 | { | ||
| 11557 | sw = w; | ||
| 11558 | reconsider_clip_changes (w, current_buffer); | ||
| 11559 | } | ||
| 11560 | |||
| 11549 | /* Clear frames marked as garbaged. */ | 11561 | /* Clear frames marked as garbaged. */ |
| 11550 | if (frame_garbaged) | 11562 | if (frame_garbaged) |
| 11551 | clear_garbaged_frames (); | 11563 | clear_garbaged_frames (); |
| @@ -11815,6 +11827,10 @@ redisplay_internal (int preserve_echo_area) | |||
| 11815 | if (!must_finish) | 11827 | if (!must_finish) |
| 11816 | { | 11828 | { |
| 11817 | do_pending_window_change (1); | 11829 | do_pending_window_change (1); |
| 11830 | /* If selected_window changed, redisplay again. */ | ||
| 11831 | if (WINDOWP (selected_window) | ||
| 11832 | && (w = XWINDOW (selected_window)) != sw) | ||
| 11833 | goto retry; | ||
| 11818 | 11834 | ||
| 11819 | /* We used to always goto end_of_redisplay here, but this | 11835 | /* We used to always goto end_of_redisplay here, but this |
| 11820 | isn't enough if we have a blinking cursor. */ | 11836 | isn't enough if we have a blinking cursor. */ |
| @@ -12109,8 +12125,9 @@ redisplay_internal (int preserve_echo_area) | |||
| 12109 | do_pending_window_change (1); | 12125 | do_pending_window_change (1); |
| 12110 | 12126 | ||
| 12111 | /* If we just did a pending size change, or have additional | 12127 | /* If we just did a pending size change, or have additional |
| 12112 | visible frames, redisplay again. */ | 12128 | visible frames, or selected_window changed, redisplay again. */ |
| 12113 | if (windows_or_buffers_changed && !pause) | 12129 | if ((windows_or_buffers_changed && !pause) |
| 12130 | || (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw)) | ||
| 12114 | goto retry; | 12131 | goto retry; |
| 12115 | 12132 | ||
| 12116 | /* Clear the face and image caches. | 12133 | /* Clear the face and image caches. |