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();
|
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
|
Qt::ColorScheme QGtk3Theme::colorScheme() const
|
||||||
{
|
{
|
||||||
Q_ASSERT(m_storage);
|
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
|
bool QGtk3Theme::usePlatformNativeDialog(DialogType type) const
|
||||||
@ -211,7 +229,18 @@ bool QGtk3Theme::useNativeFileDialog()
|
|||||||
const QPalette *QGtk3Theme::palette(Palette type) const
|
const QPalette *QGtk3Theme::palette(Palette type) const
|
||||||
{
|
{
|
||||||
Q_ASSERT(m_storage);
|
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
|
QPixmap QGtk3Theme::standardPixmap(StandardPixmap sp, const QSizeF &size) const
|
||||||
|
@ -19,6 +19,7 @@ public:
|
|||||||
virtual QString gtkFontName() const override;
|
virtual QString gtkFontName() const override;
|
||||||
|
|
||||||
Qt::ColorScheme colorScheme() const override;
|
Qt::ColorScheme colorScheme() const override;
|
||||||
|
void requestColorScheme(Qt::ColorScheme scheme) override;
|
||||||
|
|
||||||
bool usePlatformNativeDialog(DialogType type) const override;
|
bool usePlatformNativeDialog(DialogType type) const override;
|
||||||
QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override;
|
QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override;
|
||||||
@ -31,6 +32,7 @@ public:
|
|||||||
|
|
||||||
static const char *name;
|
static const char *name;
|
||||||
private:
|
private:
|
||||||
|
Qt::ColorScheme m_requestedColorScheme = Qt::ColorScheme::Unknown;
|
||||||
static bool useNativeFileDialog();
|
static bool useNativeFileDialog();
|
||||||
std::unique_ptr<QGtk3Storage> m_storage;
|
std::unique_ptr<QGtk3Storage> m_storage;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user