Drop QPlatformTheme::Appearance() backports breaking ABI

This commit is contained in:
Jan Grulich 2023-08-22 09:23:00 +02:00
parent 4764b5f6a1
commit d2061e2275
24 changed files with 112 additions and 856 deletions

View File

@ -1,7 +1,7 @@
From dacd0c6b3466258d175e7119a8e4836171400820 Mon Sep 17 00:00:00 2001 From dacd0c6b3466258d175e7119a8e4836171400820 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 12:03:46 +0200 Date: Wed, 26 Jul 2023 12:03:46 +0200
Subject: [PATCH 01/22] Use Wayland by default on GNOME Subject: [PATCH 01/15] Use Wayland by default on GNOME
--- ---
src/gui/kernel/qguiapplication.cpp | 9 +-------- src/gui/kernel/qguiapplication.cpp | 9 +--------

View File

@ -1,119 +0,0 @@
From 488d73ca92deb669abc724c82dbd3206597107fd Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 12:04:21 +0200
Subject: [PATCH 02/22] Add QPlatformTheme::Appearance for detecting light/dark
modes
And implement it on Windows and macOS.
---
src/gui/kernel/qplatformtheme.cpp | 5 +++++
src/gui/kernel/qplatformtheme.h | 8 ++++++++
src/plugins/platforms/cocoa/qcocoatheme.h | 1 +
src/plugins/platforms/cocoa/qcocoatheme.mm | 5 +++++
src/plugins/platforms/windows/qwindowstheme.cpp | 5 +++++
src/plugins/platforms/windows/qwindowstheme.h | 3 +++
6 files changed, 27 insertions(+)
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index 2325873245..662fef1426 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -399,6 +399,11 @@ QPlatformDialogHelper *QPlatformTheme::createPlatformDialogHelper(DialogType typ
return nullptr;
}
+QPlatformTheme::Appearance QPlatformTheme::appearance() const
+{
+ return Appearance::Unknown;
+}
+
const QPalette *QPlatformTheme::palette(Palette type) const
{
Q_D(const QPlatformTheme);
diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h
index 7e6c9d5740..c0dee4c581 100644
--- a/src/gui/kernel/qplatformtheme.h
+++ b/src/gui/kernel/qplatformtheme.h
@@ -131,6 +131,12 @@ public:
MessageDialog
};
+ enum class Appearance {
+ Unknown = 0x0000,
+ Light = 0x0001,
+ Dark = 0x0002
+ };
+
enum Palette {
SystemPalette,
ToolTipPalette,
@@ -320,6 +326,8 @@ public:
virtual QString standardButtonText(int button) const;
virtual QKeySequence standardButtonShortcut(int button) const;
+ virtual Appearance appearance() const;
+
static QVariant defaultThemeHint(ThemeHint hint);
static QString defaultStandardButtonText(int button);
static QString removeMnemonics(const QString &original);
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.h b/src/plugins/platforms/cocoa/qcocoatheme.h
index 50e56ef1bf..f719fd943b 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.h
+++ b/src/plugins/platforms/cocoa/qcocoatheme.h
@@ -73,6 +73,7 @@ public:
QIcon fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions options = {}) const override;
QVariant themeHint(ThemeHint hint) const override;
+ Appearance appearance() const override;
QString standardButtonText(int button) const override;
QKeySequence standardButtonShortcut(int button) const override;
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm
index d73b028afb..a79fa4e4b9 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.mm
+++ b/src/plugins/platforms/cocoa/qcocoatheme.mm
@@ -544,6 +544,11 @@ QVariant QCocoaTheme::themeHint(ThemeHint hint) const
return QPlatformTheme::themeHint(hint);
}
+QPlatformTheme::Appearance QCocoaTheme::appearance() const
+{
+ return qt_mac_applicationIsInDarkMode() ? Appearance::Dark : Appearance::Light;
+}
+
QString QCocoaTheme::standardButtonText(int button) const
{
return button == QPlatformDialogHelper::Discard ?
diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp
index 25e083fd5c..510b8746da 100644
--- a/src/plugins/platforms/windows/qwindowstheme.cpp
+++ b/src/plugins/platforms/windows/qwindowstheme.cpp
@@ -520,6 +520,11 @@ QVariant QWindowsTheme::themeHint(ThemeHint hint) const
return QPlatformTheme::themeHint(hint);
}
+QPlatformTheme::Appearance QWindowsTheme::appearance() const
+{
+ return QWindowsContext::isDarkMode() ? Appearance::Dark : Appearance::Light;
+}
+
void QWindowsTheme::clearPalettes()
{
qDeleteAll(m_palettes, m_palettes + NPalettes);
diff --git a/src/plugins/platforms/windows/qwindowstheme.h b/src/plugins/platforms/windows/qwindowstheme.h
index af28f2878c..9d5fcc92fe 100644
--- a/src/plugins/platforms/windows/qwindowstheme.h
+++ b/src/plugins/platforms/windows/qwindowstheme.h
@@ -64,6 +64,9 @@ public:
QPlatformSystemTrayIcon *createPlatformSystemTrayIcon() const override;
#endif
QVariant themeHint(ThemeHint) const override;
+
+ Appearance appearance() const override;
+
const QPalette *palette(Palette type = SystemPalette) const override
{ return m_palettes[type]; }
const QFont *font(Font type = SystemFont) const override
--
2.41.0

View File

@ -1,7 +1,7 @@
From cf96f7cecf8d02722e303687c1f30361a4a55cd0 Mon Sep 17 00:00:00 2001 From c41101241ce626dd38ee71d5a37c6aeb434eddf4 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 12:06:29 +0200 Date: Wed, 26 Jul 2023 12:06:29 +0200
Subject: [PATCH 03/22] Add enum class Qt::Appearance Subject: [PATCH 02/15] Add enum class Qt::Appearance
It has been decided to add an appearance property in QStyleHints, which It has been decided to add an appearance property in QStyleHints, which
will be propagated to classes that do not include QPlatformTheme. will be propagated to classes that do not include QPlatformTheme.

View File

@ -1,7 +1,7 @@
From d0f0010b49eb40477ea42496063766199e857312 Mon Sep 17 00:00:00 2001 From fb0bc2e9f466c37f398af4a7a374fee2b29f5073 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 13:43:29 +0200 Date: Wed, 26 Jul 2023 13:43:29 +0200
Subject: [PATCH 09/22] Sync and assert StandardPixmap enums in QPlatformTheme Subject: [PATCH 03/15] Sync and assert StandardPixmap enums in QPlatformTheme
and QStyle and QStyle
Add missing enum values in QPlatformTheme::standardPixmap to sync with Add missing enum values in QPlatformTheme::standardPixmap to sync with
@ -20,7 +20,7 @@ not documented).
3 files changed, 14 insertions(+) 3 files changed, 14 insertions(+)
diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h
index 41213bf32b..210bd40afa 100644 index 7e6c9d5740..99a30337f5 100644
--- a/src/gui/kernel/qplatformtheme.h --- a/src/gui/kernel/qplatformtheme.h
+++ b/src/gui/kernel/qplatformtheme.h +++ b/src/gui/kernel/qplatformtheme.h
@@ -256,6 +256,15 @@ public: @@ -256,6 +256,15 @@ public:

