Mercurial > emacs
comparison src/xdisp.c @ 107732:dc45468b3140
Fix bug #5816.
xdisp.c (set_cursor_from_row): Fix cursor positioning when the
string with `cursor' property comes from an `after-string' overlay.
author | Eli Zaretskii <eliz@gnu.org> |
---|---|
date | Thu, 01 Apr 2010 15:37:28 +0300 |
parents | 22e41874fef4 |
children | 02181f9edbbf |
comparison
equal
deleted
inserted
replaced
107731:64415eac89e1 | 107732:dc45468b3140 |
---|---|
12821 Lisp_Object str; | 12821 Lisp_Object str; |
12822 EMACS_INT tem; | 12822 EMACS_INT tem; |
12823 | 12823 |
12824 str = glyph->object; | 12824 str = glyph->object; |
12825 tem = string_buffer_position_lim (w, str, pos, pos_after, 0); | 12825 tem = string_buffer_position_lim (w, str, pos, pos_after, 0); |
12826 if (pos <= tem) | 12826 if (tem == 0 /* from overlay */ |
12827 || pos <= tem) | |
12827 { | 12828 { |
12828 /* If the string from which this glyph came is | 12829 /* If the string from which this glyph came is |
12829 found in the buffer at point, then we've | 12830 found in the buffer at point, then we've |
12830 found the glyph we've been looking for. */ | 12831 found the glyph we've been looking for. If |
12831 if (tem == pt_old) | 12832 it comes from an overlay (tem == 0), and it |
12833 has the `cursor' property on one of its | |
12834 glyphs, record that glyph as a candidate for | |
12835 displaying the cursor. (As in the | |
12836 unidirectional version, we will display the | |
12837 cursor on the last candidate we find.) */ | |
12838 if (tem == 0 || tem == pt_old) | |
12832 { | 12839 { |
12833 /* The glyphs from this string could have | 12840 /* The glyphs from this string could have |
12834 been reordered. Find the one with the | 12841 been reordered. Find the one with the |
12835 smallest string position. Or there could | 12842 smallest string position. Or there could |
12836 be a character in the string with the | 12843 be a character in the string with the |
12859 strpos = glyph->charpos; | 12866 strpos = glyph->charpos; |
12860 cursor = glyph; | 12867 cursor = glyph; |
12861 } | 12868 } |
12862 } | 12869 } |
12863 | 12870 |
12864 goto compute_x; | 12871 if (tem == pt_old) |
12872 goto compute_x; | |
12865 } | 12873 } |
12866 pos = tem + 1; /* don't find previous instances */ | 12874 if (tem) |
12875 pos = tem + 1; /* don't find previous instances */ | |
12867 } | 12876 } |
12868 /* This string is not what we want; skip all of the | 12877 /* This string is not what we want; skip all of the |
12869 glyphs that came from it. */ | 12878 glyphs that came from it. */ |
12870 do | 12879 do |
12871 glyph += incr; | 12880 glyph += incr; |