File gsd-speed-xsettings.patch of Package gnome-settings-daemon
diff -u -r a/plugins/xsettings/fontconfig-monitor.c b/plugins/xsettings/fontconfig-monitor.c
--- a/plugins/xsettings/fontconfig-monitor.c 2008-08-18 10:53:17.000000000 +0100
+++ b/plugins/xsettings/fontconfig-monitor.c 2009-01-30 11:40:02.000000000 +0000
@@ -33,6 +33,18 @@
GFileMonitorEvent event_type,
gpointer handle);
+void
+fontconfig_cache_init (void)
+{
+ FcInit ();
+}
+
+gboolean
+fontconfig_cache_update (void)
+{
+ return !FcConfigUptoDate (NULL) && FcInitReinitialize ();
+}
+
static void
monitor_files (GPtrArray *monitors,
FcStrList *list,
@@ -100,7 +112,7 @@
handle->timeout = 0;
- if (!FcConfigUptoDate (NULL) && FcInitReinitialize ()) {
+ if (fontconfig_cache_update ()) {
notify = TRUE;
monitors_free (handle->monitors);
handle->monitors = monitors_create (data);
diff -u -r a/plugins/xsettings//fontconfig-monitor.h b/plugins/xsettings//fontconfig-monitor.h
--- a/plugins/xsettings//fontconfig-monitor.h 2008-08-04 15:25:52.000000000 +0100
+++ b/plugins/xsettings//fontconfig-monitor.h 2009-01-30 11:40:02.000000000 +0000
@@ -25,6 +25,9 @@
G_BEGIN_DECLS
+void fontconfig_cache_init (void);
+gboolean fontconfig_cache_update (void);
+
typedef struct _fontconfig_monitor_handle fontconfig_monitor_handle_t;
fontconfig_monitor_handle_t *
diff -u -r other/plugins/xsettings//gsd-xsettings-manager.c plugins/xsettings//gsd-xsettings-manager.c
--- a/plugins/xsettings/gsd-xsettings-manager.c 2009-01-30 11:47:46.000000000 +0000
+++ b/plugins/xsettings/gsd-xsettings-manager.c 2009-01-30 11:40:02.000000000 +0000
@@ -280,7 +281,6 @@
gconf_value_free (value);
} else {
dpi = get_dpi_from_x_server ();
- dpi = DPI_FALLBACK;
}
return dpi;
@@ -564,6 +566,38 @@
gnome_settings_profile_end (NULL);
}
+static gboolean
+start_fontconfig_monitor_idle_cb (GnomeXSettingsManager *manager)
+{
+ gnome_settings_profile_start (NULL);
+
+ manager->priv->fontconfig_handle = fontconfig_monitor_start ((GFunc) fontconfig_callback, manager);
+
+ gnome_settings_profile_end (NULL);
+
+ return FALSE;
+}
+
+static void
+start_fontconfig_monitor (GnomeXSettingsManager *manager)
+{
+ gnome_settings_profile_start (NULL);
+
+ fontconfig_cache_init ();
+
+ g_idle_add ((GSourceFunc) start_fontconfig_monitor_idle_cb, manager);
+
+ gnome_settings_profile_end (NULL);
+}
+
+static void
+stop_fontconfig_monitor (GnomeXSettingsManager *manager)
+{
+ if (manager->priv->fontconfig_handle) {
+ fontconfig_monitor_stop (manager->priv->fontconfig_handle);
+ manager->priv->fontconfig_handle = NULL;
+ }
+}
#endif /* HAVE_FONTCONFIG */
static const char *
@@ -877,7 +917,7 @@
(GConfClientNotifyFunc) xft_callback);
update_xft_settings (manager, client);
- manager->priv->fontconfig_handle = fontconfig_monitor_start ((GFunc) fontconfig_callback, manager);
+ start_fontconfig_monitor (manager);
#endif /* HAVE_FONTCONFIG */
g_object_unref (client);
@@ -924,8 +964,7 @@
#ifdef HAVE_FONTCONFIG
gconf_client_remove_dir (client, FONT_RENDER_DIR, NULL);
- fontconfig_monitor_stop (manager->priv->fontconfig_handle);
- manager->priv->fontconfig_handle = NULL;
+ stop_fontconfig_monitor (manager);
#endif /* HAVE_FONTCONFIG */
for (i = 0; i < G_N_ELEMENTS (p->notify); ++i) {