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