From c564779c071b35fddb76f4e50afda4305b634651 Mon Sep 17 00:00:00 2001 From: Gabriel de Dietrich Date: Wed, 3 Jan 2018 14:00:24 -0800 Subject: Make QPalette::setBrush() check before detaching Setting the same brush on the same group and role should not detach nor alter the result of QPalette::isCopyOf(). Task-number: QTBUG-56743 Change-Id: Ic2d0dd757d703b01e8c5d835a8c124b3317653f4 Reviewed-by: Friedemann Kleint Reviewed-by: Andy Shaw Reviewed-by: Richard Moe Gustavsen --- src/gui/kernel/qpalette.cpp | 32 +++++++++++++------------ tests/auto/gui/kernel/qpalette/tst_qpalette.cpp | 31 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp index 665cc430cc..4905e51e01 100644 --- a/src/gui/kernel/qpalette.cpp +++ b/src/gui/kernel/qpalette.cpp @@ -751,21 +751,24 @@ const QBrush &QPalette::brush(ColorGroup gr, ColorRole cr) const void QPalette::setBrush(ColorGroup cg, ColorRole cr, const QBrush &b) { Q_ASSERT(cr < NColorRoles); - detach(); - if(cg >= (int)NColorGroups) { - if(cg == All) { - for(int i = 0; i < (int)NColorGroups; i++) - d->br[i][cr] = b; - data.resolve_mask |= (1<= NColorGroups) { + qWarning("QPalette::setBrush: Unknown ColorGroup: %d", cg); + cg = Active; + } + + if (d->br[cg][cr] != b) { + detach(); + d->br[cg][cr] = b; } - d->br[cg][cr] = b; data.resolve_mask |= (1<