]> git.eshelyaron.com Git - emacs.git/commitdiff
Fix minor bugs in mouse highlight.
authorEli Zaretskii <eliz@gnu.org>
Sat, 2 Oct 2010 11:48:56 +0000 (13:48 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 2 Oct 2010 11:48:56 +0000 (13:48 +0200)
 xdisp.c (coords_in_mouse_face_p): Fix the conditions for when
 mouse_face_beg_row and mouse_face_end_row are equal.
 (note_mouse_highlight): Clear mouse highlight when mouse pointer
 is in a R2L row on the stretch glyph that stands for no text
 beyond the line end.

src/ChangeLog
src/xdisp.c

index b846070b9222a450a7d8c8350c1299b16b0b9177..2b77f081f528f6b74dfbb73695b0bc43d2e5328d 100644 (file)
@@ -1,3 +1,11 @@
+2010-10-02  Eli Zaretskii  <eliz@gnu.org>
+
+       * xdisp.c (coords_in_mouse_face_p): Fix the conditions for when
+       mouse_face_beg_row and mouse_face_end_row are equal.
+       (note_mouse_highlight): Clear mouse highlight when mouse pointer
+       is in a R2L row on the stretch glyph that stands for no text
+       beyond the line end.
+
 2010-08-28  Eli Zaretskii  <eliz@gnu.org>
 
        * xdisp.c (mouse_face_from_buffer_pos): Fix code using bug#1220 as
index 40ba72a18bc8cdc43c75db86d0cf43993a625a9f..e19c26cbc19524b3e128d06a22ad7aa68867eb9f 100644 (file)
@@ -23832,20 +23832,30 @@ coords_in_mouse_face_p (struct window *w, int hpos, int vpos)
       && vpos < dpyinfo->mouse_face_end_row)
     return 1;
 
-  if (MATRIX_ROW (w->current_matrix, vpos)->reversed_p)
+  if (!MATRIX_ROW (w->current_matrix, vpos)->reversed_p)
     {
-      if ((vpos == dpyinfo->mouse_face_beg_row
-          && hpos <= dpyinfo->mouse_face_beg_col)
-         || (vpos == dpyinfo->mouse_face_end_row
-             && hpos > dpyinfo->mouse_face_end_col))
+      if (dpyinfo->mouse_face_beg_row == dpyinfo->mouse_face_end_row)
+       {
+         if (dpyinfo->mouse_face_beg_col <= hpos && hpos < dpyinfo->mouse_face_end_col)
+           return 1;
+       }
+      else if ((vpos == dpyinfo->mouse_face_beg_row
+               && hpos >= dpyinfo->mouse_face_beg_col)
+              || (vpos == dpyinfo->mouse_face_end_row
+                  && hpos < dpyinfo->mouse_face_end_col))
        return 1;
     }
   else
     {
-      if ((vpos == dpyinfo->mouse_face_beg_row
-          && hpos >= dpyinfo->mouse_face_beg_col)
-         || (vpos == dpyinfo->mouse_face_end_row
-             && hpos < dpyinfo->mouse_face_end_col))
+       if (dpyinfo->mouse_face_beg_row == dpyinfo->mouse_face_end_row)
+       {
+         if (dpyinfo->mouse_face_end_col < hpos && hpos <= dpyinfo->mouse_face_beg_col)
+           return 1;
+       }
+      else if ((vpos == dpyinfo->mouse_face_beg_row
+               && hpos <= dpyinfo->mouse_face_beg_col)
+              || (vpos == dpyinfo->mouse_face_end_row
+                  && hpos > dpyinfo->mouse_face_end_col))
        return 1;
     }
   return 0;
@@ -24846,7 +24856,15 @@ note_mouse_highlight (struct frame *f, int x, int y)
       /* Clear mouse face if X/Y not over text.  */
       if (glyph == NULL
          || area != TEXT_AREA
-         || !MATRIX_ROW (w->current_matrix, vpos)->displays_text_p)
+         || !MATRIX_ROW (w->current_matrix, vpos)->displays_text_p
+         /* R2L rows have a stretch glyph at their front, which
+            stands for no text, whereas L2R rows have no glyphs at
+            all beyond the end of text.  Treat such stretch glyphs as
+            NULL glyphs in L2R rows.  */
+         || (MATRIX_ROW (w->current_matrix, vpos)->reversed_p
+             && glyph == MATRIX_ROW (w->current_matrix, vpos)->glyphs[TEXT_AREA]
+             && glyph->type == STRETCH_GLYPH
+             && glyph->avoid_cursor_p))
        {
          if (clear_mouse_face (dpyinfo))
            cursor = No_Cursor;