6ad7f138fe
Resolves: #2226797
85 lines
3.6 KiB
Diff
85 lines
3.6 KiB
Diff
From 5ad394475f26725d854a0c4c733ffcde8f3bbf15 Mon Sep 17 00:00:00 2001
|
|
From: Jan Grulich <jgrulich@redhat.com>
|
|
Date: Thu, 27 Jul 2023 12:44:11 +0200
|
|
Subject: [PATCH 24/25] QGtk3Theme: Improve fixed font delivery
|
|
|
|
The gtk_fixed widget was used as a reference to obtain a fixed font
|
|
and HeaderViewFont.
|
|
|
|
This is a mistake, because the gtk_fixed widget is a container for
|
|
other widgets with fixed geometries and no layouting.
|
|
|
|
This patch makes the default style being used for a fixed font and, as
|
|
a drive-by, the combo box as a reference for a header view font.
|
|
A monospace based css provider as explicitly added to the style
|
|
context, in case a fixed font is requested. The provider is removed
|
|
afterwards.
|
|
---
|
|
.../platformthemes/gtk3/qgtk3interface.cpp | 24 +++++++++++++++++--
|
|
1 file changed, 22 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/plugins/platformthemes/gtk3/qgtk3interface.cpp b/src/plugins/platformthemes/gtk3/qgtk3interface.cpp
|
|
index 0fab1220b4..21abea81cf 100644
|
|
--- a/src/plugins/platformthemes/gtk3/qgtk3interface.cpp
|
|
+++ b/src/plugins/platformthemes/gtk3/qgtk3interface.cpp
|
|
@@ -18,6 +18,7 @@
|
|
#include <QtCore/QMetaEnum>
|
|
#include <QtCore/QSettings>
|
|
#include <QtCore/QFileInfo>
|
|
+#include <QtCore/QScopeGuard>
|
|
#include <QtGui/QFontDatabase>
|
|
#include <QtGui/QIcon>
|
|
|
|
@@ -538,13 +539,13 @@ inline constexpr QGtk3Interface::QGtkWidget QGtk3Interface::toWidgetType(QPlatfo
|
|
case QPlatformTheme::ToolButtonFont: return QGtkWidget::gtk_button;
|
|
case QPlatformTheme::ItemViewFont: return QGtkWidget::gtk_entry;
|
|
case QPlatformTheme::ListViewFont: return QGtkWidget::gtk_tree_view;
|
|
- case QPlatformTheme::HeaderViewFont: return QGtkWidget::gtk_fixed;
|
|
+ case QPlatformTheme::HeaderViewFont: return QGtkWidget::gtk_combo_box;
|
|
case QPlatformTheme::ListBoxFont: return QGtkWidget::gtk_Default;
|
|
case QPlatformTheme::ComboMenuItemFont: return QGtkWidget::gtk_combo_box;
|
|
case QPlatformTheme::ComboLineEditFont: return QGtkWidget::gtk_combo_box_text;
|
|
case QPlatformTheme::SmallFont: return QGtkWidget::gtk_Default;
|
|
case QPlatformTheme::MiniFont: return QGtkWidget::gtk_Default;
|
|
- case QPlatformTheme::FixedFont: return QGtkWidget::gtk_fixed;
|
|
+ case QPlatformTheme::FixedFont: return QGtkWidget::gtk_Default;
|
|
case QPlatformTheme::GroupBoxTitleFont: return QGtkWidget::gtk_Default;
|
|
case QPlatformTheme::TabButtonFont: return QGtkWidget::gtk_button;
|
|
case QPlatformTheme::EditorFont: return QGtkWidget::gtk_entry;
|
|
@@ -624,6 +625,24 @@ QFont QGtk3Interface::font(QPlatformTheme::Font type) const
|
|
if (!con)
|
|
return QFont();
|
|
|
|
+ // explicitly add provider for fixed font
|
|
+ GtkCssProvider *cssProvider = nullptr;
|
|
+ if (type == QPlatformTheme::FixedFont) {
|
|
+ cssProvider = gtk_css_provider_new();
|
|
+ const char *fontSpec = "{font-family: monospace;}";
|
|
+ gtk_css_provider_load_from_data(cssProvider, fontSpec, -1, NULL);
|
|
+ gtk_style_context_add_provider(con, GTK_STYLE_PROVIDER(cssProvider),
|
|
+ GTK_STYLE_PROVIDER_PRIORITY_USER);
|
|
+ }
|
|
+
|
|
+ // remove monospace provider from style context and unref it
|
|
+ QScopeGuard guard([&](){
|
|
+ if (cssProvider) {
|
|
+ gtk_style_context_remove_provider(con, GTK_STYLE_PROVIDER(cssProvider));
|
|
+ g_object_unref(cssProvider);
|
|
+ }
|
|
+ });
|
|
+
|
|
const PangoFontDescription *gtkFont = gtk_style_context_get_font(con, GTK_STATE_FLAG_NORMAL);
|
|
if (!gtkFont)
|
|
return QFont();
|
|
@@ -650,6 +669,7 @@ QFont QGtk3Interface::font(QPlatformTheme::Font type) const
|
|
font.setFamily("monospace");
|
|
}
|
|
}
|
|
+
|
|
return font;
|
|
}
|
|
|
|
--
|
|
2.41.0
|
|
|