aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/coreplugin
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-06-21 12:25:07 +0200
committerDavid Schulz <david.schulz@qt.io>2019-06-21 10:46:22 +0000
commita106b56577b06848e87a6404bdfba0db6de45a38 (patch)
tree5c429f782997ae0bf895b085142aaa1d2ea495ac /src/plugins/coreplugin
parent55556bdfd1b33ca4bb2f56d1e45bb36a33e2d936 (diff)
Core: Do not access outdated QTextBlock
Fixes: QTCREATORBUG-22547 Change-Id: Iddcf2a9b4d4e864f6038f3955b945a942e351081 Reviewed-by: Tobias Hunger <tobias.hunger@qt.io> Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins/coreplugin')
-rw-r--r--src/plugins/coreplugin/outputwindow.cpp13
1 files changed, 5 insertions, 8 deletions
diff --git a/src/plugins/coreplugin/outputwindow.cpp b/src/plugins/coreplugin/outputwindow.cpp
index 9e204821137..e89f999a478 100644
--- a/src/plugins/coreplugin/outputwindow.cpp
+++ b/src/plugins/coreplugin/outputwindow.cpp
@@ -71,7 +71,7 @@ public:
Qt::MouseButton mouseButtonPressed = Qt::NoButton;
QTextCursor cursor;
QString filterText;
- QTextBlock lastFilteredBlock;
+ int lastFilteredBlockNumber = -1;
QPalette originalPalette;
OutputWindow::FilterModeFlags filterMode = OutputWindow::FilterModeFlag::Default;
};
@@ -279,7 +279,7 @@ void OutputWindow::updateFilterProperties(const QString &filterText,
.setFlag(FilterModeFlag::RegExp, isRegexp);
if (d->filterMode == flags && d->filterText == filterText)
return;
- d->lastFilteredBlock = {};
+ d->lastFilteredBlockNumber = -1;
if (d->filterText != filterText) {
const bool filterTextWasEmpty = d->filterText.isEmpty();
d->filterText = filterText;
@@ -311,12 +311,9 @@ void OutputWindow::filterNewContent()
{
bool atBottom = isScrollbarAtBottom();
- auto &lastBlock = d->lastFilteredBlock;
-
- if (!lastBlock.isValid() || lastBlock.blockNumber() >= document()->blockCount()
- || document()->findBlockByNumber(lastBlock.blockNumber()) != lastBlock) {
+ QTextBlock lastBlock = document()->findBlockByNumber(d->lastFilteredBlockNumber);
+ if (!lastBlock.isValid())
lastBlock = document()->begin();
- }
if (d->filterMode.testFlag(OutputWindow::FilterModeFlag::RegExp)) {
QRegularExpression regExp(d->filterText);
@@ -338,7 +335,7 @@ void OutputWindow::filterNewContent()
}
}
- lastBlock = document()->lastBlock();
+ d->lastFilteredBlockNumber = document()->lastBlock().blockNumber();
// FIXME: Why on earth is this necessary? We should probably do something else instead...
setDocument(document());