From 127c79fb7fda16b9a48ce8c425d1700d1aa7502d Mon Sep 17 00:00:00 2001 From: Fabian Kosmale Date: Thu, 14 Jan 2021 09:21:14 +0100 Subject: Fix Text with ElideRight not being rendered when width goes from 0 to >0 QQuickText attempts to reduce relayouting. However, it was a bit to aggressive in doing that. If only the width changed in a geometrychange, it would not relayout if widthMaximum was true. However, if the width goes from 0 to greater than 0, the value of widthMaximum should have actually been false (but we would only notice this after relayouting). Thus, don't skip relayouting in that case. Amends 56ade46b4234bb828b8e4f9a6bf83b5687bd122e, which fixed the same issue, but for height. Fixes: QTBUG-83408 Fixes: QTBUG-33608 Pick-to: 6.0 5.15 Change-Id: I14b610c703eb0496c71de7b12ad9fcf16842af64 Reviewed-by: Mitch Curtis Reviewed-by: Eskil Abrahamsen Blomfeldt --- .../auto/quick/qquicktext/data/elideZeroWidth.qml | 23 ++++++++++++++++++++++ tests/auto/quick/qquicktext/tst_qquicktext.cpp | 10 ++++++++++ 2 files changed, 33 insertions(+) create mode 100644 tests/auto/quick/qquicktext/data/elideZeroWidth.qml (limited to 'tests/auto/quick') diff --git a/tests/auto/quick/qquicktext/data/elideZeroWidth.qml b/tests/auto/quick/qquicktext/data/elideZeroWidth.qml new file mode 100644 index 0000000000..1193909350 --- /dev/null +++ b/tests/auto/quick/qquicktext/data/elideZeroWidth.qml @@ -0,0 +1,23 @@ +import QtQuick 2.15 + +Item { + id: root + property bool ok: false + width: 640 + height: 480 + + Text { + id: text + text: "This is a quite long text. Click me and i should remain visible!!! Sadly this doesn't happen" + elide: Text.ElideRight + } + + Component.onCompleted: { + text.width = 300; + text.height = 0; + text.width = 0; + text.height = 30; + text.width = 300; + root.ok = text.paintedWidth > 0 && text.paintedHeight > 0 + } +} diff --git a/tests/auto/quick/qquicktext/tst_qquicktext.cpp b/tests/auto/quick/qquicktext/tst_qquicktext.cpp index 6c257e0a9d..339bea0e6f 100644 --- a/tests/auto/quick/qquicktext/tst_qquicktext.cpp +++ b/tests/auto/quick/qquicktext/tst_qquicktext.cpp @@ -68,6 +68,7 @@ private slots: void wrap(); void elide(); void elideParentChanged(); + void elideRelayoutAfterZeroWidth(); void multilineElide_data(); void multilineElide(); void implicitElide_data(); @@ -607,6 +608,15 @@ void tst_qquicktext::elideParentChanged() QCOMPARE(actualItemImageGrab, expectedItemImageGrab); } +void tst_qquicktext::elideRelayoutAfterZeroWidth() +{ + QQmlEngine engine; + QQmlComponent component(&engine, testFileUrl("elideZeroWidth.qml")); + QScopedPointer root(component.create()); + QVERIFY2(root, qPrintable(component.errorString())); + QVERIFY(root->property("ok").toBool()); +} + void tst_qquicktext::multilineElide_data() { QTest::addColumn("format"); -- cgit v1.2.3