X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/8e55f2c2409fd6ca9ebc66a6568f4d3bcbef7576..2201018673467bf7a871082b1fd1e3f8c6f926e7:/src/selectionmode/backgroundcolorhelper.cpp diff --git a/src/selectionmode/backgroundcolorhelper.cpp b/src/selectionmode/backgroundcolorhelper.cpp index 4477d0f2c..42ccb64bd 100644 --- a/src/selectionmode/backgroundcolorhelper.cpp +++ b/src/selectionmode/backgroundcolorhelper.cpp @@ -1,6 +1,6 @@ /* This file is part of the KDE project - SPDX-FileCopyrightText: 2022 Felix Ernst + SPDX-FileCopyrightText: 2022 Felix Ernst SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ @@ -11,7 +11,6 @@ #include #include -#include #include using namespace SelectionMode; @@ -24,11 +23,10 @@ BackgroundColorHelper *BackgroundColorHelper::instance() return s_instance; } - void setBackgroundColorForWidget(QWidget *widget, QColor color) { QPalette palette; - palette.setBrush(QPalette::Active, QPalette::Window, color); + palette.setBrush(QPalette::Active, QPalette::Window, color); palette.setBrush(QPalette::Inactive, QPalette::Window, color); palette.setBrush(QPalette::Disabled, QPalette::Window, color); widget->setAutoFillBackground(true); @@ -39,24 +37,36 @@ void BackgroundColorHelper::controlBackgroundColor(QWidget *widget) { setBackgroundColorForWidget(widget, m_backgroundColor); - Q_ASSERT_X(std::find(m_colorControlledWidgets.begin(), m_colorControlledWidgets.end(), widget) == m_colorControlledWidgets.end(), "controlBackgroundColor", + Q_ASSERT_X(std::find(m_colorControlledWidgets.begin(), m_colorControlledWidgets.end(), widget) == m_colorControlledWidgets.end(), + "controlBackgroundColor", "Duplicate insertion is not necessary because the background color should already automatically update itself on paletteChanged"); m_colorControlledWidgets.emplace_back(widget); } +bool BackgroundColorHelper::eventFilter(QObject *obj, QEvent *event) +{ + Q_UNUSED(obj); + if (event->type() == QEvent::ApplicationPaletteChange) { + slotPaletteChanged(); + } + return false; +} + BackgroundColorHelper::BackgroundColorHelper() { updateBackgroundColor(); - QObject::connect(qApp, &QGuiApplication::paletteChanged, [=](){ slotPaletteChanged(); }); + qApp->installEventFilter(this); } void BackgroundColorHelper::slotPaletteChanged() { updateBackgroundColor(); for (auto i = m_colorControlledWidgets.begin(); i != m_colorControlledWidgets.end(); ++i) { - if (!*i) { + while (!*i) { i = m_colorControlledWidgets.erase(i); - continue; + if (i == m_colorControlledWidgets.end()) { + return; + } } setBackgroundColorForWidget(*i, m_backgroundColor); } @@ -76,17 +86,18 @@ void BackgroundColorHelper::updateBackgroundColor() if (std::abs(hueDifference) > 80) { newHue = (activeBackgroundColor.hue() + positiveBackgroundColor.hue()) / 2; } else { - newHue = hueDifference > 0 ? - activeBackgroundColor.hue() + 40 : - activeBackgroundColor.hue() - 40; + newHue = hueDifference > 0 ? activeBackgroundColor.hue() + 40 : activeBackgroundColor.hue() - 40; newHue %= 360; // hue needs to be between 0 and 359 per Qt documentation. } m_backgroundColor = QColor::fromHsv(newHue, - // Saturation should be closer to the active color because otherwise the selection mode color might overpower it. + // Saturation should be closer to the saturation of the active color + // because otherwise the selection mode color might overpower it. .7 * activeBackgroundColor.saturation() + .3 * positiveBackgroundColor.saturation(), (activeBackgroundColor.value() + positiveBackgroundColor.value()) / 2, (activeBackgroundColor.alpha() + positiveBackgroundColor.alpha()) / 2); } BackgroundColorHelper *BackgroundColorHelper::s_instance = nullptr; + +#include "moc_backgroundcolorhelper.cpp"