[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master dc1d2d3: Fix bugs caused by running window change f
From: |
Martin Rudalics |
Subject: |
[Emacs-diffs] master dc1d2d3: Fix bugs caused by running window change functions during redisplay |
Date: |
Sat, 2 Feb 2019 03:45:04 -0500 (EST) |
branch: master
commit dc1d2d3c22ab91b8b52188574680a028851fbda8
Author: Martin Rudalics <address@hidden>
Commit: Martin Rudalics <address@hidden>
Fix bugs caused by running window change functions during redisplay
* src/xdisp.c (redisplay_internal): Run window change
functions before updating the display so changes induced by
these functions can get caught by redisplay (Bug#34138).
* src/window.c (run_window_change_functions): Bind
Qinhibit_redisplay to avoid that the minibuffer window gets
resized while running window change functions (Bug#34179,
Bug#34260).
---
src/window.c | 1 +
src/xdisp.c | 27 +++------------------------
2 files changed, 4 insertions(+), 24 deletions(-)
diff --git a/src/window.c b/src/window.c
index 1b474a6..49d7fc2 100644
--- a/src/window.c
+++ b/src/window.c
@@ -3710,6 +3710,7 @@ run_window_change_functions (void)
ptrdiff_t count_outer = SPECPDL_INDEX ();
record_unwind_protect_void (window_change_record);
+ specbind (Qinhibit_redisplay, Qt);
FOR_EACH_FRAME (tail, frame)
{
diff --git a/src/xdisp.c b/src/xdisp.c
index ec8dd86..b5034b5 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -14153,6 +14153,9 @@ redisplay_internal (void)
clear_garbaged_frames ();
}
+ if (!NILP (Vrun_hooks))
+ run_window_change_functions ();
+
if (windows_or_buffers_changed && !update_mode_lines)
/* Code that sets windows_or_buffers_changed doesn't distinguish whether
only the windows's contents needs to be refreshed, or whether the
@@ -14332,18 +14335,6 @@ redisplay_internal (void)
&& (w = XWINDOW (selected_window)) != sw)
goto retry;
- if (!NILP (Vrun_hooks))
- {
- run_window_change_functions ();
-
- /* If windows or buffers changed or selected_window
- changed, redisplay again. */
- if ((windows_or_buffers_changed)
- || (WINDOWP (selected_window)
- && (w = XWINDOW (selected_window)) != sw))
- goto retry;
- }
-
/* We used to always goto end_of_redisplay here, but this
isn't enough if we have a blinking cursor. */
if (w->cursor_off_p == w->last_cursor_off_p)
@@ -14707,18 +14698,6 @@ redisplay_internal (void)
&& (w = XWINDOW (selected_window)) != sw))
goto retry;
- if (!NILP (Vrun_hooks))
- {
- run_window_change_functions ();
-
- /* If windows or buffers changed or selected_window changed,
- redisplay again. */
- if ((windows_or_buffers_changed)
- || (WINDOWP (selected_window)
- && (w = XWINDOW (selected_window)) != sw))
- goto retry;
- }
-
/* Clear the face and image caches.
We used to do this only if consider_all_windows_p. But the cache
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Emacs-diffs] master dc1d2d3: Fix bugs caused by running window change functions during redisplay,
Martin Rudalics <=