Add missing patches

Resolves: bz#1968290
This commit is contained in:
Jan Grulich 2021-08-26 08:19:15 +02:00
parent 9814303749
commit 7187c09f46
2 changed files with 254 additions and 0 deletions

View File

@ -0,0 +1,205 @@
From 221995e661a19053d6288ef5279bd5502d0f4c17 Mon Sep 17 00:00:00 2001
From: Jan Grulich <jgrulich@redhat.com>
Date: Tue, 24 Aug 2021 13:30:26 +0200
Subject: [PATCH] Add some additional support for HighContrast variants of
Adwaita theme
---
CMakeLists.txt | 2 +-
src/common/gnomesettings.cpp | 28 ++++++++++++++++++---
src/common/gnomesettings.h | 1 +
src/common/gnomesettings_p.h | 2 ++
src/decoration/qgnomeplatformdecoration.cpp | 14 +++++++----
src/decoration/qgnomeplatformdecoration.h | 4 +++
6 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a2f9452..e6a9486 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,7 +20,7 @@ find_package(Qt5Gui ${QT_MIN_VERSION} CONFIG REQUIRED Private)
find_package(Qt5ThemeSupport REQUIRED)
find_package(GSettingSchemas REQUIRED)
-find_package(AdwaitaQt "1.3.0" REQUIRED)
+find_package(AdwaitaQt "1.4.0" REQUIRED)
find_package(PkgConfig REQUIRED)
pkg_check_modules(GTK+3 REQUIRED IMPORTED_TARGET gtk+-3.0)
diff --git a/src/common/gnomesettings.cpp b/src/common/gnomesettings.cpp
index e35fb85..717cc9b 100644
--- a/src/common/gnomesettings.cpp
+++ b/src/common/gnomesettings.cpp
@@ -102,6 +102,11 @@ bool GnomeSettings::isGtkThemeDarkVariant()
return gnomeSettingsGlobal->isGtkThemeDarkVariant();
}
+bool GnomeSettings::isGtkThemeHighContrastVariant()
+{
+ return gnomeSettingsGlobal->isGtkThemeHighContrastVariant();
+}
+
QString GnomeSettings::gtkTheme()
{
return gnomeSettingsGlobal->gtkTheme();
@@ -210,7 +215,11 @@ GnomeSettingsPrivate::GnomeSettingsPrivate(QObject *parent)
loadTheme();
loadTitlebar();
- m_palette = new QPalette(Adwaita::Colors::palette(m_gtkThemeDarkVariant ? Adwaita::ColorVariant::AdwaitaDark : Adwaita::ColorVariant::Adwaita));
+ if (m_gtkThemeHighContrastVariant) {
+ m_palette = new QPalette(Adwaita::Colors::palette(m_gtkThemeDarkVariant ? Adwaita::ColorVariant::AdwaitaHighcontrastInverse : Adwaita::ColorVariant::AdwaitaHighcontrast));
+ } else {
+ m_palette = new QPalette(Adwaita::Colors::palette(m_gtkThemeDarkVariant ? Adwaita::ColorVariant::AdwaitaDark : Adwaita::ColorVariant::Adwaita));
+ }
if (m_canUseFileChooserPortal) {
QTimer::singleShot(0, this, [this] () {
@@ -290,6 +299,11 @@ bool GnomeSettingsPrivate::isGtkThemeDarkVariant() const
return m_gtkThemeDarkVariant;
}
+bool GnomeSettingsPrivate::isGtkThemeHighContrastVariant() const
+{
+ return m_gtkThemeHighContrastVariant;
+}
+
QString GnomeSettingsPrivate::gtkTheme() const
{
return QString(m_gtkTheme);
@@ -472,7 +486,11 @@ void GnomeSettingsPrivate::loadTheme()
} else {
qCDebug(QGnomePlatform) << "Theme name: " << m_gtkTheme;
- if (m_gtkTheme.toLower().contains("-dark")) {
+ if (m_gtkTheme.toLower().startsWith("highcontrast")) {
+ m_gtkThemeHighContrastVariant = true;
+ }
+
+ if (m_gtkTheme.toLower().contains("-dark") || m_gtkTheme.toLower().endsWith("inverse")) {
m_gtkThemeDarkVariant = true;
}
@@ -481,7 +499,11 @@ void GnomeSettingsPrivate::loadTheme()
} else {
qCDebug(QGnomePlatform) << "Theme name: " << styleOverride;
- if (styleOverride.toLower().contains("-dark")) {
+ if (styleOverride.toLower().startsWith("highcontrast")) {
+ m_gtkThemeHighContrastVariant = true;
+ }
+
+ if (styleOverride.toLower().contains("-dark") || styleOverride.toLower().endsWith("inverse")) {
m_gtkThemeDarkVariant = true;
}
diff --git a/src/common/gnomesettings.h b/src/common/gnomesettings.h
index 1719e8b..c186eae 100644
--- a/src/common/gnomesettings.h
+++ b/src/common/gnomesettings.h
@@ -54,6 +54,7 @@ public:
static QVariant hint(QPlatformTheme::ThemeHint hint);
static bool canUseFileChooserPortal();
static bool isGtkThemeDarkVariant();
+ static bool isGtkThemeHighContrastVariant();
static QString gtkTheme();
static TitlebarButtons titlebarButtons();
static TitlebarButtonsPlacement titlebarButtonPlacement();
diff --git a/src/common/gnomesettings_p.h b/src/common/gnomesettings_p.h
index b5c1ebc..b268398 100644
--- a/src/common/gnomesettings_p.h
+++ b/src/common/gnomesettings_p.h
@@ -50,6 +50,7 @@ public:
QPalette *palette() const;
bool canUseFileChooserPortal() const;
bool isGtkThemeDarkVariant() const;
+ bool isGtkThemeHighContrastVariant() const;
QString gtkTheme() const;
QVariant hint(QPlatformTheme::ThemeHint hint) const;
TitlebarButtons titlebarButtons() const;
@@ -80,6 +81,7 @@ private:
bool m_usePortal;
bool m_canUseFileChooserPortal = false;
bool m_gtkThemeDarkVariant = false;
+ bool m_gtkThemeHighContrastVariant = false;
TitlebarButtons m_titlebarButtons = TitlebarButton::CloseButton;
TitlebarButtonsPlacement m_titlebarButtonPlacement = TitlebarButtonsPlacement::RightPlacement;
QString m_gtkTheme = nullptr;
diff --git a/src/decoration/qgnomeplatformdecoration.cpp b/src/decoration/qgnomeplatformdecoration.cpp
index 1129b4f..f6c95bb 100644
--- a/src/decoration/qgnomeplatformdecoration.cpp
+++ b/src/decoration/qgnomeplatformdecoration.cpp
@@ -43,7 +43,6 @@
#include "gnomesettings.h"
-#include <AdwaitaQt/adwaitacolors.h>
#include <AdwaitaQt/adwaitarenderer.h>
#include <QtGui/QColor>
@@ -87,7 +86,12 @@ QGnomePlatformDecoration::QGnomePlatformDecoration()
// Colors
// TODO: move colors used for decorations to Adwaita-qt
const bool darkVariant = GnomeSettings::isGtkThemeDarkVariant();
- const QPalette &palette(Adwaita::Colors::palette(darkVariant ? Adwaita::ColorVariant::AdwaitaDark : Adwaita::ColorVariant::Adwaita));
+ const bool highContrastVariant = GnomeSettings::isGtkThemeHighContrastVariant();
+
+ m_adwaitaVariant = darkVariant ? highContrastVariant ? Adwaita::ColorVariant::AdwaitaHighcontrastInverse : Adwaita::ColorVariant::AdwaitaDark :
+ highContrastVariant ? Adwaita::ColorVariant::AdwaitaHighcontrast : Adwaita::ColorVariant::Adwaita;
+
+ const QPalette &palette(Adwaita::Colors::palette(m_adwaitaVariant));
m_foregroundColor = palette.color(QPalette::Active, QPalette::Foreground);
m_foregroundInactiveColor = palette.color(QPalette::Inactive, QPalette::Foreground);
@@ -500,7 +504,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
Adwaita::StyleOptions styleOptions(&p, buttonRect);
styleOptions.setMouseOver(true);
styleOptions.setSunken(m_clicking == Button::Close);
- styleOptions.setColorVariant(GnomeSettings::isGtkThemeDarkVariant() ? Adwaita::ColorVariant::AdwaitaDark : Adwaita::ColorVariant::Adwaita);
+ styleOptions.setColorVariant(m_adwaitaVariant);
styleOptions.setColor(Adwaita::Colors::buttonBackgroundColor(styleOptions));
styleOptions.setOutlineColor(Adwaita::Colors::buttonOutlineColor(styleOptions));
Adwaita::Renderer::renderFlatRoundedButtonFrame(styleOptions);
@@ -516,7 +520,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
Adwaita::StyleOptions styleOptions(&p, buttonRect);
styleOptions.setMouseOver(true);
styleOptions.setSunken(m_clicking == Button::Maximize || m_clicking == Button::Restore);
- styleOptions.setColorVariant(GnomeSettings::isGtkThemeDarkVariant() ? Adwaita::ColorVariant::AdwaitaDark : Adwaita::ColorVariant::Adwaita);
+ styleOptions.setColorVariant(m_adwaitaVariant);
styleOptions.setColor(Adwaita::Colors::buttonBackgroundColor(styleOptions));
styleOptions.setOutlineColor(Adwaita::Colors::buttonOutlineColor(styleOptions));
Adwaita::Renderer::renderFlatRoundedButtonFrame(styleOptions);
@@ -534,7 +538,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
Adwaita::StyleOptions styleOptions(&p, buttonRect);
styleOptions.setMouseOver(true);
styleOptions.setSunken(m_clicking == Button::Minimize);
- styleOptions.setColorVariant(GnomeSettings::isGtkThemeDarkVariant() ? Adwaita::ColorVariant::AdwaitaDark : Adwaita::ColorVariant::Adwaita);
+ styleOptions.setColorVariant(m_adwaitaVariant);
styleOptions.setColor(Adwaita::Colors::buttonBackgroundColor(styleOptions));
styleOptions.setOutlineColor(Adwaita::Colors::buttonOutlineColor(styleOptions));
Adwaita::Renderer::renderFlatRoundedButtonFrame(styleOptions);
diff --git a/src/decoration/qgnomeplatformdecoration.h b/src/decoration/qgnomeplatformdecoration.h
index 4fdcdae..f95e313 100644
--- a/src/decoration/qgnomeplatformdecoration.h
+++ b/src/decoration/qgnomeplatformdecoration.h
@@ -22,6 +22,8 @@
#include <QtWaylandClient/private/qwaylandabstractdecoration_p.h>
+#include <AdwaitaQt/adwaitacolors.h>
+
#include <QtGlobal>
#include <QDateTime>
@@ -92,6 +94,8 @@ private:
// Shadows
QPixmap m_shadowPixmap;
+
+ Adwaita::ColorVariant m_adwaitaVariant;
};
--
2.31.1

View File

@ -0,0 +1,49 @@
diff --git a/src/decoration/qgnomeplatformdecoration.cpp b/src/decoration/qgnomeplatformdecoration.cpp
index 1129b4f..be4ac21 100644
--- a/src/decoration/qgnomeplatformdecoration.cpp
+++ b/src/decoration/qgnomeplatformdecoration.cpp
@@ -178,7 +178,7 @@ QMargins QGnomePlatformDecoration::margins(MarginsType marginsType) const
#else
QMargins QGnomePlatformDecoration::margins() const
{
- if ((window()->windowStates() & Qt::WindowMaximized)) {
+ if ((waylandWindow()->windowStates() & Qt::WindowMaximized)) {
return QMargins(0, TITLEBAR_HEIGHT, 0, 0);
}
@@ -371,7 +371,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
// * *
// ********************************
QPainterPath borderRect;
- if (!(window()->windowStates() & Qt::WindowMaximized)) {
+ if (!(waylandWindow()->windowStates() & Qt::WindowMaximized)) {
borderRect.addRoundedRect(0, 0, surfaceRect.width(), margins().top() + 8, 10, 10);
p.fillPath(borderRect.simplified(), borderColor);
}
@@ -389,7 +389,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
// * *
// ********************************
QPainterPath roundedRect;
- if ((window()->windowStates() & Qt::WindowMaximized)) {
+ if ((waylandWindow()->windowStates() & Qt::WindowMaximized)) {
roundedRect.addRect(0, 0, surfaceRect.width(), margins().top() + 8);
} else {
roundedRect.addRoundedRect(WINDOW_BORDER_WIDTH, WINDOW_BORDER_WIDTH, surfaceRect.width() - margins().left() - margins().right(), margins().top() + 8, 8, 8);
@@ -412,7 +412,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
// *| |*
// *------------------------------*
// ********************************
- if (!(window()->windowStates() & Qt::WindowMaximized)) {
+ if (!(waylandWindow()->windowStates() & Qt::WindowMaximized)) {
QPainterPath borderPath;
// Left
borderPath.addRect(0, margins().top(), margins().left(), surfaceRect.height() - margins().top() - WINDOW_BORDER_WIDTH);
@@ -522,7 +522,7 @@ void QGnomePlatformDecoration::paint(QPaintDevice *device)
Adwaita::Renderer::renderFlatRoundedButtonFrame(styleOptions);
}
decorationButtonStyle.setRect(QRect(static_cast<int>(rect.x()) + (BUTTON_WIDTH / 4), static_cast<int>(rect.y()) + (BUTTON_WIDTH / 4), BUTTON_WIDTH / 2, BUTTON_WIDTH / 2));
- const Adwaita::ButtonType buttonType = (window()->windowStates() & Qt::WindowMaximized) ? Adwaita::ButtonType::ButtonRestore : Adwaita::ButtonType::ButtonMaximize;
+ const Adwaita::ButtonType buttonType = (waylandWindow()->windowStates() & Qt::WindowMaximized) ? Adwaita::ButtonType::ButtonRestore : Adwaita::ButtonType::ButtonMaximize;
Adwaita::Renderer::renderDecorationButton(decorationButtonStyle, buttonType);
}