diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp index b21c45da7a0..ec54872347e 100644 --- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp @@ -159,10 +159,28 @@ QString QGtk3Theme::gtkFontName() const return QGnomeTheme::gtkFontName(); } +void QGtk3Theme::requestColorScheme(Qt::ColorScheme scheme) +{ + if (m_requestedColorScheme == scheme) + return; + qCDebug(lcQGtk3Interface) << scheme << "has been requested. Theme supports color scheme:" + << m_storage->colorScheme(); + m_requestedColorScheme = scheme; + m_storage->handleThemeChange(); +} + Qt::ColorScheme QGtk3Theme::colorScheme() const { Q_ASSERT(m_storage); - return m_storage->colorScheme(); +#ifdef QT_DEBUG + if (m_requestedColorScheme != Qt::ColorScheme::Unknown + && m_requestedColorScheme != m_storage->colorScheme()) { + qCDebug(lcQGtk3Interface) << "Requested color scheme" << m_requestedColorScheme + << "differs from theme color scheme" << m_storage->colorScheme(); + } +#endif + return m_requestedColorScheme == Qt::ColorScheme::Unknown ? m_storage->colorScheme() + : m_requestedColorScheme; } bool QGtk3Theme::usePlatformNativeDialog(DialogType type) const @@ -211,7 +229,18 @@ bool QGtk3Theme::useNativeFileDialog() const QPalette *QGtk3Theme::palette(Palette type) const { Q_ASSERT(m_storage); - return m_storage->palette(type); +#ifdef QT_DEBUG + if (m_requestedColorScheme != Qt::ColorScheme::Unknown + && m_requestedColorScheme != m_storage->colorScheme()) { + qCDebug(lcQGtk3Interface) << "Current KDE theme doesn't support reuqested color scheme" + << m_requestedColorScheme << "Falling back to fusion palette."; + return QPlatformTheme::palette(type); + } +#endif + + return (m_requestedColorScheme != Qt::ColorScheme::Unknown + && m_requestedColorScheme != m_storage->colorScheme()) + ? QPlatformTheme::palette(type) : m_storage->palette(type); } QPixmap QGtk3Theme::standardPixmap(StandardPixmap sp, const QSizeF &size) const diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.h b/src/plugins/platformthemes/gtk3/qgtk3theme.h index 5b67ca07658..7eb62bf4c84 100644 --- a/src/plugins/platformthemes/gtk3/qgtk3theme.h +++ b/src/plugins/platformthemes/gtk3/qgtk3theme.h @@ -19,6 +19,7 @@ public: virtual QString gtkFontName() const override; Qt::ColorScheme colorScheme() const override; + void requestColorScheme(Qt::ColorScheme scheme) override; bool usePlatformNativeDialog(DialogType type) const override; QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override; @@ -31,6 +32,7 @@ public: static const char *name; private: + Qt::ColorScheme m_requestedColorScheme = Qt::ColorScheme::Unknown; static bool useNativeFileDialog(); std::unique_ptr m_storage; };