commit 0b2d89eaea7ca8075c43154a0bf7ef49221d3fab
Author: Juergen Spitzmueller <[email protected]>
Date: Mon Mar 24 09:15:00 2014 +0100
In Paragraph::changeCase, correctly track the font of the changed
characters (fix crash)
Fixes: #7943
diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index d32c0be..ffcb5f2 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<pair<char_type, Font> > 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;