The attached patch prevents the user from renaming his home or desktop directory. This was only partially implemented before (user could rename home and delete home and desktop). Therefore, the attached patch also fixes bug 310414 [1]. [1] http://bugzilla.gnome.org/show_bug.cgi?id=310414 -- Christian Neumair <chris gnome-de org>
Index: libnautilus-private/nautilus-file.c =================================================================== RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-file.c,v retrieving revision 1.369 diff -u -p -r1.369 nautilus-file.c --- libnautilus-private/nautilus-file.c 12 Aug 2005 18:11:29 -0000 1.369 +++ libnautilus-private/nautilus-file.c 14 Aug 2005 18:26:07 -0000 @@ -809,8 +809,17 @@ nautilus_file_can_execute (NautilusFile GNOME_VFS_PERM_OTHER_EXEC); } -static gboolean -file_is_desktop (NautilusFile *file) +/** + * nautilus_file_is_desktop_directory: + * + * Check whether this file is the desktop directory. + * + * @file: The file to check. + * + * Return value: TRUE if this is the physical desktop directory. + */ +gboolean +nautilus_file_is_desktop_directory (NautilusFile *file) { GnomeVFSURI *dir_vfs_uri; @@ -875,7 +884,9 @@ nautilus_file_can_rename (NautilusFile * return FALSE; } - if ((is_desktop_file (file) && !can_rename_desktop_file (file)) || file_is_desktop (file)) { + if ((is_desktop_file (file) && !can_rename_desktop_file (file)) || + nautilus_file_is_desktop_directory (file) || + nautilus_file_is_home (file)) { return FALSE; } @@ -1906,7 +1917,7 @@ prepend_automatic_emblem_names (Nautilus (names, g_strdup (NAUTILUS_FILE_EMBLEM_NAME_TRASH)); } #endif - if (file_is_desktop (file)) { + if (nautilus_file_is_desktop_directory (file)) { names = g_list_prepend (names, g_strdup (NAUTILUS_FILE_EMBLEM_NAME_DESKTOP)); } Index: libnautilus-private/nautilus-file.h =================================================================== RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-file.h,v retrieving revision 1.105 diff -u -p -r1.105 nautilus-file.h --- libnautilus-private/nautilus-file.h 11 Oct 2004 12:55:13 -0000 1.105 +++ libnautilus-private/nautilus-file.h 14 Aug 2005 18:26:07 -0000 @@ -154,6 +154,7 @@ gboolean nautilus_file_is gboolean nautilus_file_is_in_trash (NautilusFile *file); gboolean nautilus_file_is_in_desktop (NautilusFile *file); gboolean nautilus_file_is_home (NautilusFile *file); +gboolean nautilus_file_is_desktop_directory (NautilusFile *file); GnomeVFSResult nautilus_file_get_file_info_result (NautilusFile *file); gboolean nautilus_file_get_directory_item_count (NautilusFile *file, guint *count, Index: src/file-manager/fm-directory-view.c =================================================================== RCS file: /cvs/gnome/nautilus/src/file-manager/fm-directory-view.c,v retrieving revision 1.703 diff -u -p -r1.703 fm-directory-view.c --- src/file-manager/fm-directory-view.c 1 Aug 2005 22:08:55 -0000 1.703 +++ src/file-manager/fm-directory-view.c 14 Aug 2005 18:26:13 -0000 @@ -3228,6 +3228,41 @@ special_link_in_selection (FMDirectoryVi return saw_link; } +/* desktop_or_home_dir_in_selection + * + * Return TRUE if either the desktop or the home directory is in the selection. + */ + +static gboolean +desktop_or_home_dir_in_selection (FMDirectoryView *view) +{ + gboolean saw_desktop_or_home_dir; + GList *selection, *node; + NautilusFile *file; + + g_return_val_if_fail (FM_IS_DIRECTORY_VIEW (view), FALSE); + + saw_desktop_or_home_dir = FALSE; + + selection = fm_directory_view_get_selection (FM_DIRECTORY_VIEW (view)); + + for (node = selection; node != NULL; node = node->next) { + file = NAUTILUS_FILE (node->data); + + saw_desktop_or_home_dir = + nautilus_file_is_home (file) + || nautilus_file_is_desktop_directory (file); + + if (saw_desktop_or_home_dir) { + break; + } + } + + nautilus_file_list_free (selection); + + return saw_desktop_or_home_dir; +} + static gboolean can_move_uri_to_trash (FMDirectoryView *view, const char *file_uri_string) { @@ -6640,6 +6675,7 @@ real_update_menus (FMDirectoryView *view const char *tip, *label; char *label_with_underscore; gboolean selection_contains_special_link; + gboolean selection_contains_desktop_or_home_dir; gboolean is_read_only; gboolean can_create_files; gboolean can_delete_files; @@ -6657,12 +6693,14 @@ real_update_menus (FMDirectoryView *view selection_count = g_list_length (selection); selection_contains_special_link = special_link_in_selection (view); + selection_contains_desktop_or_home_dir = desktop_or_home_dir_in_selection (view); is_read_only = fm_directory_view_is_read_only (view); can_create_files = fm_directory_view_supports_creating_files (view); can_delete_files = !is_read_only && selection_count != 0 - && !selection_contains_special_link; + && !selection_contains_special_link + && !selection_contains_desktop_or_home_dir; can_copy_files = selection_count != 0 && !selection_contains_special_link;
Attachment:
signature.asc
Description: This is a digitally signed message part