View File

@ -1,89 +0,0 @@
From 1d693df019b1ebf54980a015000b01ae947f82ee Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 12:26:39 +0200
Subject: [PATCH 04/22] QGtk3Theme: implement appearance function to detect
dark themes
This allows Qt Quick Controls to detect if a dark theme is in use,
and if so, use a dark theme of the current style (if available).
---
.../platformthemes/gtk3/qgtk3theme.cpp | 42 +++++++++++++++++++
src/plugins/platformthemes/gtk3/qgtk3theme.h | 2 +
2 files changed, 44 insertions(+)
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index 93520344f8..a47720384c 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -41,6 +41,7 @@
#include "qgtk3dialoghelpers.h"
#include "qgtk3menu.h"
#include <QVariant>
+#include <QtCore/qregularexpression.h>
#undef signals
#include <gtk/gtk.h>
@@ -147,6 +148,47 @@ QString QGtk3Theme::gtkFontName() const
return QGnomeTheme::gtkFontName();
}
+QPlatformTheme::Appearance QGtk3Theme::appearance() const
+{
+ /*
+ https://docs.gtk.org/gtk3/running.html
+
+ It's possible to set a theme variant after the theme name when using GTK_THEME:
+
+ GTK_THEME=Adwaita:dark
+
+ Some themes also have "-dark" as part of their name.
+
+ We test this environment variable first because the documentation says
+ it's mainly used for easy debugging, so it should be possible to use it
+ to override any other settings.
+ */
+ QString themeName = qEnvironmentVariable("GTK_THEME");
+ const QRegularExpression darkRegex(QStringLiteral("[:-]dark"), QRegularExpression::CaseInsensitiveOption);
+ if (!themeName.isEmpty())
+ return darkRegex.match(themeName).hasMatch() ? Appearance::Dark : Appearance::Light;
+
+ /*
+ https://docs.gtk.org/gtk3/property.Settings.gtk-application-prefer-dark-theme.html
+
+ This setting controls which theme is used when the theme specified by
+ gtk-theme-name provides both light and dark variants. We can save a
+ regex check by testing this property first.
+ */
+ const auto preferDark = gtkSetting<bool>("gtk-application-prefer-dark-theme");
+ if (preferDark)
+ return Appearance::Dark;
+
+ /*
+ https://docs.gtk.org/gtk3/property.Settings.gtk-theme-name.html
+ */
+ themeName = gtkSetting("gtk-theme-name");
+ if (!themeName.isEmpty())
+ return darkRegex.match(themeName).hasMatch() ? Appearance::Dark : Appearance::Light;
+
+ return Appearance::Unknown;
+}
+
bool QGtk3Theme::usePlatformNativeDialog(DialogType type) const
{
switch (type) {
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.h b/src/plugins/platformthemes/gtk3/qgtk3theme.h
index 54296d2ff1..5f439067af 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.h
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.h
@@ -52,6 +52,8 @@ public:
virtual QVariant themeHint(ThemeHint hint) const override;
virtual QString gtkFontName() const override;
+ Appearance appearance() const override;
+
bool usePlatformNativeDialog(DialogType type) const override;
QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override;
--
2.41.0

View File

@ -1,14 +1,14 @@
From b6bf671270aea7bddbb98c69ff395ae649d0edf8 Mon Sep 17 00:00:00 2001 From 24b6ad903ab2ed620f8c754aafb727e6aa342aca Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 15:38:13 +0200 Date: Wed, 26 Jul 2023 15:38:13 +0200
Subject: [PATCH 10/22] QGtk3Theme: subscribe to theme hint changes Subject: [PATCH 04/15] QGtk3Theme: subscribe to theme hint changes
--- ---
.../platformthemes/gtk3/qgtk3theme.cpp | 20 +++++++++++++++++++ .../platformthemes/gtk3/qgtk3theme.cpp | 20 +++++++++++++++++++
1 file changed, 20 insertions(+) 1 file changed, 20 insertions(+)
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index 2a70d5f3dd..0e940ae690 100644 index 93520344f8..7540cb43cf 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp --- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -40,6 +40,7 @@ @@ -40,6 +40,7 @@
@ -17,9 +17,9 @@ index 2a70d5f3dd..0e940ae690 100644
#include "qgtk3menu.h" #include "qgtk3menu.h"
+#include "qpa/qwindowsysteminterface.h" +#include "qpa/qwindowsysteminterface.h"
#include <QVariant> #include <QVariant>
#include <QtCore/qregularexpression.h>
@@ -101,6 +102,25 @@ QGtk3Theme::QGtk3Theme() #undef signals
@@ -100,6 +101,25 @@ QGtk3Theme::QGtk3Theme()
/* Use our custom log handler. */ /* Use our custom log handler. */
g_log_set_handler("Gtk", G_LOG_LEVEL_MESSAGE, gtkMessageHandler, nullptr); g_log_set_handler("Gtk", G_LOG_LEVEL_MESSAGE, gtkMessageHandler, nullptr);

View File

@ -1,128 +0,0 @@
From 3d8874aaf5384818a51f158cd2880b7976c9a93a Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 12:41:53 +0200
Subject: [PATCH 05/22] Account for dark system themes in qt_fusionPalette
On Ubuntu (Gnome), the Fusion style didn't account for when a dark
theme was set in the system's settings. Neither QGtk3Theme, nor
QGnomeTheme (which it derives from) provide a palette() implementation,
so they'd fall back to QPlatformTheme's. This default implementation
calls QPlatformThemePrivate::initializeSystemPalette(), which uses
qt_fusionPalette().
This patch accounts for QPlatformTheme::appearance() in
qt_fusionPalette(), adjusting the palette roles accordingly
to look correct when run under a dark theme.
This also fixes the same issue for the Fusion style in Qt Quick
Controls.
---
src/gui/kernel/qpalette.cpp | 36 -------------------------
src/gui/kernel/qplatformtheme.cpp | 44 ++++++++++++++++++++++++++++++-
2 files changed, 43 insertions(+), 37 deletions(-)
diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp
index a192b7aef4..0549f19699 100644
--- a/src/gui/kernel/qpalette.cpp
+++ b/src/gui/kernel/qpalette.cpp
@@ -1164,42 +1164,6 @@ void QPalette::setColorGroup(ColorGroup cg, const QBrush &foreground, const QBru
setBrush(cg, ToolTipText, toolTipText);
}
-Q_GUI_EXPORT QPalette qt_fusionPalette()
-{
- QColor backGround(239, 239, 239);
- QColor light = backGround.lighter(150);
- QColor mid(backGround.darker(130));
- QColor midLight = mid.lighter(110);
- QColor base = Qt::white;
- QColor disabledBase(backGround);
- QColor dark = backGround.darker(150);
- QColor darkDisabled = QColor(209, 209, 209).darker(110);
- QColor text = Qt::black;
- QColor hightlightedText = Qt::white;
- QColor disabledText = QColor(190, 190, 190);
- QColor button = backGround;
- QColor shadow = dark.darker(135);
- QColor disabledShadow = shadow.lighter(150);
-
- QPalette fusionPalette(Qt::black,backGround,light,dark,mid,text,base);
- fusionPalette.setBrush(QPalette::Midlight, midLight);
- fusionPalette.setBrush(QPalette::Button, button);
- fusionPalette.setBrush(QPalette::Shadow, shadow);
- fusionPalette.setBrush(QPalette::HighlightedText, hightlightedText);
-
- fusionPalette.setBrush(QPalette::Disabled, QPalette::Text, disabledText);
- fusionPalette.setBrush(QPalette::Disabled, QPalette::WindowText, disabledText);
- fusionPalette.setBrush(QPalette::Disabled, QPalette::ButtonText, disabledText);
- fusionPalette.setBrush(QPalette::Disabled, QPalette::Base, disabledBase);
- fusionPalette.setBrush(QPalette::Disabled, QPalette::Dark, darkDisabled);
- fusionPalette.setBrush(QPalette::Disabled, QPalette::Shadow, disabledShadow);
-
- fusionPalette.setBrush(QPalette::Active, QPalette::Highlight, QColor(48, 140, 198));
- fusionPalette.setBrush(QPalette::Inactive, QPalette::Highlight, QColor(48, 140, 198));
- fusionPalette.setBrush(QPalette::Disabled, QPalette::Highlight, QColor(145, 145, 145));
- return fusionPalette;
-}
-
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug dbg, const QPalette &p)
{
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index 662fef1426..62f569bbef 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -364,7 +364,49 @@ QPlatformThemePrivate::~QPlatformThemePrivate()
delete systemPalette;
}
-Q_GUI_EXPORT QPalette qt_fusionPalette();
+Q_GUI_EXPORT QPalette qt_fusionPalette()
+{
+ const bool darkAppearance = QGuiApplicationPrivate::platformTheme()->appearance()
+ == QPlatformTheme::Appearance::Dark;
+ const QColor windowText = darkAppearance ? QColor(240, 240, 240) : Qt::black;
+ const QColor backGround = darkAppearance ? QColor(50, 50, 50) : QColor(239, 239, 239);
+ const QColor light = backGround.lighter(150);
+ const QColor mid = (backGround.darker(130));
+ const QColor midLight = mid.lighter(110);
+ const QColor base = darkAppearance ? backGround.darker(140) : Qt::white;
+ const QColor disabledBase(backGround);
+ const QColor dark = backGround.darker(150);
+ const QColor darkDisabled = QColor(209, 209, 209).darker(110);
+ const QColor text = darkAppearance ? windowText : Qt::black;
+ const QColor hightlightedText = darkAppearance ? windowText : Qt::white;
+ const QColor disabledText = darkAppearance ? QColor(130, 130, 130) : QColor(190, 190, 190);
+ const QColor button = backGround;
+ const QColor shadow = dark.darker(135);
+ const QColor disabledShadow = shadow.lighter(150);
+ QColor placeholder = text;
+ placeholder.setAlpha(128);
+
+ QPalette fusionPalette(windowText, backGround, light, dark, mid, text, base);
+ fusionPalette.setBrush(QPalette::Midlight, midLight);
+ fusionPalette.setBrush(QPalette::Button, button);
+ fusionPalette.setBrush(QPalette::Shadow, shadow);
+ fusionPalette.setBrush(QPalette::HighlightedText, hightlightedText);
+
+ fusionPalette.setBrush(QPalette::Disabled, QPalette::Text, disabledText);
+ fusionPalette.setBrush(QPalette::Disabled, QPalette::WindowText, disabledText);
+ fusionPalette.setBrush(QPalette::Disabled, QPalette::ButtonText, disabledText);
+ fusionPalette.setBrush(QPalette::Disabled, QPalette::Base, disabledBase);
+ fusionPalette.setBrush(QPalette::Disabled, QPalette::Dark, darkDisabled);
+ fusionPalette.setBrush(QPalette::Disabled, QPalette::Shadow, disabledShadow);
+
+ fusionPalette.setBrush(QPalette::Active, QPalette::Highlight, QColor(48, 140, 198));
+ fusionPalette.setBrush(QPalette::Inactive, QPalette::Highlight, QColor(48, 140, 198));
+ fusionPalette.setBrush(QPalette::Disabled, QPalette::Highlight, QColor(145, 145, 145));
+
+ fusionPalette.setBrush(QPalette::PlaceholderText, placeholder);
+
+ return fusionPalette;
+}
void QPlatformThemePrivate::initializeSystemPalette()
{
--
2.41.0

View File

@ -1,7 +1,7 @@
From 232211f5867878e64bed10d4dff0f94a6326a94f Mon Sep 17 00:00:00 2001 From f9d7c6b4157046a06f4ce04726e743d43ab711a2 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 15:38:38 +0200 Date: Wed, 26 Jul 2023 15:38:38 +0200
Subject: [PATCH 11/22] Gtk3Theme: set XCURSOR_SIZE and XCURSOR_THEME for Subject: [PATCH 05/15] Gtk3Theme: set XCURSOR_SIZE and XCURSOR_THEME for
wayland sessions wayland sessions
GNOME doesn't set these for Wayland session and without those env GNOME doesn't set these for Wayland session and without those env
@ -17,7 +17,7 @@ Qt Wayland QPA plugin still tries to load from those two envs.
1 file changed, 15 insertions(+) 1 file changed, 15 insertions(+)
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index 0e940ae690..8688fe205e 100644 index 7540cb43cf..aceacda4b8 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp --- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -41,6 +41,7 @@ @@ -41,6 +41,7 @@
@ -26,9 +26,9 @@ index 0e940ae690..8688fe205e 100644
#include "qpa/qwindowsysteminterface.h" #include "qpa/qwindowsysteminterface.h"
+#include <QGuiApplication> +#include <QGuiApplication>
#include <QVariant> #include <QVariant>
#include <QtCore/qregularexpression.h>
@@ -121,6 +122,20 @@ QGtk3Theme::QGtk3Theme() #undef signals
@@ -120,6 +121,20 @@ QGtk3Theme::QGtk3Theme()
SETTING_CONNECT("gtk-application-prefer-dark-theme"); SETTING_CONNECT("gtk-application-prefer-dark-theme");
SETTING_CONNECT("gtk-theme-name"); SETTING_CONNECT("gtk-theme-name");
#undef SETTING_CONNECT #undef SETTING_CONNECT

View File

@ -1,7 +1,7 @@
From 753c0dea114812a2d3b721cb72fda1b49a3c38c2 Mon Sep 17 00:00:00 2001 From ffab9df46c5f2cb411765f72ecd6f5dcdb62fbb4 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 11:54:44 +0200 Date: Thu, 27 Jul 2023 11:54:44 +0200
Subject: [PATCH 13/22] Re-implement palette, standardPixmap, file icons, fonts Subject: [PATCH 06/15] Re-implement palette, standardPixmap, file icons, fonts
in QGtk3Theme in QGtk3Theme
Read theme colors from GTK3 style context and build platform theme Read theme colors from GTK3 style context and build platform theme
@ -19,9 +19,9 @@ and file icons.
src/plugins/platformthemes/gtk3/qgtk3json_p.h | 102 ++ src/plugins/platformthemes/gtk3/qgtk3json_p.h | 102 ++
.../platformthemes/gtk3/qgtk3storage.cpp | 470 +++++++ .../platformthemes/gtk3/qgtk3storage.cpp | 470 +++++++
.../platformthemes/gtk3/qgtk3storage_p.h | 234 ++++ .../platformthemes/gtk3/qgtk3storage_p.h | 234 ++++
.../platformthemes/gtk3/qgtk3theme.cpp | 32 +- .../platformthemes/gtk3/qgtk3theme.cpp | 23 +
src/plugins/platformthemes/gtk3/qgtk3theme.h | 8 + src/plugins/platformthemes/gtk3/qgtk3theme.h | 8 +
11 files changed, 3161 insertions(+), 3 deletions(-) 11 files changed, 3155 insertions(+)
create mode 100644 include/QtCore/5.15.10/QtCore/private/qflatmap_p.h create mode 100644 include/QtCore/5.15.10/QtCore/private/qflatmap_p.h
create mode 100644 src/corelib/tools/qflatmap_p.h create mode 100644 src/corelib/tools/qflatmap_p.h
create mode 100644 src/plugins/platformthemes/gtk3/qgtk3interface.cpp create mode 100644 src/plugins/platformthemes/gtk3/qgtk3interface.cpp
@ -3220,10 +3220,10 @@ index 0000000000..57f6aeea96
+QT_END_NAMESPACE +QT_END_NAMESPACE
+#endif // QGTK3STORAGE_H +#endif // QGTK3STORAGE_H
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index c01947e402..5d9fc24d71 100644 index aceacda4b8..ee6e0f3dd9 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp --- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -136,6 +136,8 @@ QGtk3Theme::QGtk3Theme() @@ -135,6 +135,8 @@ QGtk3Theme::QGtk3Theme()
qputenv("XCURSOR_THEME", cursorTheme.toUtf8()); qputenv("XCURSOR_THEME", cursorTheme.toUtf8());
} }
} }
@ -3232,38 +3232,7 @@ index c01947e402..5d9fc24d71 100644
} }
static inline QVariant gtkGetLongPressTime() static inline QVariant gtkGetLongPressTime()
@@ -185,6 +187,8 @@ QString QGtk3Theme::gtkFontName() const @@ -235,4 +237,25 @@ bool QGtk3Theme::useNativeFileDialog()
Qt::Appearance QGtk3Theme::appearance() const
{
+ if (m_storage)
+ return m_storage->appearance();
/*
https://docs.gtk.org/gtk3/running.html
@@ -199,9 +203,9 @@ Qt::Appearance QGtk3Theme::appearance() const
to override any other settings.
*/
QString themeName = qEnvironmentVariable("GTK_THEME");
- const QRegularExpression darkRegex(QStringLiteral("[:-]dark"), QRegularExpression::CaseInsensitiveOption);
if (!themeName.isEmpty())
- return darkRegex.match(themeName).hasMatch() ? Qt::Appearance::Dark : Qt::Appearance::Light;
+ return themeName.contains("dark", Qt::CaseInsensitive)
+ ? Qt::Appearance::Dark : Qt::Appearance::Light;
/*
https://docs.gtk.org/gtk3/property.Settings.gtk-application-prefer-dark-theme.html
@@ -219,7 +223,8 @@ Qt::Appearance QGtk3Theme::appearance() const
*/
themeName = gtkSetting("gtk-theme-name");
if (!themeName.isEmpty())
- return darkRegex.match(themeName).hasMatch() ? Qt::Appearance::Dark : Qt::Appearance::Light;
+ return themeName.contains("dark", Qt::CaseInsensitive)
+ ? Qt::Appearance::Dark : Qt::Appearance::Light;
return Qt::Appearance::Unknown;
}
@@ -277,4 +282,25 @@ bool QGtk3Theme::useNativeFileDialog()
return gtk_check_version(3, 15, 5) == nullptr; return gtk_check_version(3, 15, 5) == nullptr;
} }
@ -3290,7 +3259,7 @@ index c01947e402..5d9fc24d71 100644
+ +
QT_END_NAMESPACE QT_END_NAMESPACE
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.h b/src/plugins/platformthemes/gtk3/qgtk3theme.h diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.h b/src/plugins/platformthemes/gtk3/qgtk3theme.h
index 89a3b98994..73f4399894 100644 index 54296d2ff1..99e896c020 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.h --- a/src/plugins/platformthemes/gtk3/qgtk3theme.h
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.h +++ b/src/plugins/platformthemes/gtk3/qgtk3theme.h
@@ -41,6 +41,7 @@ @@ -41,6 +41,7 @@
@ -3301,7 +3270,7 @@ index 89a3b98994..73f4399894 100644
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
@@ -60,9 +61,16 @@ public: @@ -58,9 +59,16 @@ public:
QPlatformMenu* createPlatformMenu() const override; QPlatformMenu* createPlatformMenu() const override;
QPlatformMenuItem* createPlatformMenuItem() const override; QPlatformMenuItem* createPlatformMenuItem() const override;

