From 2983cb9531d47e5826540ca79e3066a8ed0db30c Mon Sep 17 00:00:00 2001 From: Axel Rasmussen Date: Tue, 15 Apr 2014 22:53:36 -0600 Subject: Fix broken QPlainTextDocumentLayout after removing chars This fixes an issue where, if characters were removed from several blocks in a single edit, the document layout would end up being corrupted since the document layout manager wouldn't re-layout the proper number of text blocks. Task-number: QTBUG-30051 Change-Id: Idf3a6f567120e6a5dbebf1f65f685d374219328a Reviewed-by: Konstantin Ritt Reviewed-by: Pierre Rossi --- src/widgets/widgets/qplaintextedit.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/widgets/widgets/qplaintextedit.cpp') diff --git a/src/widgets/widgets/qplaintextedit.cpp b/src/widgets/widgets/qplaintextedit.cpp index 6ed1aeff72..23c1e99231 100644 --- a/src/widgets/widgets/qplaintextedit.cpp +++ b/src/widgets/widgets/qplaintextedit.cpp @@ -284,14 +284,15 @@ void QPlainTextDocumentLayoutPrivate::relayout() /*! \reimp */ -void QPlainTextDocumentLayout::documentChanged(int from, int /*charsRemoved*/, int charsAdded) +void QPlainTextDocumentLayout::documentChanged(int from, int charsRemoved, int charsAdded) { Q_D(QPlainTextDocumentLayout); QTextDocument *doc = document(); int newBlockCount = doc->blockCount(); + int charsChanged = qMax(charsRemoved, charsAdded); QTextBlock changeStartBlock = doc->findBlock(from); - QTextBlock changeEndBlock = doc->findBlock(qMax(0, from + charsAdded - 1)); + QTextBlock changeEndBlock = doc->findBlock(qMax(0, from + charsChanged - 1)); if (changeStartBlock == changeEndBlock && newBlockCount == d->blockCount) { QTextBlock block = changeStartBlock; -- cgit v1.2.3