]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix beg_col calculation when painting from window start.
authorEli Zaretskii <eliz@gnu.org>
Sat, 2 Oct 2010 17:42:53 +0000 (19:42 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 2 Oct 2010 17:42:53 +0000 (19:42 +0200)
 xdisp.c (mouse_face_from_buffer_pos): Don't compute beg_col
 if already decided to paint from beginning of window.

src/ChangeLog
src/xdisp.c

index 61afecff203f0dd9d0d731b4142e0148b9c2beee..25649a1a83b347030a23404304e1ac12ead0d7ba 100644 (file)
@@ -12,7 +12,8 @@
        (mouse_face_from_buffer_pos): Rewrite to not assume that
        START_CHARPOS is always in mouse_face_beg_row.  If necessary, swap
        mouse_face_beg_row and mouse_face_end_row so that the former is
-       always above the latter or identical to it.
+       always above the latter or identical to it.  Don't compute beg_col
+       if already decided to paint from beginning of window.
 
 2010-08-28  Eli Zaretskii  <eliz@gnu.org>
 
index 9e65d8f1bb09c32c7b2c01fad157d2aebca45aeb..eeea4cb4333a2fc9b8520a39e93cd16dbf0d9d54 100644 (file)
@@ -23903,12 +23903,17 @@ mouse_face_from_buffer_pos (Lisp_Object window,
   struct glyph *glyph, *end;
   EMACS_INT ignore, pos;
   int x;
+  int beg_set = 0;
 
   xassert (NILP (display_string) || STRINGP (display_string));
   xassert (NILP (before_string) || STRINGP (before_string));
   xassert (NILP (after_string) || STRINGP (after_string));
 
   /* Find the row with START_CHARPOS.  */
+  /* FIXME: Sometimes the caller gets "wise" and gives us the window
+     start position instead of the real start of the mouse face
+     property.  This completely messes up the logic of finding the
+     beg_row and end_row.  */
   if (start_charpos < MATRIX_ROW_START_CHARPOS (first)
       && (NILP (XBUFFER (w->buffer)->bidi_display_reordering)
          || row_containing_pos (w, start_charpos, first, NULL, 0) == NULL))
@@ -23917,6 +23922,7 @@ mouse_face_from_buffer_pos (Lisp_Object window,
       dpyinfo->mouse_face_beg_row = MATRIX_ROW_VPOS (first, w->current_matrix);
       dpyinfo->mouse_face_beg_x = first->x;
       dpyinfo->mouse_face_beg_y = first->y;
+      beg_set = 1;
     }
   else
     {
@@ -23994,7 +24000,9 @@ mouse_face_from_buffer_pos (Lisp_Object window,
      between START_CHARPOS and END_CHARPOS if the range of characters
      strides the bidi level boundary, e.g. if the beginning is in R2L
      text while the end is in L2R text or vice versa.  */
-  if (!r1->reversed_p)
+  if (beg_set)
+    ;
+  else if (!r1->reversed_p)
     {
       /* This row is in a left to right paragraph.  Scan it left to
         right.  */