diff --git a/src/librssguard/core/messagesforfiltersmodel.cpp b/src/librssguard/core/messagesforfiltersmodel.cpp index ea32ac6b2..d28ecb95e 100644 --- a/src/librssguard/core/messagesforfiltersmodel.cpp +++ b/src/librssguard/core/messagesforfiltersmodel.cpp @@ -39,11 +39,11 @@ QVariant MessagesForFiltersModel::data(const QModelIndex& index, int role) const if (m_filteringDecisions.contains(index.row())) { switch (m_filteringDecisions.value(index.row())) { case MessageObject::FilteringAction::Accept: - return qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::Allright); + return qApp->skins()->colorForModel(SkinEnums::PaletteColors::Allright); case MessageObject::FilteringAction::Ignore: case MessageObject::FilteringAction::Purge: - return qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::FgError); + return qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgError); default: break; diff --git a/src/librssguard/core/messagesmodel.cpp b/src/librssguard/core/messagesmodel.cpp index a93bd7282..0e202ac5f 100644 --- a/src/librssguard/core/messagesmodel.cpp +++ b/src/librssguard/core/messagesmodel.cpp @@ -476,9 +476,9 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const { : QSqlQueryModel::data(idx_important); if (dta.toInt() == 1) { - return qApp->skins()->currentSkin().colorForModel(role == Qt::ItemDataRole::ForegroundRole - ? SkinEnums::PaletteColors::FgInteresting - : SkinEnums::PaletteColors::FgSelectedInteresting); + return qApp->skins()->colorForModel(role == Qt::ItemDataRole::ForegroundRole + ? SkinEnums::PaletteColors::FgInteresting + : SkinEnums::PaletteColors::FgSelectedInteresting); } } @@ -487,9 +487,9 @@ QVariant MessagesModel::data(const QModelIndex& idx, int role) const { QVariant dta = m_cache->containsData(idx_read.row()) ? m_cache->data(idx_read) : QSqlQueryModel::data(idx_read); if (dta.toInt() == 0) { - return qApp->skins()->currentSkin().colorForModel(role == Qt::ItemDataRole::ForegroundRole - ? SkinEnums::PaletteColors::FgInteresting - : SkinEnums::PaletteColors::FgSelectedInteresting); + return qApp->skins()->colorForModel(role == Qt::ItemDataRole::ForegroundRole + ? SkinEnums::PaletteColors::FgInteresting + : SkinEnums::PaletteColors::FgSelectedInteresting); } } diff --git a/src/librssguard/gui/settings/settingsgui.cpp b/src/librssguard/gui/settings/settingsgui.cpp index 849950145..468e928e2 100644 --- a/src/librssguard/gui/settings/settingsgui.cpp +++ b/src/librssguard/gui/settings/settingsgui.cpp @@ -306,7 +306,7 @@ void SettingsGui::loadSettings() { QColor clr = settings()->value(GROUP(CustomSkinColors), enumer.key(i)).toString(); if (!clr.isValid()) { - clr = qApp->skins()->currentSkin().colorForModel(pal).value(); + clr = qApp->skins()->colorForModel(pal).value(); } rst_btn->setObjectName(QString::number(enumer.value(i))); @@ -339,7 +339,7 @@ void SettingsGui::resetCustomSkinColor() { auto* clr_btn = m_ui->m_gbCustomSkinColors->findChild(sender()->objectName()); SkinEnums::PaletteColors pal = SkinEnums::PaletteColors(sender()->objectName().toInt()); - clr_btn->setColor(qApp->skins()->currentSkin().colorForModel(pal, true).value()); + clr_btn->setColor(qApp->skins()->colorForModel(pal, true).value()); } void SettingsGui::saveSettings() { diff --git a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp index ca17d5642..5593a67b1 100644 --- a/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp +++ b/src/librssguard/gui/webviewers/qtextbrowser/textbrowserviewer.cpp @@ -37,7 +37,7 @@ TextBrowserViewer::TextBrowserViewer(QWidget* parent) setDocument(m_document.data()); // Apply master CSS. - QColor a_color = qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::FgInteresting).value(); + QColor a_color = qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgInteresting).value(); if (!a_color.isValid()) { a_color = qApp->palette().color(QPalette::ColorRole::Highlight); diff --git a/src/librssguard/miscellaneous/skinfactory.cpp b/src/librssguard/miscellaneous/skinfactory.cpp index ea0be1060..9b8757208 100644 --- a/src/librssguard/miscellaneous/skinfactory.cpp +++ b/src/librssguard/miscellaneous/skinfactory.cpp @@ -19,7 +19,7 @@ #include #include -SkinFactory::SkinFactory(QObject* parent) : QObject(parent), m_styleIsFrozen(false) {} +SkinFactory::SkinFactory(QObject* parent) : QObject(parent), m_styleIsFrozen(false), m_useSkinColors(false) {} void SkinFactory::loadCurrentSkin() { QList skin_names_to_try = {selectedSkinName(), QSL(APP_SKIN_DEFAULT)}; @@ -47,6 +47,10 @@ void SkinFactory::loadCurrentSkin() { qCriticalNN << LOGSEC_GUI << "Failed to load selected or default skin. Quitting!"; } +QVariant SkinFactory::colorForModel(SkinEnums::PaletteColors type, bool ignore_custom_colors) const { + return m_currentSkin.colorForModel(type, m_useSkinColors, ignore_custom_colors); +} + bool SkinFactory::isStyleGoodForAlternativeStylePalette(const QString& style_name) const { static QRegularExpression re = QRegularExpression(QSL("^(fusion|windows|qt[56]ct-style)$")); @@ -167,12 +171,11 @@ void SkinFactory::loadSkinFromData(const Skin& skin) { // NOTE: We can do this because in Qt source code // they specifically set object name to style name. m_currentStyle = qApp->style()->objectName(); - - const bool use_skin_colors = + m_useSkinColors = skin.m_forcedSkinColors || qApp->settings()->value(GROUP(GUI), SETTING(GUI::ForcedSkinColors)).toBool(); if (isStyleGoodForAlternativeStylePalette(m_currentStyle)) { - if (!skin.m_stylePalette.isEmpty() && use_skin_colors) { + if (!skin.m_stylePalette.isEmpty() && m_useSkinColors) { qDebugNN << LOGSEC_GUI << "Activating alternative palette."; QPalette pal = skin.extractPalette(); @@ -191,7 +194,7 @@ void SkinFactory::loadSkinFromData(const Skin& skin) { } if (!skin.m_rawData.isEmpty()) { - if (qApp->styleSheet().simplified().isEmpty() && use_skin_colors) { + if (qApp->styleSheet().simplified().isEmpty() && m_useSkinColors) { qApp->setStyleSheet(skin.m_rawData); } else { @@ -529,7 +532,7 @@ uint qHash(const SkinEnums::PaletteColors& key) { return uint(key); } -QVariant Skin::colorForModel(SkinEnums::PaletteColors type, bool ignore_custom_colors) const { +QVariant Skin::colorForModel(SkinEnums::PaletteColors type, bool use_skin_colors, bool ignore_custom_colors) const { if (!ignore_custom_colors) { bool enabled = qApp->settings()->value(GROUP(CustomSkinColors), SETTING(CustomSkinColors::Enabled)).toBool(); @@ -544,7 +547,7 @@ QVariant Skin::colorForModel(SkinEnums::PaletteColors type, bool ignore_custom_c } } - return m_colorPalette.contains(type) ? m_colorPalette[type] : QVariant(); + return (use_skin_colors & m_colorPalette.contains(type)) ? m_colorPalette[type] : QVariant(); } QPalette Skin::extractPalette() const { diff --git a/src/librssguard/miscellaneous/skinfactory.h b/src/librssguard/miscellaneous/skinfactory.h index faedd6f84..171fd2db7 100644 --- a/src/librssguard/miscellaneous/skinfactory.h +++ b/src/librssguard/miscellaneous/skinfactory.h @@ -70,7 +70,9 @@ struct RSSGUARD_DLLSPEC Skin { bool m_forcedSkinColors; QMultiHash>> m_stylePalette; - QVariant colorForModel(SkinEnums::PaletteColors type, bool ignore_custom_colors = false) const; + QVariant colorForModel(SkinEnums::PaletteColors type, + bool use_skin_colors, + bool ignore_custom_colors = false) const; QPalette extractPalette() const; }; @@ -89,6 +91,9 @@ class RSSGUARD_DLLSPEC SkinFactory : public QObject { void loadCurrentSkin(); Skin currentSkin() const; + // Gets color for model from active skin. + QVariant colorForModel(SkinEnums::PaletteColors type, bool ignore_custom_colors = false) const; + bool isStyleGoodForAlternativeStylePalette(const QString& style_name) const; // Returns the name of the skin, that should be activated @@ -109,9 +114,7 @@ class RSSGUARD_DLLSPEC SkinFactory : public QObject { void setCurrentSkinName(const QString& skin_name); QString customSkinBaseFolder() const; - bool styleIsFrozen() const; - QString currentStyle() const; private: @@ -124,6 +127,7 @@ class RSSGUARD_DLLSPEC SkinFactory : public QObject { Skin m_currentSkin; QString m_currentStyle; bool m_styleIsFrozen; + bool m_useSkinColors; }; inline Skin SkinFactory::currentSkin() const { diff --git a/src/librssguard/services/abstract/feed.cpp b/src/librssguard/services/abstract/feed.cpp index 9c95c744a..5a98c9ff6 100644 --- a/src/librssguard/services/abstract/feed.cpp +++ b/src/librssguard/services/abstract/feed.cpp @@ -58,11 +58,11 @@ QVariant Feed::data(int column, int role) const { case HIGHLIGHTED_FOREGROUND_TITLE_ROLE: switch (status()) { case Status::NewMessages: - return qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::FgSelectedNewMessages); + return qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgSelectedNewMessages); case Status::Normal: if (countOfUnreadMessages() > 0) { - return qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::FgSelectedInteresting); + return qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgSelectedInteresting); } else { return QVariant(); @@ -72,7 +72,7 @@ QVariant Feed::data(int column, int role) const { case Status::ParsingError: case Status::AuthError: case Status::OtherError: - return qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::FgSelectedError); + return qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgSelectedError); default: return QVariant(); @@ -81,11 +81,11 @@ QVariant Feed::data(int column, int role) const { case Qt::ItemDataRole::ForegroundRole: switch (status()) { case Status::NewMessages: - return qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::FgNewMessages); + return qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgNewMessages); case Status::Normal: if (countOfUnreadMessages() > 0) { - return qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::FgInteresting); + return qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgInteresting); } else { return QVariant(); @@ -95,7 +95,7 @@ QVariant Feed::data(int column, int role) const { case Status::ParsingError: case Status::AuthError: case Status::OtherError: - return qApp->skins()->currentSkin().colorForModel(SkinEnums::PaletteColors::FgError); + return qApp->skins()->colorForModel(SkinEnums::PaletteColors::FgError); default: return QVariant();