File 0001-QTextLayout-fix-maximumWidth-for-a-text-containing-spaces.patch of Package qt6-base.29654

From 4945fd93f13d2fc34adf260fd0e0325d0794f3f7 Mon Sep 17 00:00:00 2001
From: Vladimir Belyavsky <belyavskyv@gmail.com>
Date: Mon, 26 Sep 2022 19:32:50 +0300
Subject: [PATCH] QTextLayout: fix maximumWidth() for a text containing spaces

When laying out a text and calculating maxWidth, we must _always_ take
into account the accumulated width of spaces (lbh.spaceData.textWidth)
regardless of wrapMode, other text content, spaces position, etc.

Fixes: QTBUG-106947
Change-Id: I2ac9af92ed7dd07c1e040bfcf83949a358d1c9c9
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
---
 src/gui/text/qtextlayout.cpp                        |  6 +-----
 tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp | 16 ++++++++++++++--
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp
index 32fac09f3375..286722fc4c42 100644
--- a/src/gui/text/qtextlayout.cpp
+++ b/src/gui/text/qtextlayout.cpp
@@ -1976,7 +1976,6 @@ void QTextLine::layout_helper(int maxGlyphs)
             }
 
             if (!lbh.manualWrap && lbh.spaceData.textWidth > line.width) {
-                lbh.spaceData.textWidth = line.width; // ignore spaces that fall out of the line.
                 goto found;
             }
         } else {
@@ -2162,12 +2161,9 @@ found:
         eng->maxWidth = qMax(eng->maxWidth, line.textWidth);
     } else {
         eng->minWidth = qMax(eng->minWidth, lbh.minw);
-        eng->maxWidth += line.textWidth;
+        eng->maxWidth += line.textWidth + lbh.spaceData.textWidth;
     }
 
-    if (line.textWidth > 0 && item < eng->layoutData->items.size())
-        eng->maxWidth += lbh.spaceData.textWidth;
-
     line.textWidth += trailingSpace;
     if (lbh.spaceData.length) {
         line.trailingSpaces = lbh.spaceData.length;
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index 4ae1b33d7943..c85d498318d0 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -124,6 +124,7 @@ private slots:
     void tooManyDirectionalCharctersCrash_qtbug77819();
     void softHyphens_data();
     void softHyphens();
+    void min_maximumWidth_data();
     void min_maximumWidth();
 
 private:
@@ -2647,10 +2648,21 @@ void tst_QTextLayout::softHyphens()
     }
 }
 
+void tst_QTextLayout::min_maximumWidth_data()
+{
+    QTest::addColumn<QString>("text");
+
+    QTest::newRow("long string") << QStringLiteral("lmong_long_crazy_87235982735_23857239682376923876923876-fuwhfhfw-names-AAAA-deeaois2019-03-03.and.more");
+    QTest::newRow("QTBUG-106947") << QStringLiteral("text                                text");
+    QTest::newRow("spaces") << QStringLiteral("                text                text                ");
+}
+
 void tst_QTextLayout::min_maximumWidth()
 {
-    QString longString("lmong_long_crazy_87235982735_23857239682376923876923876-fuwhfhfw-names-AAAA-deeaois2019-03-03.and.more");
-    QTextLayout layout(longString, testFont);
+    QFETCH(QString, text);
+
+    QTextLayout layout(text, testFont);
+    layout.setCacheEnabled(true);
 
     for (int wrapMode = QTextOption::NoWrap; wrapMode <= QTextOption::WrapAtWordBoundaryOrAnywhere; ++wrapMode) {
         QTextOption opt;
-- 
2.16.3

openSUSE Build Service is sponsored by