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) {
openSUSE Build Service is sponsored by