View File

@ -1,49 +0,0 @@
From 84b0d114d98c58ecf00e20987321182e8e2ba4c1 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 12:44:00 +0200
Subject: [PATCH 06/22] qt_fusionPalette: make links more legible on dark
backgrounds
QPalette's default for Link is Qt::blue, which is difficult to read
on dark backgrounds.
Use the same blue that is already used for Highlight, as it is
consistent and easy to read.
---
src/gui/kernel/qplatformtheme.cpp | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index 62f569bbef..14fdf94755 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -378,6 +378,7 @@ Q_GUI_EXPORT QPalette qt_fusionPalette()
const QColor dark = backGround.darker(150);
const QColor darkDisabled = QColor(209, 209, 209).darker(110);
const QColor text = darkAppearance ? windowText : Qt::black;
+ const QColor highlight = QColor(48, 140, 198);
const QColor hightlightedText = darkAppearance ? windowText : Qt::white;
const QColor disabledText = darkAppearance ? QColor(130, 130, 130) : QColor(190, 190, 190);
const QColor button = backGround;
@@ -399,12 +400,16 @@ Q_GUI_EXPORT QPalette qt_fusionPalette()
fusionPalette.setBrush(QPalette::Disabled, QPalette::Dark, darkDisabled);
fusionPalette.setBrush(QPalette::Disabled, QPalette::Shadow, disabledShadow);
- fusionPalette.setBrush(QPalette::Active, QPalette::Highlight, QColor(48, 140, 198));
- fusionPalette.setBrush(QPalette::Inactive, QPalette::Highlight, QColor(48, 140, 198));
+ fusionPalette.setBrush(QPalette::Active, QPalette::Highlight, highlight);
+ fusionPalette.setBrush(QPalette::Inactive, QPalette::Highlight, highlight);
fusionPalette.setBrush(QPalette::Disabled, QPalette::Highlight, QColor(145, 145, 145));
fusionPalette.setBrush(QPalette::PlaceholderText, placeholder);
+ // Use a more legible light blue on dark backgrounds than the default Qt::blue.
+ if (darkAppearance)
+ fusionPalette.setBrush(QPalette::Link, highlight);
+
return fusionPalette;
}
--
2.41.0

