aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEli Zaretskii2011-02-13 20:55:07 +0200
committerEli Zaretskii2011-02-13 20:55:07 +0200
commita73d395bd9e31e29814d642bf35d412ccb6f0ee2 (patch)
tree879214a20e03a576c8c304c69e829ef09c46e424 /src
parent165bc5a066990bace024c04ba431f140a25d0bfd (diff)
downloademacs-a73d395bd9e31e29814d642bf35d412ccb6f0ee2.tar.gz
emacs-a73d395bd9e31e29814d642bf35d412ccb6f0ee2.zip
Fix bug #8020 with quick resizing of the selected frame.
xdisp.c (redisplay_internal): Resynchronize `w' if the selected window is changed inside calls to do_pending_window_change.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog6
-rw-r--r--src/xdisp.c21
2 files changed, 25 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index b90a9c02e8b..68e9c76a437 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
12011-02-13 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
12011-02-12 Eli Zaretskii <eliz@gnu.org> 72011-02-12 Eli Zaretskii <eliz@gnu.org>
2 8
3 * terminal.c (create_terminal): Use default-keyboard-coding-system 9 * terminal.c (create_terminal): Use default-keyboard-coding-system
diff --git a/src/xdisp.c b/src/xdisp.c
index d625b05075d..c2af4d68b6e 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -11261,6 +11261,7 @@ redisplay_internal (preserve_echo_area)
11261 int preserve_echo_area; 11261 int preserve_echo_area;
11262{ 11262{
11263 struct window *w = XWINDOW (selected_window); 11263 struct window *w = XWINDOW (selected_window);
11264 struct window *sw;
11264 struct frame *f; 11265 struct frame *f;
11265 int pause; 11266 int pause;
11266 int must_finish = 0; 11267 int must_finish = 0;
@@ -11331,6 +11332,9 @@ redisplay_internal (preserve_echo_area)
11331 } 11332 }
11332 11333
11333 retry: 11334 retry:
11335 /* Remember the currently selected window. */
11336 sw = w;
11337
11334 if (!EQ (old_frame, selected_frame) 11338 if (!EQ (old_frame, selected_frame)
11335 && FRAME_LIVE_P (XFRAME (old_frame))) 11339 && FRAME_LIVE_P (XFRAME (old_frame)))
11336 /* When running redisplay, we play a bit fast-and-loose and allow e.g. 11340 /* When running redisplay, we play a bit fast-and-loose and allow e.g.
@@ -11396,6 +11400,14 @@ redisplay_internal (preserve_echo_area)
11396 /* Notice any pending interrupt request to change frame size. */ 11400 /* Notice any pending interrupt request to change frame size. */
11397 do_pending_window_change (1); 11401 do_pending_window_change (1);
11398 11402
11403 /* do_pending_window_change could change the selected_window due to
11404 frame resizing which makes the selected window too small. */
11405 if (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw)
11406 {
11407 sw = w;
11408 reconsider_clip_changes (w, current_buffer);
11409 }
11410
11399 /* Clear frames marked as garbaged. */ 11411 /* Clear frames marked as garbaged. */
11400 if (frame_garbaged) 11412 if (frame_garbaged)
11401 clear_garbaged_frames (); 11413 clear_garbaged_frames ();
@@ -11665,6 +11677,10 @@ redisplay_internal (preserve_echo_area)
11665 if (!must_finish) 11677 if (!must_finish)
11666 { 11678 {
11667 do_pending_window_change (1); 11679 do_pending_window_change (1);
11680 /* If selected_window changed, redisplay again. */
11681 if (WINDOWP (selected_window)
11682 && (w = XWINDOW (selected_window)) != sw)
11683 goto retry;
11668 11684
11669 /* We used to always goto end_of_redisplay here, but this 11685 /* We used to always goto end_of_redisplay here, but this
11670 isn't enough if we have a blinking cursor. */ 11686 isn't enough if we have a blinking cursor. */
@@ -11959,8 +11975,9 @@ redisplay_internal (preserve_echo_area)
11959 do_pending_window_change (1); 11975 do_pending_window_change (1);
11960 11976
11961 /* If we just did a pending size change, or have additional 11977 /* If we just did a pending size change, or have additional
11962 visible frames, redisplay again. */ 11978 visible frames, or selected_window changed, redisplay again. */
11963 if (windows_or_buffers_changed && !pause) 11979 if ((windows_or_buffers_changed && !pause)
11980 || (WINDOWP (selected_window) && (w = XWINDOW (selected_window)) != sw))
11964 goto retry; 11981 goto retry;
11965 11982
11966 /* Clear the face cache eventually. */ 11983 /* Clear the face cache eventually. */