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;