* dispnew.c (set_window_update_flags): Add buffer arg. Adjust comment.

(redraw_frame, update_frame): Adjust users.
* dispextern.h (set_window_update_flags): Adjust prototype.
* xdisp.c (redisplay_internal): When updating all frames with zero
windows_or_buffers_changed, assume that only the windows that shows
current buffer should be really updated.
This commit is contained in:
Dmitry Antipov 2013-10-08 18:56:15 +04:00
parent ec95982c36
commit ecab13d4aa
4 changed files with 25 additions and 10 deletions

View file

@ -1,3 +1,12 @@
2013-10-08 Dmitry Antipov <dmantipov@yandex.ru>
* dispnew.c (set_window_update_flags): Add buffer arg. Adjust comment.
(redraw_frame, update_frame): Adjust users.
* dispextern.h (set_window_update_flags): Adjust prototype.
* xdisp.c (redisplay_internal): When updating all frames with zero
windows_or_buffers_changed, assume that only the windows that shows
current buffer should be really updated.
2013-10-08 Dmitry Antipov <dmantipov@yandex.ru>
Do not allocate huge temporary memory areas and objects while encoding

View file

@ -3460,7 +3460,7 @@ void blank_row (struct window *, struct glyph_row *, int);
void clear_glyph_matrix_rows (struct glyph_matrix *, int, int);
void clear_glyph_row (struct glyph_row *);
void prepare_desired_row (struct glyph_row *);
void set_window_update_flags (struct window *, bool);
void set_window_update_flags (struct window *, struct buffer *, bool);
void update_single_window (struct window *, bool);
void do_pending_window_change (bool);
void change_frame_size (struct frame *, int, int, bool, bool, bool);

View file

@ -2910,7 +2910,7 @@ redraw_frame (struct frame *f)
/* Mark all windows as inaccurate, so that every window will have
its redisplay done. */
mark_window_display_accurate (FRAME_ROOT_WINDOW (f), 0);
set_window_update_flags (XWINDOW (FRAME_ROOT_WINDOW (f)), 1);
set_window_update_flags (XWINDOW (FRAME_ROOT_WINDOW (f)), NULL, 1);
f->garbaged = 0;
}
@ -3041,7 +3041,7 @@ update_frame (struct frame *f, bool force_p, bool inhibit_hairy_id_p)
do_pause:
/* Reset flags indicating that a window should be updated. */
set_window_update_flags (root_window, 0);
set_window_update_flags (root_window, NULL, 0);
display_completed = !paused_p;
return paused_p;
@ -3820,17 +3820,18 @@ set_window_cursor_after_update (struct window *w)
}
/* Set WINDOW->must_be_updated_p to ON_P for all windows in the window
tree rooted at W. */
/* If B is NULL, set WINDOW->must_be_updated_p to ON_P for all windows in
the window tree rooted at W. Otherwise set WINDOW->must_be_updated_p
to ON_P only for windows that displays B. */
void
set_window_update_flags (struct window *w, bool on_p)
set_window_update_flags (struct window *w, struct buffer *b, bool on_p)
{
while (w)
{
if (WINDOWP (w->contents))
set_window_update_flags (XWINDOW (w->contents), on_p);
else
set_window_update_flags (XWINDOW (w->contents), b, on_p);
else if (!(b && b != XBUFFER (w->contents)))
w->must_be_updated_p = on_p;
w = NILP (w->next) ? 0 : XWINDOW (w->next);

View file

@ -13437,8 +13437,13 @@ redisplay_internal (void)
unrequest_sigio ();
STOP_POLLING;
/* Update the display. */
set_window_update_flags (XWINDOW (f->root_window), 1);
/* Mark windows on frame F to update. If we decide to
update all frames but windows_or_buffers_changed is
zero, we assume that only the windows that shows
current buffer should be really updated. */
set_window_update_flags
(XWINDOW (f->root_window),
(windows_or_buffers_changed ? NULL : current_buffer), 1);
pending |= update_frame (f, 0, 0);
f->cursor_type_changed = 0;
f->updated_p = 1;