--- nautilus-2.13.4/libnautilus-private/nautilus-directory-background.c.no-delays 2006-02-06 15:44:27.000000000 -0500 +++ nautilus-2.13.4/libnautilus-private/nautilus-directory-background.c 2006-02-06 15:52:58.000000000 -0500 @@ -319,15 +319,20 @@ guint notification_timeout_id; background = EEL_BACKGROUND (data); - /* - * Wallpaper capplet changes picture, background color and placement with - * gconf_change_set API, but unfortunately, this operation is not atomic in - * GConf as it should be. So we update background after small timeout to - * let GConf change all values. - */ - notification_timeout_id = g_timeout_add (300, (GSourceFunc) call_settings_changed, background); - g_object_set_data (G_OBJECT (background), "desktop_gconf_notification_timeout", GUINT_TO_POINTER (notification_timeout_id)); + notification_timeout_id = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (background), "desktop_gconf_notification_timeout")); + + if (strcmp (entry->key, "/desktop/gnome/background/stamp") == 0) { + if (notification_timeout_id != 0) + g_source_remove (notification_timeout_id); + + call_settings_changed (background); + } + else if (notification_timeout_id == 0) { + notification_timeout_id = g_timeout_add (300, (GSourceFunc) call_settings_changed, background); + + g_object_set_data (G_OBJECT (background), "desktop_gconf_notification_timeout", GUINT_TO_POINTER (notification_timeout_id)); + } } static void