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