diff options
Diffstat (limited to 'src/dispnew.c')
-rw-r--r-- | src/dispnew.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/dispnew.c b/src/dispnew.c index edcb7223f0b..5570129c389 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -173,7 +173,22 @@ DEFUN ("redraw-display", Fredraw_display, Sredraw_display, 0, 0, "", for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr) { frame = XCONS (tail)->car; - if (FRAME_VISIBLE_P (XFRAME (frame))) + + /* If we simply redrew all visible frames, whether or not they + were garbaged, then this would make all frames clear and + redraw whenever a new frame is created or an existing frame + is de-iconified; those events set the global frame_garbaged + flag, to which redisplay responds by calling this function. + + This used to redraw all visible frames; the only advantage of + that approach is that if a frame changes from invisible to + visible without setting its garbaged flag, it still gets + redisplayed. But that should never happen; since invisible + frames are not updated, they should always be marked as + garbaged when they become visible again. If that doesn't + happen, it's a bug in the visibility code, not a bug here. */ + if (FRAME_VISIBLE_P (XFRAME (frame)) + && FRAME_GARBAGED_P (XFRAME (frame))) Fredraw_frame (frame); } return Qnil; |