[clutter] settings: Don't reload config for fontconfig if there's no fontmap
- From: Neil Roberts <nroberts src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [clutter] settings: Don't reload config for fontconfig if there's no fontmap
- Date: Wed, 13 Feb 2013 17:02:18 +0000 (UTC)
commit 4b92d656c2b63570b91105f05b863c4efed32134
Author: Neil Roberts <neil linux intel com>
Date: Wed Feb 13 14:58:55 2013 +0000
settings: Don't reload config for fontconfig if there's no fontmap
If anything in the system changes the config for fontconfig then an
XSetting will be set to record the last timestamp of the config file.
This is presumably so that applications can be notified that it has
changed and can reload the configuration. However once this setting is
set it will remain set for the lifetime of the X server. This causes
Clutter to handle the setting during the initialisation of the
backend. Previously this would cause problems because Clutter would
end up creating the default PangoFontMap before the backend has
created the CoglContext. The PangoFontMap would in turn cause the
default CoglContext to be created. Clutter will then later create its
own CoglContext which means there will be two and the first one will
be leaked. Cogl currently can't really cope with multiple contexts
being created so it falls apart.
This patch fixes it to skip reloading the config for fontconfig if
there isn't a default font map yet. The config will presumably
naturally be read with the latest values when it is finally created
anyway so it doesn't need to be read immediately.
https://bugzilla.gnome.org/show_bug.cgi?id=693696
clutter/clutter-settings.c | 22 +++++++++++++++-------
1 files changed, 15 insertions(+), 7 deletions(-)
---
diff --git a/clutter/clutter-settings.c b/clutter/clutter-settings.c
index 45d4f29..55a155b 100644
--- a/clutter/clutter-settings.c
+++ b/clutter/clutter-settings.c
@@ -216,18 +216,26 @@ settings_update_fontmap (ClutterSettings *self,
if (self->last_fontconfig_timestamp != stamp)
{
- PangoFontMap *fontmap;
+ ClutterMainContext *context;
gboolean update_needed = FALSE;
- fontmap = clutter_get_font_map ();
+ context = _clutter_context_get_default ();
- if (PANGO_IS_FC_FONT_MAP (fontmap) &&
- !FcConfigUptoDate (NULL))
+ /* If there is no font map yet then we don't need to do anything
+ * because the config for fontconfig will be read when it is
+ * created */
+ if (context->font_map)
{
- pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (fontmap));
+ PangoFontMap *fontmap = PANGO_FONT_MAP (context->font_map);
- if (FcInitReinitialize ())
- update_needed = TRUE;
+ if (PANGO_IS_FC_FONT_MAP (fontmap) &&
+ !FcConfigUptoDate (NULL))
+ {
+ pango_fc_font_map_cache_clear (PANGO_FC_FONT_MAP (fontmap));
+
+ if (FcInitReinitialize ())
+ update_needed = TRUE;
+ }
}
self->last_fontconfig_timestamp = stamp;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]