From c6df17577ab3ee8ffebec049ddf580f486f356c8 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Mon, 4 May 2015 13:25:27 +0100 Subject: [PATCH] fontchooser: Use gtk-fontconfig-timestamp setting We can use the GtkSettings:gtk-fontconfig-timestamp property to decide whether or not we should reload fonts on style and screen changes. This should avoid doing a lot of work with large font collections when only the theme has changed. https://bugzilla.gnome.org/show_bug.cgi?id=748782 --- gtk/gtkfontchooserwidget.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/gtk/gtkfontchooserwidget.c b/gtk/gtkfontchooserwidget.c index 5fc82b264a..9e22fbc277 100644 --- a/gtk/gtkfontchooserwidget.c +++ b/gtk/gtkfontchooserwidget.c @@ -95,6 +95,8 @@ struct _GtkFontChooserWidgetPrivate GtkFontFilterFunc filter_func; gpointer filter_data; GDestroyNotify filter_data_destroy; + + guint last_fontconfig_timestamp; }; /* This is the initial fixed height and the top padding of the preview entry */ @@ -633,6 +635,21 @@ gtk_font_chooser_widget_load_fonts (GtkFontChooserWidget *fontchooser) gint n_families, i; PangoFontFamily **families; gchar *family_and_face; + guint fontconfig_timestamp; + + g_object_get (gtk_widget_get_settings (GTK_WIDGET (fontchooser)), + "gtk-fontconfig-timestamp", &fontconfig_timestamp, + NULL); + + /* The fontconfig timestamp is only set on systems with fontconfig; every + * other platform will set it to 0. For those systems, we fall back to + * reloading the fonts every time. + */ + if (fontconfig_timestamp != 0 && + priv->last_fontconfig_timestamp == fontconfig_timestamp) + return; + + priv->last_fontconfig_timestamp = fontconfig_timestamp; list_store = GTK_LIST_STORE (priv->model);