aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/items/qquicktextnode.cpp
diff options
context:
space:
mode:
authorAndrew den Exter <andrew.den-exter@nokia.com>2012-04-03 16:10:33 +1000
committerQt by Nokia <qt-info@nokia.com>2012-04-03 09:22:14 +0200
commit1b6c1c3f85483f1d19375ce44de4e61b7d209f14 (patch)
tree06fc0028320414795fd2f74499cf781c144ae654 /src/quick/items/qquicktextnode.cpp
parent5b090cd9bc642582d214addba154ed022f6e537e (diff)
Fix visibility of trailing preedit text.
The block iterator doesn't take into account pre-edit text so we need to explicitly add pre-edit if it is positioned after the last fragment in a block. Change-Id: I1d26ee3ff86ea27674fc4f165b23ac5692a9ec17 Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@nokia.com>
Diffstat (limited to 'src/quick/items/qquicktextnode.cpp')
-rw-r--r--src/quick/items/qquicktextnode.cpp19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/quick/items/qquicktextnode.cpp b/src/quick/items/qquicktextnode.cpp
index 5be4963809..89c0aece33 100644
--- a/src/quick/items/qquicktextnode.cpp
+++ b/src/quick/items/qquicktextnode.cpp
@@ -1219,12 +1219,6 @@ void QQuickTextNode::addTextDocument(const QPointF &position, QTextDocument *tex
int textPos = block.position();
QTextBlock::iterator blockIterator = block.begin();
- if (blockIterator.atEnd() && preeditLength) {
- engine.setPosition(blockPosition);
- textPos = engine.addText(block, block.charFormat(), textColor, colorChanges,
- textPos, textPos + preeditLength,
- selectionStart, selectionEnd);
- }
while (!blockIterator.atEnd()) {
QTextFragment fragment = blockIterator.fragment();
@@ -1275,6 +1269,19 @@ void QQuickTextNode::addTextDocument(const QPointF &position, QTextDocument *tex
++blockIterator;
}
+ if (preeditLength >= 0 && textPos <= block.position() + preeditPosition) {
+ engine.setPosition(blockPosition);
+ textPos = block.position() + preeditPosition;
+ QTextLine line = block.layout()->lineForTextPosition(textPos);
+ if (!engine.currentLine().isValid()
+ || line.lineNumber() != engine.currentLine().lineNumber()) {
+ engine.setCurrentLine(line);
+ }
+ textPos = engine.addText(block, block.charFormat(), textColor, colorChanges,
+ textPos, textPos + preeditLength,
+ selectionStart, selectionEnd);
+ }
+
engine.setCurrentLine(QTextLine()); // Reset current line because the text layout changed
++it;
}