From 96e3d06b6f216fb802acc6dd1a7dca113f782508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Nordheim?= Date: Thu, 9 Nov 2023 12:03:51 +0000 Subject: Revert "QTextDocumentPrivate::plainText: simplify code" This reverts commit a83a818791bc88725e07ea41b7c5fa50828e6b24. Reason for revert: It's causing asserts, solution to fix is unclear Change-Id: I33ef760a9402c096d3d7487e777c3ccdbb626d39 Reviewed-by: Eskil Abrahamsen Blomfeldt Reviewed-by: Edward Welbourne --- src/gui/text/qtextdocument_p.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp index 0180fbb6ff9..0718300d375 100644 --- a/src/gui/text/qtextdocument_p.cpp +++ b/src/gui/text/qtextdocument_p.cpp @@ -1305,10 +1305,14 @@ void QTextDocumentPrivate::adjustDocumentChangesAndCursors(int from, int addedOr QString QTextDocumentPrivate::plainText() const { QString result; - result.reserve(length()); - const auto view = QStringView(text); - for (auto f : *this) - result += view.sliced(f->stringPosition, f->size_array[0]); + result.resize(length()); + const QChar *text_unicode = text.unicode(); + QChar *data = result.data(); + for (QTextDocumentPrivate::FragmentIterator it = begin(); it != end(); ++it) { + const QTextFragmentData *f = *it; + ::memcpy(data, text_unicode + f->stringPosition, f->size_array[0] * sizeof(QChar)); + data += f->size_array[0]; + } // remove trailing block separator result.chop(1); return result; -- cgit v1.2.3