View File

@ -1,29 +0,0 @@
From dff40b9fed2b91244d6664342daf859b3aa0375f Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 12:44:37 +0200
Subject: [PATCH 07/22] Add nullptr check for theme when initializing palette
---
src/gui/kernel/qplatformtheme.cpp | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index 14fdf94755..827829c4a5 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -366,8 +366,10 @@ QPlatformThemePrivate::~QPlatformThemePrivate()
Q_GUI_EXPORT QPalette qt_fusionPalette()
{
- const bool darkAppearance = QGuiApplicationPrivate::platformTheme()->appearance()
- == QPlatformTheme::Appearance::Dark;
+ auto theme = QGuiApplicationPrivate::platformTheme();
+ const bool darkAppearance = theme
+ ? theme->appearance() == QPlatformTheme::Appearance::Dark
+ : false;
const QColor windowText = darkAppearance ? QColor(240, 240, 240) : Qt::black;
const QColor backGround = darkAppearance ? QColor(50, 50, 50) : QColor(239, 239, 239);
const QColor light = backGround.lighter(150);
--
2.41.0

View File

@ -1,7 +1,7 @@
From 376815da4038c757a42f316c4cb7e2a6793fec00 Mon Sep 17 00:00:00 2001 From c05835195cb9c0eb811625e048a52d09ffef255f Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:35:44 +0200 Date: Thu, 27 Jul 2023 12:35:44 +0200
Subject: [PATCH 14/22] GTK3 theme: simplify code Subject: [PATCH 07/15] GTK3 theme: simplify code
There's no need to first convert to QString and then convert back to There's no need to first convert to QString and then convert back to
QByteArray. QByteArray.
@ -10,10 +10,10 @@ QByteArray.
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index 5d9fc24d71..fcd466f768 100644 index ee6e0f3dd9..5f5fee4f3b 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp --- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp +++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -128,7 +128,7 @@ QGtk3Theme::QGtk3Theme() @@ -127,7 +127,7 @@ QGtk3Theme::QGtk3Theme()
if (qEnvironmentVariableIsEmpty("XCURSOR_SIZE")) { if (qEnvironmentVariableIsEmpty("XCURSOR_SIZE")) {
const int cursorSize = gtkSetting<gint>("gtk-cursor-theme-size"); const int cursorSize = gtkSetting<gint>("gtk-cursor-theme-size");
if (cursorSize > 0) if (cursorSize > 0)

View File

@ -1,7 +1,7 @@
From 40d1e750fd1b0f646724b383928b8f70a7a3abe8 Mon Sep 17 00:00:00 2001 From 99fd51406053e789b9e02dd5fdbf63d79cb4d7ff Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:36:14 +0200 Date: Thu, 27 Jul 2023 12:36:14 +0200
Subject: [PATCH 15/22] Fix checkbox and radiobutton background in QGtk3Theme Subject: [PATCH 08/15] Fix checkbox and radiobutton background in QGtk3Theme
The background color for radio buttons and checkboxes was not The background color for radio buttons and checkboxes was not
correctly read from the current GTK3 theme in light mode. correctly read from the current GTK3 theme in light mode.

View File

@ -1,202 +0,0 @@
From 240ce954220d713968e608f2766144c7657bceed Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 12:56:06 +0200
Subject: [PATCH 08/22] Replace QPlatformTheme::Appearance by Qt:Appearance
With the introduction of Qt:Appearance, its predecessor in
QPlatformTheme has become redundant.
This patch replaces all occurrences of QPlatformTheme::Appearance with
the new enum class.
---
src/gui/kernel/qplatformtheme.cpp | 6 +++---
src/gui/kernel/qplatformtheme.h | 8 +-------
src/plugins/platforms/cocoa/qcocoatheme.h | 2 +-
src/plugins/platforms/cocoa/qcocoatheme.mm | 4 ++--
src/plugins/platforms/windows/qwindowstheme.cpp | 4 ++--
src/plugins/platforms/windows/qwindowstheme.h | 2 +-
src/plugins/platformthemes/gtk3/qgtk3theme.cpp | 10 +++++-----
src/plugins/platformthemes/gtk3/qgtk3theme.h | 2 +-
src/plugins/styles/mac/qmacstyle_mac.mm | 2 +-
9 files changed, 17 insertions(+), 23 deletions(-)
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index 827829c4a5..6dd7d5c923 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -368,7 +368,7 @@ Q_GUI_EXPORT QPalette qt_fusionPalette()
{
auto theme = QGuiApplicationPrivate::platformTheme();
const bool darkAppearance = theme
- ? theme->appearance() == QPlatformTheme::Appearance::Dark
+ ? theme->appearance() == Qt::Appearance::Dark
: false;
const QColor windowText = darkAppearance ? QColor(240, 240, 240) : Qt::black;
const QColor backGround = darkAppearance ? QColor(50, 50, 50) : QColor(239, 239, 239);
@@ -448,9 +448,9 @@ QPlatformDialogHelper *QPlatformTheme::createPlatformDialogHelper(DialogType typ
return nullptr;
}
-QPlatformTheme::Appearance QPlatformTheme::appearance() const
+Qt::Appearance QPlatformTheme::appearance() const
{
- return Appearance::Unknown;
+ return Qt::Appearance::Unknown;
}
const QPalette *QPlatformTheme::palette(Palette type) const
diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h
index c0dee4c581..41213bf32b 100644
--- a/src/gui/kernel/qplatformtheme.h
+++ b/src/gui/kernel/qplatformtheme.h
@@ -131,12 +131,6 @@ public:
MessageDialog
};
- enum class Appearance {
- Unknown = 0x0000,
- Light = 0x0001,
- Dark = 0x0002
- };
-
enum Palette {
SystemPalette,
ToolTipPalette,
@@ -326,7 +320,7 @@ public:
virtual QString standardButtonText(int button) const;
virtual QKeySequence standardButtonShortcut(int button) const;
- virtual Appearance appearance() const;
+ virtual Qt::Appearance appearance() const;
static QVariant defaultThemeHint(ThemeHint hint);
static QString defaultStandardButtonText(int button);
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.h b/src/plugins/platforms/cocoa/qcocoatheme.h
index f719fd943b..78ff7cb51c 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.h
+++ b/src/plugins/platforms/cocoa/qcocoatheme.h
@@ -73,7 +73,7 @@ public:
QIcon fileIcon(const QFileInfo &fileInfo, QPlatformTheme::IconOptions options = {}) const override;
QVariant themeHint(ThemeHint hint) const override;
- Appearance appearance() const override;
+ Qt::Appearance appearance() const override;
QString standardButtonText(int button) const override;
QKeySequence standardButtonShortcut(int button) const override;
diff --git a/src/plugins/platforms/cocoa/qcocoatheme.mm b/src/plugins/platforms/cocoa/qcocoatheme.mm
index a79fa4e4b9..cd2e7ef90a 100644
--- a/src/plugins/platforms/cocoa/qcocoatheme.mm
+++ b/src/plugins/platforms/cocoa/qcocoatheme.mm
@@ -544,9 +544,9 @@ QVariant QCocoaTheme::themeHint(ThemeHint hint) const
return QPlatformTheme::themeHint(hint);
}
-QPlatformTheme::Appearance QCocoaTheme::appearance() const
+Qt::Appearance QCocoaTheme::appearance() const
{
- return qt_mac_applicationIsInDarkMode() ? Appearance::Dark : Appearance::Light;
+ return qt_mac_applicationIsInDarkMode() ? Qt::Appearance::Dark : Qt::Appearance::Light;
}
QString QCocoaTheme::standardButtonText(int button) const
diff --git a/src/plugins/platforms/windows/qwindowstheme.cpp b/src/plugins/platforms/windows/qwindowstheme.cpp
index 510b8746da..5d006e6ba9 100644
--- a/src/plugins/platforms/windows/qwindowstheme.cpp
+++ b/src/plugins/platforms/windows/qwindowstheme.cpp
@@ -520,9 +520,9 @@ QVariant QWindowsTheme::themeHint(ThemeHint hint) const
return QPlatformTheme::themeHint(hint);
}
-QPlatformTheme::Appearance QWindowsTheme::appearance() const
+Qt::Appearance QWindowsTheme::appearance() const
{
- return QWindowsContext::isDarkMode() ? Appearance::Dark : Appearance::Light;
+ return QWindowsContext::isDarkMode() ? Qt::Appearance::Dark : Qt::Appearance::Light;
}
void QWindowsTheme::clearPalettes()
diff --git a/src/plugins/platforms/windows/qwindowstheme.h b/src/plugins/platforms/windows/qwindowstheme.h
index 9d5fcc92fe..ea72c96049 100644
--- a/src/plugins/platforms/windows/qwindowstheme.h
+++ b/src/plugins/platforms/windows/qwindowstheme.h
@@ -65,7 +65,7 @@ public:
#endif
QVariant themeHint(ThemeHint) const override;
- Appearance appearance() const override;
+ Qt::Appearance appearance() const override;
const QPalette *palette(Palette type = SystemPalette) const override
{ return m_palettes[type]; }
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index a47720384c..2a70d5f3dd 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -148,7 +148,7 @@ QString QGtk3Theme::gtkFontName() const
return QGnomeTheme::gtkFontName();
}
-QPlatformTheme::Appearance QGtk3Theme::appearance() const
+Qt::Appearance QGtk3Theme::appearance() const
{
/*
https://docs.gtk.org/gtk3/running.html
@@ -166,7 +166,7 @@ QPlatformTheme::Appearance QGtk3Theme::appearance() const
QString themeName = qEnvironmentVariable("GTK_THEME");
const QRegularExpression darkRegex(QStringLiteral("[:-]dark"), QRegularExpression::CaseInsensitiveOption);
if (!themeName.isEmpty())
- return darkRegex.match(themeName).hasMatch() ? Appearance::Dark : Appearance::Light;
+ return darkRegex.match(themeName).hasMatch() ? Qt::Appearance::Dark : Qt::Appearance::Light;
/*
https://docs.gtk.org/gtk3/property.Settings.gtk-application-prefer-dark-theme.html
@@ -177,16 +177,16 @@ QPlatformTheme::Appearance QGtk3Theme::appearance() const
*/
const auto preferDark = gtkSetting<bool>("gtk-application-prefer-dark-theme");
if (preferDark)
- return Appearance::Dark;
+ return Qt::Appearance::Dark;
/*
https://docs.gtk.org/gtk3/property.Settings.gtk-theme-name.html
*/
themeName = gtkSetting("gtk-theme-name");
if (!themeName.isEmpty())
- return darkRegex.match(themeName).hasMatch() ? Appearance::Dark : Appearance::Light;
+ return darkRegex.match(themeName).hasMatch() ? Qt::Appearance::Dark : Qt::Appearance::Light;
- return Appearance::Unknown;
+ return Qt::Appearance::Unknown;
}
bool QGtk3Theme::usePlatformNativeDialog(DialogType type) const
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.h b/src/plugins/platformthemes/gtk3/qgtk3theme.h
index 5f439067af..89a3b98994 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.h
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.h
@@ -52,7 +52,7 @@ public:
virtual QVariant themeHint(ThemeHint hint) const override;
virtual QString gtkFontName() const override;
- Appearance appearance() const override;
+ Qt::Appearance appearance() const override;
bool usePlatformNativeDialog(DialogType type) const override;
QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const override;
diff --git a/src/plugins/styles/mac/qmacstyle_mac.mm b/src/plugins/styles/mac/qmacstyle_mac.mm
index 4171e08286..fa748eb38a 100644
--- a/src/plugins/styles/mac/qmacstyle_mac.mm
+++ b/src/plugins/styles/mac/qmacstyle_mac.mm
@@ -303,7 +303,7 @@ static const qreal titleBarButtonSpacing = 8;
// active: window is active
// selected: tab is selected
// hovered: tab is hovered
-bool isDarkMode() { return qt_mac_applicationIsInDarkMode(); }
+bool isDarkMode() { return QGuiApplicationPrivate::platformTheme()->appearance() == Qt::Appearance::Dark; }
#if QT_CONFIG(tabbar)
static const QColor lightTabBarTabBackgroundActive(190, 190, 190);
--
2.41.0

View File

@ -0,0 +1,51 @@
From 41d23f13c9aede66a6c9044869b0ef5f52f7d71d Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:38:53 +0200
Subject: [PATCH 09/15] Cleanup QGtk3Theme
1. Remove unused include.
2. Replace unnecessary null checks with asserts.
3. Remove dead code after the cleanup.
---
src/plugins/platformthemes/gtk3/qgtk3theme.cpp | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index 5f5fee4f3b..0de9dd3866 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -239,23 +239,27 @@ bool QGtk3Theme::useNativeFileDialog()
const QPalette *QGtk3Theme::palette(Palette type) const
{
- return m_storage ? m_storage->palette(type) : QPlatformTheme::palette(type);
+ Q_ASSERT(m_storage);
+ return m_storage->palette(type);
}
QPixmap QGtk3Theme::standardPixmap(StandardPixmap sp, const QSizeF &size) const
{
- return m_storage ? m_storage->standardPixmap(sp, size) : QPlatformTheme::standardPixmap(sp, size);
+ Q_ASSERT(m_storage);
+ return m_storage->standardPixmap(sp, size);
}
const QFont *QGtk3Theme::font(Font type) const
{
- return m_storage ? m_storage->font(type) : QGnomeTheme::font(type);
+ Q_ASSERT(m_storage);
+ return m_storage->font(type);
}
QIcon QGtk3Theme::fileIcon(const QFileInfo &fileInfo,
QPlatformTheme::IconOptions iconOptions) const
{
- return m_storage ? m_storage->fileIcon(fileInfo) : QGnomeTheme::fileIcon(fileInfo, iconOptions);
+ Q_ASSERT(m_storage);
+ return m_storage->fileIcon(fileInfo);
}
QT_END_NAMESPACE
--
2.41.0

View File

@ -1,7 +1,7 @@
From 8f256a33fa60b249ee6fc7347f917f29a11c1e32 Mon Sep 17 00:00:00 2001 From f0117fa2110e8b6d71c82272fda1d264e7921a24 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:40:32 +0200 Date: Thu, 27 Jul 2023 12:40:32 +0200
Subject: [PATCH 17/22] Detect appearance by colors unless GTK theme name Subject: [PATCH 10/15] Detect appearance by colors unless GTK theme name
contains "dark" contains "dark"
QGtk3Theme detects the appearance property by theme name: If the name QGtk3Theme detects the appearance property by theme name: If the name

View File

@ -1,7 +1,7 @@
From d998c808ece0fb3e243bb28913a27bbedf0db974 Mon Sep 17 00:00:00 2001 From 85d72b8bf0db7349dafce252d18ce17677eef46e Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:41:06 +0200 Date: Thu, 27 Jul 2023 12:41:06 +0200
Subject: [PATCH 18/22] Change parsing log output in QGtk3Json from qCDebug to Subject: [PATCH 11/15] Change parsing log output in QGtk3Json from qCDebug to
qCInfo qCInfo
When a palette mapping is imported from a Json file, parsing errors are When a palette mapping is imported from a Json file, parsing errors are

View File

@ -1,7 +1,7 @@
From fa0c84d609a44aa630dbbb498ffe3bf11326647e Mon Sep 17 00:00:00 2001 From a2c6ba19ea2aafd1ec92fdd150ac14fe2424a394 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:42:04 +0200 Date: Thu, 27 Jul 2023 12:42:04 +0200
Subject: [PATCH 19/22] Document QGtk3Interface Subject: [PATCH 12/15] Document QGtk3Interface
Add internal documentation to header and implementation of Add internal documentation to header and implementation of
QGtk3Interface QGtk3Interface

View File

@ -1,29 +0,0 @@
From dc373fc0d7dc14107e06aca4b5664c830d681494 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Wed, 26 Jul 2023 15:39:31 +0200
Subject: [PATCH 12/22] Gtk3: fix stack smashing on mismatch between bool and
gboolean
Glib is written in C and predates C99 (though not really, glib 2.0 was
released in 2002), so it defines gboolean as int, a 4-byte type. C++'s
bool is a 1-byte type, so this caused a buffer overflow.
---
src/plugins/platformthemes/gtk3/qgtk3theme.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index 8688fe205e..c01947e402 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -210,7 +210,7 @@ Qt::Appearance QGtk3Theme::appearance() const
gtk-theme-name provides both light and dark variants. We can save a
regex check by testing this property first.
*/
- const auto preferDark = gtkSetting<bool>("gtk-application-prefer-dark-theme");
+ const auto preferDark = gtkSetting<gboolean>("gtk-application-prefer-dark-theme");
if (preferDark)
return Qt::Appearance::Dark;
--
2.41.0

View File

@ -1,7 +1,7 @@
From 65aff839101ef829c14b69a815a34eeda00abd3e Mon Sep 17 00:00:00 2001 From f5e74db1b5245814d5993b6b16d58274ca8b89ab Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:42:49 +0200 Date: Thu, 27 Jul 2023 12:42:49 +0200
Subject: [PATCH 20/22] Document QGtk3Storage Subject: [PATCH 13/15] Document QGtk3Storage
Add internal documentation to header and implementation of Add internal documentation to header and implementation of
QGtk3Storage QGtk3Storage

View File

@ -1,7 +1,7 @@
From dfb10f3d3b689c172e53a94074b696d1eb9e6acd Mon Sep 17 00:00:00 2001 From 9628ad303ad924255a224fdcc113ff8264172fc7 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:44:11 +0200 Date: Thu, 27 Jul 2023 12:44:11 +0200
Subject: [PATCH 21/22] QGtk3Theme: Improve fixed font delivery Subject: [PATCH 14/15] QGtk3Theme: Improve fixed font delivery
The gtk_fixed widget was used as a reference to obtain a fixed font The gtk_fixed widget was used as a reference to obtain a fixed font
and HeaderViewFont. and HeaderViewFont.

View File

@ -1,7 +1,7 @@
From 410808ea61b30e886830bc8bdc0db562eb0b56b4 Mon Sep 17 00:00:00 2001 From 6a9a896ae86a69a3c8bcbaaf7e2e2fd2105723a4 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com> From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:44:31 +0200 Date: Thu, 27 Jul 2023 12:44:31 +0200
Subject: [PATCH 22/22] QGtk3Theme: Do not default Active WindowText to button Subject: [PATCH 15/15] QGtk3Theme: Do not default Active WindowText to button
foreground foreground
QGtk3Theme uses the GTK button foreground as a default for the QGtk3Theme uses the GTK button foreground as a default for the

View File

@ -1,108 +0,0 @@
From 615966a0e855712898ba92681a08825f4b322e4b Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Thu, 27 Jul 2023 12:38:53 +0200
Subject: [PATCH 16/22] Cleanup QGtk3Theme
1. Remove unused include.
2. Replace unnecessary null checks with asserts.
3. Remove dead code after the cleanup.
---
.../platformthemes/gtk3/qgtk3theme.cpp | 55 ++++---------------
1 file changed, 10 insertions(+), 45 deletions(-)
diff --git a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
index fcd466f768..d3383097fc 100644
--- a/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
+++ b/src/plugins/platformthemes/gtk3/qgtk3theme.cpp
@@ -43,7 +43,6 @@
#include "qpa/qwindowsysteminterface.h"
#include <QGuiApplication>
#include <QVariant>
-#include <QtCore/qregularexpression.h>
#undef signals
#include <gtk/gtk.h>
@@ -187,46 +186,8 @@ QString QGtk3Theme::gtkFontName() const
Qt::Appearance QGtk3Theme::appearance() const
{
- if (m_storage)
- return m_storage->appearance();
- /*
- https://docs.gtk.org/gtk3/running.html
-
- It's possible to set a theme variant after the theme name when using GTK_THEME:
-
- GTK_THEME=Adwaita:dark
-
- Some themes also have "-dark" as part of their name.
-
- We test this environment variable first because the documentation says
- it's mainly used for easy debugging, so it should be possible to use it
- to override any other settings.
- */
- QString themeName = qEnvironmentVariable("GTK_THEME");
- if (!themeName.isEmpty())
- return themeName.contains("dark", Qt::CaseInsensitive)
- ? Qt::Appearance::Dark : Qt::Appearance::Light;
-
- /*
- https://docs.gtk.org/gtk3/property.Settings.gtk-application-prefer-dark-theme.html
-
- This setting controls which theme is used when the theme specified by
- gtk-theme-name provides both light and dark variants. We can save a
- regex check by testing this property first.
- */
- const auto preferDark = gtkSetting<gboolean>("gtk-application-prefer-dark-theme");
- if (preferDark)
- return Qt::Appearance::Dark;
-
- /*
- https://docs.gtk.org/gtk3/property.Settings.gtk-theme-name.html
- */
- themeName = gtkSetting("gtk-theme-name");
- if (!themeName.isEmpty())
- return themeName.contains("dark", Qt::CaseInsensitive)
- ? Qt::Appearance::Dark : Qt::Appearance::Light;
-
- return Qt::Appearance::Unknown;
+ Q_ASSERT(m_storage);
+ return m_storage->appearance();
}
bool QGtk3Theme::usePlatformNativeDialog(DialogType type) const
@@ -284,23 +245,27 @@ bool QGtk3Theme::useNativeFileDialog()
const QPalette *QGtk3Theme::palette(Palette type) const
{
- return m_storage ? m_storage->palette(type) : QPlatformTheme::palette(type);
+ Q_ASSERT(m_storage);
+ return m_storage->palette(type);
}
QPixmap QGtk3Theme::standardPixmap(StandardPixmap sp, const QSizeF &size) const
{
- return m_storage ? m_storage->standardPixmap(sp, size) : QPlatformTheme::standardPixmap(sp, size);
+ Q_ASSERT(m_storage);
+ return m_storage->standardPixmap(sp, size);
}
const QFont *QGtk3Theme::font(Font type) const
{
- return m_storage ? m_storage->font(type) : QGnomeTheme::font(type);
+ Q_ASSERT(m_storage);
+ return m_storage->font(type);
}
QIcon QGtk3Theme::fileIcon(const QFileInfo &fileInfo,
QPlatformTheme::IconOptions iconOptions) const
{
- return m_storage ? m_storage->fileIcon(fileInfo) : QGnomeTheme::fileIcon(fileInfo, iconOptions);
+ Q_ASSERT(m_storage);
+ return m_storage->fileIcon(fileInfo);
}
QT_END_NAMESPACE
--
2.41.0

View File

@ -57,7 +57,7 @@
Name: qt5-qtbase Name: qt5-qtbase
Summary: Qt5 - QtBase components Summary: Qt5 - QtBase components
Version: 5.15.10 Version: 5.15.10
Release: 7%{?dist} Release: 8%{?dist}
# See LGPL_EXCEPTIONS.txt, for exception details # See LGPL_EXCEPTIONS.txt, for exception details
License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0 License: LGPL-3.0-only OR GPL-3.0-only WITH Qt-GPL-exception-1.0
@ -156,27 +156,20 @@ Patch150: 0001-Use-Wayland-by-default-on-GNOME.patch
# https://fedoraproject.org/wiki/Changes/NoCustomQtThemingForWorkstation # https://fedoraproject.org/wiki/Changes/NoCustomQtThemingForWorkstation
# https://bugzilla.redhat.com/show_bug.cgi?id=2226797 # https://bugzilla.redhat.com/show_bug.cgi?id=2226797
Patch151: 0002-Add-QPlatformTheme-Appearance-for-detecting-light-da.patch Patch151: 0002-Add-enum-class-Qt-Appearance.patch
Patch152: 0003-Add-enum-class-Qt-Appearance.patch Patch152: 0003-Sync-and-assert-StandardPixmap-enums-in-QPlatformThe.patch
Patch153: 0004-QGtk3Theme-implement-appearance-function-to-detect-d.patch Patch153: 0004-QGtk3Theme-subscribe-to-theme-hint-changes.patch
Patch154: 0005-Account-for-dark-system-themes-in-qt_fusionPalette.patch Patch154: 0005-Gtk3Theme-set-XCURSOR_SIZE-and-XCURSOR_THEME-for-way.patch
Patch155: 0006-qt_fusionPalette-make-links-more-legible-on-dark-bac.patch Patch155: 0006-Re-implement-palette-standardPixmap-file-icons-fonts.patch
Patch156: 0007-Add-nullptr-check-for-theme-when-initializing-palett.patch Patch156: 0007-GTK3-theme-simplify-code.patch
Patch157: 0008-Replace-QPlatformTheme-Appearance-by-Qt-Appearance.patch Patch157: 0008-Fix-checkbox-and-radiobutton-background-in-QGtk3Them.patch
Patch158: 0009-Sync-and-assert-StandardPixmap-enums-in-QPlatformThe.patch Patch158: 0009-Cleanup-QGtk3Theme.patch
Patch159: 0010-QGtk3Theme-subscribe-to-theme-hint-changes.patch Patch159: 0010-Detect-appearance-by-colors-unless-GTK-theme-name-co.patch
Patch160: 0011-Gtk3Theme-set-XCURSOR_SIZE-and-XCURSOR_THEME-for-way.patch Patch160: 0011-Change-parsing-log-output-in-QGtk3Json-from-qCDebug-.patch
Patch161: 0012-Gtk3-fix-stack-smashing-on-mismatch-between-bool-and.patch Patch161: 0012-Document-QGtk3Interface.patch
Patch162: 0013-Re-implement-palette-standardPixmap-file-icons-fonts.patch Patch162: 0013-Document-QGtk3Storage.patch
Patch163: 0014-GTK3-theme-simplify-code.patch Patch163: 0014-QGtk3Theme-Improve-fixed-font-delivery.patch
Patch164: 0015-Fix-checkbox-and-radiobutton-background-in-QGtk3Them.patch Patch164: 0015-QGtk3Theme-Do-not-default-Active-WindowText-to-butto.patch
Patch165: 0016-Cleanup-QGtk3Theme.patch
Patch166: 0017-Detect-appearance-by-colors-unless-GTK-theme-name-co.patch
Patch167: 0018-Change-parsing-log-output-in-QGtk3Json-from-qCDebug-.patch
Patch168: 0019-Document-QGtk3Interface.patch
Patch169: 0020-Document-QGtk3Storage.patch
Patch170: 0021-QGtk3Theme-Improve-fixed-font-delivery.patch
Patch171: 0022-QGtk3Theme-Do-not-default-Active-WindowText-to-butto.patch
# Latest QGnomePlatform needs to be specified to be used # Latest QGnomePlatform needs to be specified to be used
Patch200: qtbase-use-qgnomeplatform-as-default-platform-theme-on-gnome.patch Patch200: qtbase-use-qgnomeplatform-as-default-platform-theme-on-gnome.patch
@ -478,13 +471,6 @@ Qt5 libraries used for drawing widgets and OpenGL items.
%patch -P162 -p1 %patch -P162 -p1
%patch -P163 -p1 %patch -P163 -p1
%patch -P164 -p1 %patch -P164 -p1
%patch -P165 -p1
%patch -P166 -p1
%patch -P167 -p1
%patch -P168 -p1
%patch -P169 -p1
%patch -P170 -p1
%patch -P171 -p1
%endif %endif
%if 0%{?fedora} < 39 %if 0%{?fedora} < 39
@ -1170,6 +1156,9 @@ fi
%changelog %changelog
* Tue Aug 22 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.10-8
- Drop QPlatformTheme::Appearance() backports breaking ABI
* Mon Aug 21 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.10-7 * Mon Aug 21 2023 Jan Grulich <jgrulich@redhat.com> - 5.15.10-7
- Drop unnecessary backports - Drop unnecessary backports