From: Dmitry Antipov Date: Tue, 8 Oct 2013 14:56:15 +0000 (+0400) Subject: * dispnew.c (set_window_update_flags): Add buffer arg. Adjust comment. X-Git-Tag: emacs-24.3.90~173^2^2~42^2~45^2~387^2~1330 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ecab13d4aa458544c604ece77e2ecdf0b9910649;p=emacs.git * 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. --- diff --git a/src/ChangeLog b/src/ChangeLog index 06733a2455f..fc2f7a9d57c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,12 @@ +2013-10-08 Dmitry Antipov + + * 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 Do not allocate huge temporary memory areas and objects while encoding diff --git a/src/dispextern.h b/src/dispextern.h index 5ddc177bcf0..2f6b730865d 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -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); diff --git a/src/dispnew.c b/src/dispnew.c index 27167f4e1e4..8507a330a92 100644 --- a/src/dispnew.c +++ b/src/dispnew.c @@ -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); diff --git a/src/xdisp.c b/src/xdisp.c index b01979c3dfd..5d5ce12d096 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -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;