Fix display of overlay strings with 'display' and 'box' property
* src/xdisp.c (get_next_display_element): Take the box face from display stack level that comes from a buffer, not an overlay string. (Bug#22499)
This commit is contained in:
parent
fc48106d0b
commit
a8273dacd5
1 changed files with 11 additions and 2 deletions
13
src/xdisp.c
13
src/xdisp.c
|
@ -7234,14 +7234,23 @@ get_next_display_element (struct it *it)
|
||||||
buffer position is stored in the 'position'
|
buffer position is stored in the 'position'
|
||||||
member of the iteration stack slot below the
|
member of the iteration stack slot below the
|
||||||
current one, see handle_single_display_spec. By
|
current one, see handle_single_display_spec. By
|
||||||
contrast, it->current.pos was is not yet updated
|
contrast, it->current.pos was not yet updated
|
||||||
to point to that buffer position; that will
|
to point to that buffer position; that will
|
||||||
happen in pop_it, after we finish displaying the
|
happen in pop_it, after we finish displaying the
|
||||||
current string. Note that we already checked
|
current string. Note that we already checked
|
||||||
above that it->sp is positive, so subtracting one
|
above that it->sp is positive, so subtracting one
|
||||||
from it is safe. */
|
from it is safe. */
|
||||||
if (it->from_disp_prop_p)
|
if (it->from_disp_prop_p)
|
||||||
pos = (it->stack + it->sp - 1)->position;
|
{
|
||||||
|
int stackp = it->sp - 1;
|
||||||
|
|
||||||
|
/* Find the stack level with data from buffer. */
|
||||||
|
while (stackp >= 0
|
||||||
|
&& STRINGP ((it->stack + stackp)->string))
|
||||||
|
stackp--;
|
||||||
|
eassert (stackp >= 0);
|
||||||
|
pos = (it->stack + stackp)->position;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
INC_TEXT_POS (pos, it->multibyte_p);
|
INC_TEXT_POS (pos, it->multibyte_p);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue