aboutsummaryrefslogtreecommitdiffstats
path: root/src/labs/stylekit/qqstylekitreader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/labs/stylekit/qqstylekitreader.cpp')
-rw-r--r--src/labs/stylekit/qqstylekitreader.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/src/labs/stylekit/qqstylekitreader.cpp b/src/labs/stylekit/qqstylekitreader.cpp
index 9a4268e09c..ee0d4d3efe 100644
--- a/src/labs/stylekit/qqstylekitreader.cpp
+++ b/src/labs/stylekit/qqstylekitreader.cpp
@@ -500,21 +500,33 @@ void QQStyleKitReader::setHighlighted(bool highlighted)
QQuickPalette *QQStyleKitReader::palette() const
{
- return &const_cast<QQStyleKitReader *>(this)->m_palette;
+ return m_palette.data();
}
void QQStyleKitReader::setPalette(QQuickPalette *palette)
{
- if (palette && m_palette.toQPalette() == palette->toQPalette())
+ if (m_palette == palette)
return;
- m_palette.reset();
- if (palette)
- m_palette.inheritPalette(palette->toQPalette());
+ if (m_palette)
+ QObject::disconnect(m_palette, nullptr, this, nullptr);
+
+ m_palette = palette;
emit paletteChanged();
- const auto *stylePtr = style();
- if (!stylePtr || !stylePtr->loaded())
+ if (m_palette) {
+ // changed signal will be triggered when any role changes
+ QObject::connect(m_palette, &QQuickPalette::changed,
+ this, &QQStyleKitReader::onPaletteChanged);
+ }
+
+ onPaletteChanged();
+}
+
+void QQStyleKitReader::onPaletteChanged()
+{
+ const QQStyleKitStyle *style = QQStyleKitStyle::current();
+ if (!style || !style->loaded())
return;
clearLocalStorage();