]> code.delx.au - gnu-emacs/commitdiff
Merge changes from emacs-23 branch
authorChong Yidong <cyd@stupidchicken.com>
Sun, 18 Sep 2011 15:21:57 +0000 (11:21 -0400)
committerChong Yidong <cyd@stupidchicken.com>
Sun, 18 Sep 2011 15:21:57 +0000 (11:21 -0400)
src/ChangeLog
src/search.c
src/xdisp.c

index a7bfd9b7d22d31fc378585b889610df1e76335b8..e5962fa8fedb41010ed818ef2f35b4502a03e617 100644 (file)
@@ -1,3 +1,13 @@
+2011-09-18  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * xdisp.c (expose_window): Save original value of phys_cursor_on_p
+       and turn window cursor on if cleared (Bug#9415).
+
+2011-09-18  Andreas Schwab  <schwab@linux-m68k.org>
+
+       * search.c (boyer_moore): Take unibyte characters from pattern
+       literally.  (Bug#9458)
+
 2011-09-18  Eli Zaretskii  <eliz@gnu.org>
 
        * xdisp.c (reseat_at_next_visible_line_start): Fix last change.
index b3d67e6c4313189751e1bdb67fc49522c0b53b74..a3b4e1dcbcef545c162d142075cb01fb1550ea99 100644 (file)
@@ -1760,7 +1760,7 @@ boyer_moore (EMACS_INT n, unsigned char *base_pat,
                ch = -1;
            }
 
-         if (ch >= 0200)
+         if (ch >= 0200 && multibyte)
            j = (ch & 0x3F) | 0200;
          else
            j = *ptr;
@@ -1779,7 +1779,7 @@ boyer_moore (EMACS_INT n, unsigned char *base_pat,
              while (1)
                {
                  TRANSLATE (ch, inverse_trt, ch);
-                 if (ch >= 0200)
+                 if (ch >= 0200 && multibyte)
                    j = (ch & 0x3F) | 0200;
                  else
                    j = ch;
index f4e26bf68b6a9b40b99cb754e59d5720a967b3c5..921a332fdc6a08aa1bf2770d1766ec628a9f17cd 100644 (file)
@@ -27261,7 +27261,7 @@ expose_window (struct window *w, XRectangle *fr)
     {
       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",
@@ -27281,6 +27281,13 @@ expose_window (struct window *w, XRectangle *fr)
       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;
@@ -27347,7 +27354,8 @@ expose_window (struct window *w, XRectangle *fr)
          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);
        }
     }