emacs-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Excessive redraw of tool bar lines


From: YAMAMOTO Mitsuharu
Subject: Excessive redraw of tool bar lines
Date: Sat, 12 Nov 2005 12:05:37 +0900
User-agent: Wanderlust/2.14.0 (Africa) SEMI/1.14.6 (Maruoka) FLIM/1.14.6 (Marutamachi) APEL/10.6 Emacs/22.0.50 (sparc-sun-solaris2.8) MULE/5.0 (SAKAKI)

I found that the rightmost icons and the trailing spaces in the tool
bar lines are drawn on every redraw (except simple cursor motions)
even when the tool bar items are not changed.  I think it also occurs
in the usual text lines where the face is extended to the end of line.

Does the following patch do the right thing?

BTW, "Quartz Debug.app" on Mac OS X is useful to find such a needless
redraw.

                                     YAMAMOTO Mitsuharu
                                address@hidden

Index: src/dispnew.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/dispnew.c,v
retrieving revision 1.358
diff -c -r1.358 dispnew.c
*** src/dispnew.c       7 Oct 2005 21:47:49 -0000       1.358
--- src/dispnew.c       12 Nov 2005 02:53:00 -0000
***************
*** 4361,4367 ****
        /* If the desired row extends its face to the text area end,
         make sure we write at least one glyph, so that the face
         extension actually takes place.  */
!       if (MATRIX_ROW_EXTENDS_FACE_P (desired_row))
        --desired_stop_pos;
  
        stop = min (current_row->used[TEXT_AREA], desired_stop_pos);
--- 4361,4370 ----
        /* If the desired row extends its face to the text area end,
         make sure we write at least one glyph, so that the face
         extension actually takes place.  */
!       if (MATRIX_ROW_EXTENDS_FACE_P (desired_row)
!         && (desired_stop_pos < current_row->used[TEXT_AREA]
!             || (desired_stop_pos == current_row->used[TEXT_AREA]
!                 && !MATRIX_ROW_EXTENDS_FACE_P (current_row))))
        --desired_stop_pos;
  
        stop = min (current_row->used[TEXT_AREA], desired_stop_pos);
***************
*** 4480,4486 ****
             has to be cleared, if and only if we did a write_glyphs
             above.  This is made sure by setting desired_stop_pos
             appropriately above.  */
!         xassert (i < desired_row->used[TEXT_AREA]);
        }
        else if (MATRIX_ROW_EXTENDS_FACE_P (current_row))
        {
--- 4483,4492 ----
             has to be cleared, if and only if we did a write_glyphs
             above.  This is made sure by setting desired_stop_pos
             appropriately above.  */
!         xassert (i < desired_row->used[TEXT_AREA]
!                  || ((desired_row->used[TEXT_AREA]
!                       == current_row->used[TEXT_AREA])
!                      && MATRIX_ROW_EXTENDS_FACE_P (current_row)));
        }
        else if (MATRIX_ROW_EXTENDS_FACE_P (current_row))
        {







reply via email to

[Prev in Thread] Current Thread [Next in Thread]