From 0b2d89eaea7ca8075c43154a0bf7ef49221d3fab Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Mon, 24 Mar 2014 09:15:00 +0100 Subject: [PATCH] In Paragraph::changeCase, correctly track the font of the changed characters (fix crash) Fixes: #7943 --- src/Paragraph.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index d32c0be2f0..ffcb5f2f4b 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -3670,7 +3670,9 @@ void Paragraph::changeCase(BufferParams const & bparams, pos_type pos, // process sequences of modified characters; in change // tracking mode, this approach results in much better // usability than changing case on a char-by-char basis - docstring changes; + // We also need to track the current font, since font + // changes within sequences can occur. + vector > changes; bool const trackChanges = bparams.trackChanges; @@ -3704,7 +3706,7 @@ void Paragraph::changeCase(BufferParams const & bparams, pos_type pos, } if (oldChar != newChar) { - changes += newChar; + changes.push_back(make_pair(newChar, getFontSettings(bparams, pos))); if (pos != right - 1) continue; // step behind the changing area @@ -3713,9 +3715,8 @@ void Paragraph::changeCase(BufferParams const & bparams, pos_type pos, int erasePos = pos - changes.size(); for (size_t i = 0; i < changes.size(); i++) { - insertChar(pos, changes[i], - getFontSettings(bparams, - erasePos), + insertChar(pos, changes[i].first, + changes[i].second, trackChanges); if (!eraseChar(erasePos, trackChanges)) { ++erasePos; -- 2.39.2