From 67cff353e3cade44e19a84b5f0a80913846745e9 Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Fri, 15 Jul 2022 08:50:37 +0200 Subject: [PATCH] QPalette: detach before modifying resolve mask when resolving Amends 1d961491d817490da156769ddce6fce48a0bce4a. We modify the resolve mask after making a shared copy of 'other', so we must detach. Call the setter designed for that purpose. Task-number: QTBUG-98762 Change-Id: I4f45223e74764a341378992172787fae73efb8b7 Reviewed-by: JiDe Zhang Reviewed-by: Shawn Rutledge (cherry picked from commit 37c829f511d67be1c226201b4bbbe73c53835078) Reviewed-by: Qt Cherry-pick Bot --- src/gui/kernel/qpalette.cpp | 2 +- tests/auto/gui/kernel/qpalette/tst_qpalette.cpp | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp index ea876d935ee..2b6a7e643fa 100644 --- a/src/gui/kernel/qpalette.cpp +++ b/src/gui/kernel/qpalette.cpp @@ -921,7 +921,7 @@ QPalette QPalette::resolve(const QPalette &other) const if ((*this == other && d->resolveMask == other.d->resolveMask) || d->resolveMask == 0) { QPalette o = other; - o.d->resolveMask = d->resolveMask; + o.setResolveMask(d->resolveMask); return o; } diff --git a/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp b/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp index cdb68175981..150d58e6f4f 100644 --- a/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp +++ b/tests/auto/gui/kernel/qpalette/tst_qpalette.cpp @@ -102,9 +102,16 @@ void tst_QPalette::resolve() // ensure the resolve mask is full for (int r = 0; r < QPalette::NColorRoles; ++r) p3.setBrush(QPalette::All, QPalette::ColorRole(r), Qt::red); + const QPalette::ResolveMask fullMask = p3.resolveMask(); QPalette p3ResolvedToP1 = p3.resolve(p1); QVERIFY(p3ResolvedToP1.isCopyOf(p3)); + + QPalette p4; + QCOMPARE(p4.resolveMask(), QPalette::ResolveMask{}); + // resolve must detach even if p4 has no mask + p4 = p4.resolve(p3); + QCOMPARE(p3.resolveMask(), fullMask); }