diff options
-rw-r--r-- | src/quick/items/qquickpaletteproviderprivatebase_p.h | 19 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 10 | ||||
-rw-r--r-- | src/quick/items/qquickwindow_p.h | 2 |
3 files changed, 27 insertions, 4 deletions
diff --git a/src/quick/items/qquickpaletteproviderprivatebase_p.h b/src/quick/items/qquickpaletteproviderprivatebase_p.h index 8f8251f251..a600a23ce6 100644 --- a/src/quick/items/qquickpaletteproviderprivatebase_p.h +++ b/src/quick/items/qquickpaletteproviderprivatebase_p.h @@ -344,10 +344,21 @@ void QQuickPaletteProviderPrivateBase<I, Impl>::setCurrentColorGroup() template<class I, class Impl> void QQuickPaletteProviderPrivateBase<I, Impl>::updateChildrenPalettes(const QPalette &parentPalette) { - if (auto root = rootItem(*itemWithPalette())) { - for (auto &&child : root->childItems()) { - if (Q_LIKELY(child)) { - getPrivate(*child)->inheritPalette(parentPalette); + if constexpr (std::is_same_v<QQuickWindow, I> && std::is_same_v<QQuickWindowPrivate, Impl>) { + /* QQuickWindowPrivate instantiates this template, but does not include QQuickItemPrivate + * This causes an error with the QQuickItemPrivate::inheritPalette call below on MSVC in + * static builds, as QQuickItemPrivate is incomplete. To work around this situation, we do + * nothing in this instantiation of updateChildrenPalettes and instead add an override in + * QQuickWindowPrivate, which does the correct thing. + */ + Q_UNREACHABLE(); // You are not supposed to call this function + return; + } else { + if (auto root = rootItem(*itemWithPalette())) { + for (auto &&child : root->childItems()) { + if (Q_LIKELY(child)) { + getPrivate(*child)->inheritPalette(parentPalette); + } } } } diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index 0a23fa126a..d613b7e4f5 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -772,6 +772,16 @@ QQuickWindowPrivate::~QQuickWindowPrivate() service->removeWindow(q_func()); } +void QQuickWindowPrivate::updateChildrenPalettes(const QPalette &parentPalette) +{ + Q_Q(QQuickWindow); + if (auto root = q->contentItem()) { + for (auto &&child: root->childItems()) { + QQuickItemPrivate::get(child)->inheritPalette(parentPalette); + } + } +} + void QQuickWindowPrivate::init(QQuickWindow *c, QQuickRenderControl *control) { q_ptr = c; diff --git a/src/quick/items/qquickwindow_p.h b/src/quick/items/qquickwindow_p.h index 2928c99023..3be6f5cd8c 100644 --- a/src/quick/items/qquickwindow_p.h +++ b/src/quick/items/qquickwindow_p.h @@ -134,6 +134,8 @@ public: QQuickWindowPrivate(); ~QQuickWindowPrivate() override; + void updateChildrenPalettes(const QPalette &parentPalette) override; + void init(QQuickWindow *, QQuickRenderControl *control = nullptr); QQuickRootItem *contentItem; |