Sophie

Sophie

distrib > Mandriva > 2011.0 > i586 > by-pkgid > a6cf605bd2a7b4eec3aaa60c783169bb > files > 8

nautilus-2.32.2.1-2.src.rpm

diff -p -up nautilus-2.23.5/libnautilus-private/nautilus-file-utilities.c.defaultdesktop nautilus-2.23.5/libnautilus-private/nautilus-file-utilities.c
--- nautilus-2.23.5/libnautilus-private/nautilus-file-utilities.c.defaultdesktop	2008-07-08 22:24:22.000000000 +0200
+++ nautilus-2.23.5/libnautilus-private/nautilus-file-utilities.c	2008-07-22 09:12:15.000000000 +0200
@@ -82,6 +82,104 @@ nautilus_compute_title_for_location (GFi
 }
 
 
+static void create_default_desktop_from_directory (const char *default_directory, GFile *desktop_directory)
+{
+        GFile *default_directory_file, *source_file, *destination_file;
+  	GFileEnumerator* enumerator;
+  	GFileInfo* file_info;
+  	const char * filename;
+        const char *attrs = G_FILE_ATTRIBUTE_STANDARD_NAME "," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE;
+        GError *error = NULL;
+  	
+  	/* Create default services icon on the desktop */
+   	default_directory_file = g_file_new_for_path (default_directory);
+
+        enumerator = g_file_enumerate_children (default_directory_file,attrs, G_FILE_QUERY_INFO_NONE, NULL, &error);
+
+        if (error) {
+                g_error_free (error);
+                error = NULL;
+        }
+
+        if (!enumerator) {
+                g_object_unref (default_directory_file);
+                return;
+        }
+
+  	while ((file_info = g_file_enumerator_next_file (enumerator, NULL, NULL)) != NULL) {
+                filename = g_file_info_get_name (file_info);
+  		if (g_content_type_equals ("application/x-desktop", g_file_info_get_content_type (file_info)) 
+  		    || strcmp (filename, ".nautilus-metafile.xml") == 0) {
+                        source_file = g_file_get_child (default_directory_file, filename);
+                        destination_file = g_file_get_child (desktop_directory, filename);
+                        if (!g_file_copy (source_file, destination_file, G_FILE_COPY_NONE, NULL, NULL, NULL, &error)) {
+                                if (error) {
+          				g_warning ("Failed to copy %s to user desktop : %s\n",filename, error->message);
+                                        g_error_free (error);
+                                        error = NULL;
+                                }
+                                else {
+          				g_warning ("Failed to copy %s to user desktop\n",filename);
+                                }
+                        }
+                        g_object_unref (source_file);
+                        g_object_unref (destination_file);
+  		}
+                g_object_unref (file_info);
+  	}
+        g_object_unref (default_directory_file);
+}
+
+
+static char * get_desktop_path (void);
+
+static void create_default_desktop ()
+{
+        char *product_id;
+	char *desktop_directory;
+	GFile* desktop_file;
+
+	if (eel_preferences_get_boolean (NAUTILUS_PREFERENCES_DESKTOP_IS_HOME_DIR))
+		return;
+
+	desktop_directory = get_desktop_path ();
+	if (!g_file_test (desktop_directory, G_FILE_TEST_EXISTS)) {
+		g_free (desktop_directory);
+		return;
+	}
+
+	desktop_file = g_file_new_for_path (desktop_directory);
+	g_free (desktop_directory);
+       
+	create_default_desktop_from_directory (NAUTILUS_DATADIR "/default-desktop/", desktop_file);
+
+	if (g_file_get_contents ("/etc/product.id", &product_id, NULL, NULL)) {
+
+		char *product, *target;
+
+		product = strstr(product_id, "product=");
+		if (product) {
+			char *c;
+			product += strlen("product=");
+			c = strpbrk(product, " ,\n"); 
+			if (c) *c = '\0';
+		}
+
+		target = g_ascii_strdown (product, -1);
+
+		product = g_strconcat( "/usr/share/mdk/desktop/", target, "/", NULL); 
+
+		g_free (target);
+
+		create_default_desktop_from_directory (product, desktop_file);
+		g_free (product);
+
+	}
+
+	g_free (product_id);
+	g_object_unref (desktop_file);
+}
+
 /**
  * nautilus_get_user_directory:
  * 
@@ -100,6 +198,7 @@ nautilus_get_user_directory (void)
 	
 	if (!g_file_test (user_directory, G_FILE_TEST_EXISTS)) {
 		g_mkdir (user_directory, DEFAULT_NAUTILUS_DIRECTORY_MODE);
+		create_default_desktop ();
 		/* FIXME bugzilla.gnome.org 41286: 
 		 * How should we handle the case where this mkdir fails? 
 		 * Note that nautilus_application_startup will refuse to launch if this 
@@ -432,6 +531,7 @@ nautilus_get_desktop_directory (void)
 	if (!eel_preferences_get_boolean (NAUTILUS_PREFERENCES_DESKTOP_IS_HOME_DIR)) {
 		if (!g_file_test (desktop_directory, G_FILE_TEST_EXISTS)) {
 			g_mkdir (desktop_directory, DEFAULT_DESKTOP_DIRECTORY_MODE);
+			create_default_desktop ();
 			/* FIXME bugzilla.gnome.org 41286: 
 			 * How should we handle the case where this mkdir fails? 
 			 * Note that nautilus_application_startup will refuse to launch if this