[gedit] View: code refactorings for set_font()
- From: Sébastien Wilmet <swilmet src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gedit] View: code refactorings for set_font()
- Date: Mon, 23 Nov 2020 23:34:26 +0000 (UTC)
commit 6b1e782d97290e5213ebe015b94ef434a75170a2
Author: Sébastien Wilmet <swilmet gnome org>
Date: Tue Nov 24 00:22:07 2020 +0100
View: code refactorings for set_font()
It's not necessary to store the PangoFontDescription in an instance
variable.
gedit/gedit-view.c | 77 +++++++++++++++++++++++++++++-------------------------
1 file changed, 42 insertions(+), 35 deletions(-)
---
diff --git a/gedit/gedit-view.c b/gedit/gedit-view.c
index b4d16a4c4..a15a70c33 100644
--- a/gedit/gedit-view.c
+++ b/gedit/gedit-view.c
@@ -41,7 +41,6 @@ struct _GeditViewPrivate
gchar *direct_save_uri;
GtkCssProvider *css_provider;
- PangoFontDescription *font_desc;
TeplSignalGroup *file_signal_group;
};
@@ -110,7 +109,7 @@ static void
gedit_view_init (GeditView *view)
{
GtkTargetList *target_list;
- GtkStyleContext *context;
+ GtkStyleContext *style_context;
gedit_debug (DEBUG_VIEW);
@@ -144,13 +143,8 @@ gedit_view_init (GeditView *view)
NULL);
/* CSS stuff */
- context = gtk_widget_get_style_context (GTK_WIDGET (view));
- gtk_style_context_add_class (context, "gedit-view");
-
- view->priv->css_provider = gtk_css_provider_new ();
- gtk_style_context_add_provider (context,
- GTK_STYLE_PROVIDER (view->priv->css_provider),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ style_context = gtk_widget_get_style_context (GTK_WIDGET (view));
+ gtk_style_context_add_class (style_context, "gedit-view");
}
static void
@@ -159,6 +153,7 @@ gedit_view_dispose (GObject *object)
GeditView *view = GEDIT_VIEW (object);
g_clear_object (&view->priv->extensions);
+ g_clear_object (&view->priv->css_provider);
tepl_signal_group_clear (&view->priv->file_signal_group);
/* Disconnect notify buffer because the destroy of the textview will set
@@ -169,9 +164,6 @@ gedit_view_dispose (GObject *object)
*/
g_signal_handlers_disconnect_by_func (view, buffer_notify_cb, NULL);
- g_clear_object (&view->priv->css_provider);
- g_clear_pointer (&view->priv->font_desc, pango_font_description_free);
-
G_OBJECT_CLASS (gedit_view_parent_class)->dispose (object);
}
@@ -765,20 +757,42 @@ gedit_view_new (GeditDocument *doc)
}
static void
-update_css_provider (GeditView *view)
+update_css_provider (GeditView *view,
+ const gchar *font_name)
{
- gchar *str;
- gchar *css;
+ GtkStyleContext *style_context;
+ PangoFontDescription *font_description;
+ gchar *css_declarations;
+ gchar *css_rule_set;
+
+ style_context = gtk_widget_get_style_context (GTK_WIDGET (view));
+
+ if (view->priv->css_provider != NULL)
+ {
+ gtk_style_context_remove_provider (style_context,
+ GTK_STYLE_PROVIDER (view->priv->css_provider));
+ g_clear_object (&view->priv->css_provider);
+ }
+
+ g_return_if_fail (font_name != NULL);
+ font_description = pango_font_description_from_string (font_name);
+ g_return_if_fail (font_description != NULL);
- g_assert (GEDIT_IS_VIEW (view));
- g_assert (view->priv->font_desc != NULL);
+ css_declarations = tepl_pango_font_description_to_css (font_description);
+ css_rule_set = g_strdup_printf ("textview {\n"
+ " %s\n"
+ "}\n",
+ css_declarations);
- str = tepl_pango_font_description_to_css (view->priv->font_desc);
- css = g_strdup_printf ("textview { %s }", str ? str : "");
- gtk_css_provider_load_from_data (view->priv->css_provider, css, -1, NULL);
+ view->priv->css_provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_data (view->priv->css_provider, css_rule_set, -1, NULL);
+ gtk_style_context_add_provider (style_context,
+ GTK_STYLE_PROVIDER (view->priv->css_provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
- g_free (css);
- g_free (str);
+ pango_font_description_free (font_description);
+ g_free (css_declarations);
+ g_free (css_rule_set);
}
/*
@@ -799,29 +813,22 @@ _gedit_view_set_font (GeditView *view,
g_return_if_fail (GEDIT_IS_VIEW (view));
- g_clear_pointer (&view->priv->font_desc, pango_font_description_free);
-
if (default_font)
{
GeditSettings *settings;
- gchar *font;
+ gchar *system_font_name;
settings = _gedit_settings_get_singleton ();
- font = gedit_settings_get_system_font (settings);
+ system_font_name = gedit_settings_get_system_font (settings);
+
+ update_css_provider (view, system_font_name);
- view->priv->font_desc = pango_font_description_from_string (font);
- g_free (font);
+ g_free (system_font_name);
}
else
{
- g_return_if_fail (font_name != NULL);
-
- view->priv->font_desc = pango_font_description_from_string (font_name);
+ update_css_provider (view, font_name);
}
-
- g_return_if_fail (view->priv->font_desc != NULL);
-
- update_css_provider (view);
}
/* ex:set ts=8 noet: */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]