diff options
3 files changed, 12 insertions, 3 deletions
diff --git a/src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp b/src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp index 8881b452..fb4c88d9 100644 --- a/src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp +++ b/src/application-main-lib/waylandapplicationmanagerwindowimpl.cpp @@ -40,6 +40,8 @@ WaylandApplicationManagerWindowImpl::WaylandApplicationManagerWindowImpl(Applica , m_applicationMain(applicationMain) , m_qwindow(new AMQuickWindowQmlImpl(window)) { + m_color = qUnpremultiply(m_qwindow->color().rgba64()); + QObject::connect(m_qwindow, &AMQuickWindowQmlImpl::windowTitleChanged, window, &ApplicationManagerWindow::titleChanged); QObject::connect(m_qwindow, &AMQuickWindowQmlImpl::xChanged, @@ -347,13 +349,15 @@ void WaylandApplicationManagerWindowImpl::setOpacity(qreal opactity) QColor WaylandApplicationManagerWindowImpl::color() const { - return m_qwindow ? m_qwindow->color() : QColor { }; + return m_qwindow ? m_color : QColor { }; } void WaylandApplicationManagerWindowImpl::setColor(const QColor &c) { - if (m_qwindow) - m_qwindow->setColor(c); + if (m_qwindow) { + m_color = c; // qUnpremultiply(qPremultiply(...)) introduces rounding errors + m_qwindow->setColor(qPremultiply(c.rgba64())); + } } bool WaylandApplicationManagerWindowImpl::isActive() const diff --git a/src/application-main-lib/waylandapplicationmanagerwindowimpl.h b/src/application-main-lib/waylandapplicationmanagerwindowimpl.h index b0eb3d19..eaf638b9 100644 --- a/src/application-main-lib/waylandapplicationmanagerwindowimpl.h +++ b/src/application-main-lib/waylandapplicationmanagerwindowimpl.h @@ -74,6 +74,7 @@ public: private: QPointer<ApplicationMain> m_applicationMain; QPointer<AMQuickWindowQmlImpl> m_qwindow; + QColor m_color; }; diff --git a/src/shared-main-lib/applicationmanagerwindow.cpp b/src/shared-main-lib/applicationmanagerwindow.cpp index 9398f7fe..1d37abeb 100644 --- a/src/shared-main-lib/applicationmanagerwindow.cpp +++ b/src/shared-main-lib/applicationmanagerwindow.cpp @@ -532,6 +532,10 @@ void ApplicationManagerWindow::setOpacity(qreal opacity) The background color for the window. Setting this property is more efficient than using a separate Rectangle. + + \note Since version 6.7, if an alpha channel is used, it needs to be straight alpha. Pre 6.7 + it needed to be pre-multiplied alpha (which is what the \l{Window} QML type still expects) + in multi-process and straight alpha in single-process mode. */ QColor ApplicationManagerWindow::color() const { |