summaryrefslogtreecommitdiffstats
path: root/src/widgets/widgets/qplaintextedit.cpp
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2018-09-26 11:59:32 +0200
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2018-10-17 09:21:26 +0000
commit5fe2ed48d60f383706274fa087f08a041c79dc73 (patch)
tree4271fc3abacdbe9d67ee19090e168453bed42c75 /src/widgets/widgets/qplaintextedit.cpp
parent0ead3b7142e47b89059af689de4ede47075375be (diff)
Fix scrollbar updates in QPlaintTextEdit on block-visibility changes
Trigger documentSizeChanged when block visibility changes, since block count remains constant in this case. Task-number: QTBUG-69310 Change-Id: I5ec7a4f9008f26ea8602356bcbaefbda293e54a3 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'src/widgets/widgets/qplaintextedit.cpp')
-rw-r--r--src/widgets/widgets/qplaintextedit.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp
index 91fcaa48cf..d6f6a364a8 100644
--- a/src/widgets/widgets/qplaintextedit.cpp
+++ b/src/widgets/widgets/qplaintextedit.cpp
@@ -294,6 +294,7 @@ void QPlainTextDocumentLayout::documentChanged(int from, int charsRemoved, int c
QTextBlock changeStartBlock = doc->findBlock(from);
QTextBlock changeEndBlock = doc->findBlock(qMax(0, from + charsChanged - 1));
+ bool blockVisibilityChanged = false;
if (changeStartBlock == changeEndBlock && newBlockCount == d->blockCount) {
QTextBlock block = changeStartBlock;
@@ -311,14 +312,18 @@ void QPlainTextDocumentLayout::documentChanged(int from, int charsRemoved, int c
QTextBlock block = changeStartBlock;
do {
block.clearLayout();
+ const int lineCount = block.isVisible() ? 1 : 0;
+ if (block.lineCount() != lineCount) {
+ blockVisibilityChanged = true;
+ block.setLineCount(lineCount);
+ }
if (block == changeEndBlock)
break;
block = block.next();
} while(block.isValid());
}
- if (newBlockCount != d->blockCount) {
-
+ if (newBlockCount != d->blockCount || blockVisibilityChanged) {
int changeEnd = changeEndBlock.blockNumber();
int blockDiff = newBlockCount - d->blockCount;
int oldChangeEnd = changeEnd - blockDiff;