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
This commit is contained in:
parent
b248941af5
commit
4b92d656c2
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user