diff options
author | David Schulz <david.schulz@qt.io> | 2019-06-21 12:25:07 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-06-21 10:46:22 +0000 |
commit | a106b56577b06848e87a6404bdfba0db6de45a38 (patch) | |
tree | 5c429f782997ae0bf895b085142aaa1d2ea495ac /src/plugins/coreplugin | |
parent | 55556bdfd1b33ca4bb2f56d1e45bb36a33e2d936 (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.cpp | 13 |
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()); |