Implement mouse highlight for bidi-reordered lines.
authorEli Zaretskii <eliz@gnu.org>
Sat, 23 Oct 2010 15:30:45 +0000 (17:30 +0200)
committerEli Zaretskii <eliz@gnu.org>
Sat, 23 Oct 2010 15:30:45 +0000 (17:30 +0200)
commitd1d6801eb4badab97416d0b6294e1920d0f90c3e
tree83cc92ae8e0a28b767e3abe8cc2e2753f1c855c7
parenta6ac7fc4fddadcf7939f5f8b6ec09fadb4f90fc8
parenta4041a7121ee093ec81ef0cb4b8da62a54587596
Implement mouse highlight for bidi-reordered lines.

 xdisp.c (fast_find_string_pos): #ifdef away, not used anymore.
 (mouse_face_from_string_pos): New function, replaces
 fast_find_string_pos.
 (note_mouse_highlight): Call it instead of fast_find_string_pos.
 (note_mode_line_or_margin_highlight): Support bidi-reordered
 strings and R2L glyph rows.  Fix comments.
 (note_mouse_highlight): When bidi reordering is turned on in a
 buffer, call next-single-property-change and
 previous-single-property-change with last argument nil.  Clear
 mouse highlight when mouse pointer is in a R2L row on the stretch
 glyph that stands for no text beyond the line end.
 (row_containing_pos): Don't return too early when CHARPOS is in a
 bidi-reordered continued line.  Return immediately when the first
 hit is found in a line that is not continued, or when an exact
 match for CHARPOS is found.
 (rows_from_pos_range): New function.
 (mouse_face_from_buffer_pos): Use it instead of calling
 row_containing_pos for START_CHARPOS and END_CHARPOS.  Rewrite the
 function to support mouse highlight in bidi-reordered lines and
 not to 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.
 (show_mouse_face): Support drawing highlighted R2L lines.
 (coords_in_mouse_face_p): New function, bidi-aware.
 (cursor_in_mouse_face_p, note_mouse_highlight, erase_phys_cursor):
 Call it instead of comparing with mouse-face members of dpyinfo.
 (note_mode_line_or_margin_highlight): Fix confusingly swapped
 usage of hpos and vpos.
src/ChangeLog
src/xdisp.c