diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index 1d1a47a8456..c1fd7545901 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #include #include @@ -852,10 +853,16 @@ void TextDocument::removeMarkFromMarksCache(TextMark *mark) QTC_ASSERT(documentLayout, return); d->m_marksCache.removeAll(mark); + auto scheduleLayoutUpdate = [documentLayout](){ + // make sure all destructors that may directly or indirectly call this function are + // completed before updating. + QTimer::singleShot(0, documentLayout, &QPlainTextDocumentLayout::requestUpdate); + }; + if (d->m_marksCache.isEmpty()) { documentLayout->hasMarks = false; documentLayout->maxMarkWidthFactor = 1.0; - documentLayout->requestUpdate(); + scheduleLayoutUpdate(); return; } @@ -879,7 +886,7 @@ void TextDocument::removeMarkFromMarksCache(TextMark *mark) if (maxWidthFactor != documentLayout->maxMarkWidthFactor) { documentLayout->maxMarkWidthFactor = maxWidthFactor; - documentLayout->requestUpdate(); + scheduleLayoutUpdate(); } else { documentLayout->requestExtraAreaUpdate(); }