diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/quick/items/qquickitem.cpp | 7 | ||||
-rw-r--r-- | src/quick/items/qquickpaletteproviderprivatebase_p.h | 11 | ||||
-rw-r--r-- | src/quick/items/qquickwindow.cpp | 4 |
3 files changed, 19 insertions, 3 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 7fe057ad70..5b8048c303 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -8505,6 +8505,13 @@ bool QQuickItem::event(QEvent *ev) for (QQuickItem *item : d->childItems) QCoreApplication::sendEvent(item, ev); break; + case QEvent::WindowActivate: + case QEvent::WindowDeactivate: + if (d->palette()) + d->setCurrentColorGroup(); + for (QQuickItem *item : d->childItems) + QCoreApplication::sendEvent(item, ev); + break; default: return QObject::event(ev); } diff --git a/src/quick/items/qquickpaletteproviderprivatebase_p.h b/src/quick/items/qquickpaletteproviderprivatebase_p.h index b1b5958329..9399462130 100644 --- a/src/quick/items/qquickpaletteproviderprivatebase_p.h +++ b/src/quick/items/qquickpaletteproviderprivatebase_p.h @@ -49,7 +49,7 @@ #include <QtQuick/private/qquickpalette_p.h> #include <QtQuick/private/qquickabstractpaletteprovider_p.h> - +#include <QtGui/qwindow.h> #include <QtQml/private/qlazilyallocated_p.h> QT_BEGIN_NAMESPACE @@ -150,6 +150,9 @@ public: */ virtual void updateChildrenPalettes(const QPalette &parentPalette); +protected: + void setCurrentColorGroup(); + private: using PalettePtr = std::unique_ptr<QQuickPalette>; using Self = QQuickPaletteProviderPrivateBase<I, Impl>; @@ -160,7 +163,6 @@ private: QQuickPalette *windowPalette() const; - void setCurrentColorGroup(); void connectItem(); @@ -336,7 +338,10 @@ void QQuickPaletteProviderPrivateBase<I, Impl>::setCurrentColorGroup() if constexpr (!isRootWindow<I>()) { if (paletteData()) { const bool enabled = itemWithPalette()->isEnabled(); - paletteData()->setCurrentGroup(enabled ? QPalette::Active : QPalette::Disabled); + const auto window = itemWithPalette()->window(); + const bool active = window ? window->isActive() : true; + paletteData()->setCurrentGroup(enabled ? (active ? QPalette::Active : QPalette::Inactive) + : QPalette::Disabled); } } } diff --git a/src/quick/items/qquickwindow.cpp b/src/quick/items/qquickwindow.cpp index e6bfde66ae..85df4a66b3 100644 --- a/src/quick/items/qquickwindow.cpp +++ b/src/quick/items/qquickwindow.cpp @@ -1512,6 +1512,10 @@ bool QQuickWindow::event(QEvent *e) case QEvent::WindowDeactivate: if (auto da = d->deliveryAgentPrivate()) da->handleWindowDeactivate(this); + Q_FALLTHROUGH(); + case QEvent::WindowActivate: + if (d->contentItem) + QCoreApplication::sendEvent(d->contentItem, e); break; default: break; |