Re-implement QPlatformTheme::requestColorScheme() in QGtk3Theme
QGtk3Theme remained unresponsive to programmatic color scheme changes, after QPlatformTheme::requestColorScheme() had been introduced. Add functionality to QGtk3Theme. Fall back to qt_fusion_palette, when the requested color scheme isn't supported by the current GTK3 theme (e.g. Adwaita-dark doesn't support light mode). Functionality has to be manually tested with the widget gallery example. Fixes: QTBUG-134022 Task-number: QTBUG-132929 Pick-to: 6.9 6.8 Change-Id: I1160c7afc1f1fcb6ec93d65ef54cb45a65a63863 Reviewed-by: Santhosh Kumar <santhosh.kumar.selvaraj@qt.io>
This commit is contained in:
parent
db6f8821fc
commit
738c180c4f
@ -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
|
||||
|
@ -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<QGtk3Storage> m_storage;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user