File KMessageWidget-Allow-the-style-to-change-our-palette.patch of Package kwidgetsaddons_kf5

From d946fb71ea223aa1584fa61b2871c1b07461e2f1 Mon Sep 17 00:00:00 2001
From: David Redondo <kde@david-redondo.de>
Date: Thu, 30 Jan 2020 16:36:46 +0100
Subject: [KMessageWidget] Allow the style to change our palette

Summary:
After we set our palette give the current QStyle a chance to give us a better
palette that maybe fits better because we can only use hardcoded colors. To
avoid infinite recursion when the style calls setPalette on the widget we don't
react to palette change events anymore but when the application palette is
changed.

Test Plan: N/A

Reviewers: #frameworks, apol

Reviewed By: apol

Subscribers: apol, kde-frameworks-devel

Tags: #frameworks

Differential Revision: https://phabricator.kde.org/D27038
---
 src/kmessagewidget.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

(limited to 'src/kmessagewidget.cpp')

diff --git a/src/kmessagewidget.cpp b/src/kmessagewidget.cpp
index 28aaa3b..65fc0f6 100644
--- a/src/kmessagewidget.cpp
+++ b/src/kmessagewidget.cpp
@@ -21,6 +21,7 @@
 #include "kmessagewidget.h"
 
 #include <QAction>
+#include <QApplication>
 #include <QEvent>
 #include <QGridLayout>
 #include <QHBoxLayout>
@@ -97,6 +98,8 @@ void KMessageWidgetPrivate::init(KMessageWidget *q_ptr)
     closeButton->setDefaultAction(closeAction);
 
     q->setMessageType(KMessageWidget::Information);
+
+    q->connect(qApp, &QApplication::paletteChanged, q, [this] {KMessageWidgetPrivate::setPalette();});
 }
 
 void KMessageWidgetPrivate::createLayout()
@@ -190,6 +193,7 @@ void KMessageWidgetPrivate::setPalette()
     // palette propagation
     iconLabel->setPalette(palette);
     textLabel->setPalette(palette);
+    q->style()->polish(q);
     // update the Icon in case it is recolorable
     q->setIcon(icon);
     q->update();
@@ -290,8 +294,6 @@ bool KMessageWidget::event(QEvent *event)
 {
     if (event->type() == QEvent::Polish && !layout()) {
         d->createLayout();
-    } else if (event->type() == QEvent::PaletteChange) {
-        d->setPalette();
     } else if (event->type() == QEvent::Show && !d->ignoreShowEventDoingAnimatedShow) {
         setFixedHeight(d->bestContentHeight());
     } else if (event->type() == QEvent::ParentChange) {
-- 
cgit v1.1

openSUSE Build Service is sponsored by