emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/emacs-23 r100626: * xdisp.c (expose_window)


From: YAMAMOTO Mitsuharu
Subject: [Emacs-diffs] /srv/bzr/emacs/emacs-23 r100626: * xdisp.c (expose_window): Save original value of phys_cursor_on_p and turn window cursor on if cleared (Bug#9415).
Date: Sat, 10 Sep 2011 15:54:04 +0900
User-agent: Bazaar (2.3.1)

------------------------------------------------------------
revno: 100626
committer: YAMAMOTO Mitsuharu <address@hidden>
branch nick: emacs-23
timestamp: Sat 2011-09-10 15:54:04 +0900
message:
  * xdisp.c (expose_window): Save original value of phys_cursor_on_p and turn 
window cursor on if cleared (Bug#9415).
modified:
  src/ChangeLog
  src/xdisp.c
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2011-09-07 16:48:37 +0000
+++ b/src/ChangeLog     2011-09-10 06:54:04 +0000
@@ -1,3 +1,8 @@
+2011-09-10  YAMAMOTO Mitsuharu  <address@hidden>
+
+       * xdisp.c (expose_window): Save original value of phys_cursor_on_p
+       and turn window cursor on if cleared (Bug#9415).
+
 2011-09-07  Andreas Schwab  <address@hidden>
 
        * search.c (boyer_moore): Take unibyte characters from pattern

=== modified file 'src/xdisp.c'
--- a/src/xdisp.c       2011-07-07 07:11:54 +0000
+++ b/src/xdisp.c       2011-09-10 06:54:04 +0000
@@ -24249,7 +24249,7 @@
     {
       int yb = window_text_bottom_y (w);
       struct glyph_row *row;
-      int cursor_cleared_p;
+      int cursor_cleared_p, phys_cursor_on_p;
       struct glyph_row *first_overlapping_row, *last_overlapping_row;
 
       TRACE ((stderr, "expose_window (%d, %d, %d, %d)\n",
@@ -24269,6 +24269,13 @@
       else
        cursor_cleared_p = 0;
 
+      /* If the row containing the cursor extends face to end of line,
+        then expose_area might overwrite the cursor outside the
+        rectangle and thus notice_overwritten_cursor might clear
+        w->phys_cursor_on_p.  We remember the original value and
+        check later if it is changed.  */
+      phys_cursor_on_p = w->phys_cursor_on_p;
+
       /* Update lines intersecting rectangle R.  */
       first_overlapping_row = last_overlapping_row = NULL;
       for (row = w->current_matrix->rows;
@@ -24335,7 +24342,8 @@
          x_draw_vertical_border (w);
 
          /* Turn the cursor on again.  */
-         if (cursor_cleared_p)
+         if (cursor_cleared_p
+             || (phys_cursor_on_p && !w->phys_cursor_on_p))
            update_window_cursor (w, 1);
        }
     }


reply via email to

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