mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-09-20 08:11:56 +00:00
Fixed bug 2120 (Shouldn't be able to create new files in
search view) and most of bug 2916 (Shouldn't be able to create new files in Trash). Also fixed the more general but unreported bug: Shouldn't be able to create new files in read-only directories. * src/file-manager/fm-directory-view.h, * src/file-manager/fm-directory-view.c: (fm_directory_view_is_read_only): New function, overridable via function pointer, that reports whether the contents of a directory view are entirely read-only. (fm_directory_view_real_is_read_only): Default implementation of is_read_only, checks the permissions of the model NautilusDirectory. (fm_directory_view_supports_creating_files): New function, overridable via function pointer, that reports whether a directory supports creating new files inside it (fm_directory_view_real_supports_creating_files): Default implementation of supports_creating_files, returns TRUE unless is_read_only is true or the displayed directory is in the trash. The remaining part of bug 2916 is that the NautilusFile for "trash:" doesn't think it's in the trash. (fm_directory_view_initialize_class): Wire up default function pointers. (compute_menu_item_info): Make sensitivity of "Move to Trash" depend on is_read_only; make sensitivity of "New Folder", "Duplicate", and "Create Link" depend on supports_creating_files. (fm_directory_view_real_update_menus): Add "New Folder" to the set of dynamic ones. (get_directory_as_file): New helper function to get a NautilusFile object for the displayed directory. (showing_trash_directory): New helper function to check whether the displayed directory is trash. * src/file-manager/fm-icon-view.c: (get_stored_icon_position_callback): Removed call to fm_directory_view_get_model whose result was not used. (tighter_layout_callback): Removed an unnecessary cast. * src/file-manager/fm-search-list-view.c: (real_supports_creating_files): Overridden to return FALSE. (fm_search_list_view_initialize_class): Wire up overridden function pointer.
This commit is contained in:
parent
8979b1d73e
commit
107c02e452
47
ChangeLog
47
ChangeLog
|
@ -1,9 +1,54 @@
|
|||
2000-09-08 John Sullivan <sullivan@eazel.com>
|
||||
|
||||
Fixed bug 2120 (Shouldn't be able to create new files in
|
||||
search view) and most of bug 2916 (Shouldn't be able to
|
||||
create new files in Trash). Also fixed the more general
|
||||
but unreported bug: Shouldn't be able to create new
|
||||
files in read-only directories.
|
||||
|
||||
* src/file-manager/fm-directory-view.h,
|
||||
* src/file-manager/fm-directory-view.c:
|
||||
(fm_directory_view_is_read_only): New function, overridable via
|
||||
function pointer, that reports whether the contents of a
|
||||
directory view are entirely read-only.
|
||||
(fm_directory_view_real_is_read_only): Default implementation of
|
||||
is_read_only, checks the permissions of the model NautilusDirectory.
|
||||
(fm_directory_view_supports_creating_files): New function,
|
||||
overridable via function pointer, that reports whether a
|
||||
directory supports creating new files inside it
|
||||
(fm_directory_view_real_supports_creating_files): Default
|
||||
implementation of supports_creating_files, returns TRUE unless
|
||||
is_read_only is true or the displayed directory is in the trash.
|
||||
The remaining part of bug 2916 is that the NautilusFile for
|
||||
"trash:" doesn't think it's in the trash.
|
||||
(fm_directory_view_initialize_class): Wire up default function
|
||||
pointers.
|
||||
(compute_menu_item_info): Make sensitivity of "Move to Trash"
|
||||
depend on is_read_only; make sensitivity of "New Folder",
|
||||
"Duplicate", and "Create Link" depend on supports_creating_files.
|
||||
(fm_directory_view_real_update_menus): Add "New Folder" to the
|
||||
set of dynamic ones.
|
||||
(get_directory_as_file): New helper function to get a NautilusFile
|
||||
object for the displayed directory.
|
||||
(showing_trash_directory): New helper function to check whether
|
||||
the displayed directory is trash.
|
||||
|
||||
* src/file-manager/fm-icon-view.c:
|
||||
(get_stored_icon_position_callback): Removed call to
|
||||
fm_directory_view_get_model whose result was not used.
|
||||
(tighter_layout_callback): Removed an unnecessary cast.
|
||||
|
||||
* src/file-manager/fm-search-list-view.c:
|
||||
(real_supports_creating_files): Overridden to return FALSE.
|
||||
(fm_search_list_view_initialize_class): Wire up overridden
|
||||
function pointer.
|
||||
|
||||
2000-09-08 Josh Barrow <linuxfan@ionet.net>
|
||||
|
||||
* components/hardware/nautilus-hardware-view.c: (setup_form_title),
|
||||
(setup_overview_form), (setup_CPU_form), (setup_RAM_form),
|
||||
(setup_IDE_form):
|
||||
Change all text to aa text using nautilus_label and it's friends.
|
||||
Change all text to aa text using nautilus_label and its friends.
|
||||
|
||||
2000-09-08 Andy Hertzfeld <andy@eazel.com>
|
||||
|
||||
|
|
|
@ -144,8 +144,10 @@ static void fm_directory_view_real_create_selection_context_menu_items
|
|||
GList *files);
|
||||
static void fm_directory_view_real_merge_menus (FMDirectoryView *view);
|
||||
static void fm_directory_view_real_update_menus (FMDirectoryView *view);
|
||||
static gboolean fm_directory_view_real_supports_properties (FMDirectoryView *view);
|
||||
static gboolean fm_directory_view_real_is_read_only (FMDirectoryView *view);
|
||||
static gboolean fm_directory_view_real_supports_creating_files (FMDirectoryView *view);
|
||||
static gboolean fm_directory_view_real_supports_zooming (FMDirectoryView *view);
|
||||
static gboolean fm_directory_view_real_supports_properties (FMDirectoryView *view);
|
||||
static GtkMenu * create_selection_context_menu (FMDirectoryView *view);
|
||||
static GtkMenu * create_background_context_menu (FMDirectoryView *view);
|
||||
static BonoboControl *get_bonobo_control (FMDirectoryView *view);
|
||||
|
@ -282,8 +284,10 @@ fm_directory_view_initialize_class (FMDirectoryViewClass *klass)
|
|||
klass->get_required_metadata_keys = get_required_metadata_keys;
|
||||
klass->get_emblem_names_to_exclude = real_get_emblem_names_to_exclude;
|
||||
klass->start_renaming_item = start_renaming_item;
|
||||
klass->supports_properties = fm_directory_view_real_supports_properties;
|
||||
klass->is_read_only = fm_directory_view_real_is_read_only;
|
||||
klass->supports_creating_files = fm_directory_view_real_supports_creating_files;
|
||||
klass->supports_zooming = fm_directory_view_real_supports_zooming;
|
||||
klass->supports_properties = fm_directory_view_real_supports_properties;
|
||||
|
||||
/* Function pointers that subclasses must override */
|
||||
NAUTILUS_ASSIGN_MUST_OVERRIDE_SIGNAL (klass, fm_directory_view, add_file);
|
||||
|
@ -2369,22 +2373,23 @@ compute_menu_item_info (FMDirectoryView *directory_view,
|
|||
}
|
||||
} else if (strcmp (path, FM_DIRECTORY_VIEW_MENU_PATH_NEW_FOLDER) == 0) {
|
||||
name = g_strdup (_("New Folder"));
|
||||
*return_sensitivity = fm_directory_view_supports_creating_files (directory_view);
|
||||
} else if (strcmp (path, FM_DIRECTORY_VIEW_MENU_PATH_DELETE) == 0) {
|
||||
name = g_strdup (_("Delete from _Trash"));
|
||||
*return_sensitivity = selection != NULL;
|
||||
} else if (strcmp (path, FM_DIRECTORY_VIEW_MENU_PATH_TRASH) == 0) {
|
||||
name = g_strdup (_("Move to _Trash"));
|
||||
*return_sensitivity = selection != NULL;
|
||||
*return_sensitivity = !fm_directory_view_is_read_only (directory_view) && selection != NULL;
|
||||
} else if (strcmp (path, FM_DIRECTORY_VIEW_MENU_PATH_DUPLICATE) == 0) {
|
||||
name = g_strdup (_("_Duplicate"));
|
||||
*return_sensitivity = selection != NULL;
|
||||
*return_sensitivity = fm_directory_view_supports_creating_files (directory_view) && selection != NULL;
|
||||
} else if (strcmp (path, FM_DIRECTORY_VIEW_MENU_PATH_CREATE_LINK) == 0) {
|
||||
if (selection != NULL && !nautilus_g_list_exactly_one_item (selection)) {
|
||||
name = g_strdup (_("Create _Links"));
|
||||
} else {
|
||||
name = g_strdup (_("Create _Link"));
|
||||
}
|
||||
*return_sensitivity = selection != NULL;
|
||||
*return_sensitivity = fm_directory_view_supports_creating_files (directory_view) && selection != NULL;
|
||||
} else if (strcmp (path, FM_DIRECTORY_VIEW_MENU_PATH_SHOW_PROPERTIES) == 0) {
|
||||
/* No ellipses here because this command does not require further
|
||||
* information to be completed.
|
||||
|
@ -3214,6 +3219,8 @@ fm_directory_view_real_update_menus (FMDirectoryView *view)
|
|||
handler = fm_directory_view_get_bonobo_ui_handler (view);
|
||||
selection = fm_directory_view_get_selection (view);
|
||||
|
||||
update_one_menu_item (view, handler, selection,
|
||||
FM_DIRECTORY_VIEW_MENU_PATH_NEW_FOLDER);
|
||||
update_one_menu_item (view, handler, selection,
|
||||
FM_DIRECTORY_VIEW_MENU_PATH_OPEN);
|
||||
update_one_menu_item (view, handler, selection,
|
||||
|
@ -3768,6 +3775,78 @@ fm_directory_view_stop (FMDirectoryView *view)
|
|||
done_loading (view);
|
||||
}
|
||||
|
||||
gboolean
|
||||
fm_directory_view_is_read_only (FMDirectoryView *view)
|
||||
{
|
||||
g_return_val_if_fail (FM_IS_DIRECTORY_VIEW (view), FALSE);
|
||||
|
||||
return NAUTILUS_CALL_VIRTUAL
|
||||
(FM_DIRECTORY_VIEW_CLASS, view,
|
||||
is_read_only, (view));
|
||||
}
|
||||
|
||||
static NautilusFile *
|
||||
get_directory_as_file (FMDirectoryView *view)
|
||||
{
|
||||
NautilusDirectory *directory;
|
||||
NautilusFile *directory_as_file;
|
||||
char *uri;
|
||||
|
||||
directory = fm_directory_view_get_model (view);
|
||||
uri = nautilus_directory_get_uri (directory);
|
||||
directory_as_file = nautilus_file_get (uri);
|
||||
g_free (uri);
|
||||
|
||||
return directory_as_file;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
fm_directory_view_real_is_read_only (FMDirectoryView *view)
|
||||
{
|
||||
NautilusFile *directory_as_file;
|
||||
gboolean result;
|
||||
|
||||
directory_as_file = get_directory_as_file (view);
|
||||
|
||||
result = !nautilus_file_can_write (directory_as_file);
|
||||
|
||||
nautilus_file_unref (directory_as_file);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
gboolean
|
||||
fm_directory_view_supports_creating_files (FMDirectoryView *view)
|
||||
{
|
||||
g_return_val_if_fail (FM_IS_DIRECTORY_VIEW (view), FALSE);
|
||||
|
||||
return NAUTILUS_CALL_VIRTUAL
|
||||
(FM_DIRECTORY_VIEW_CLASS, view,
|
||||
supports_creating_files, (view));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
showing_trash_directory (FMDirectoryView *view)
|
||||
{
|
||||
NautilusFile *directory_as_file;
|
||||
gboolean result;
|
||||
|
||||
directory_as_file = get_directory_as_file (view);
|
||||
|
||||
result = nautilus_file_is_in_trash (directory_as_file);
|
||||
|
||||
nautilus_file_unref (directory_as_file);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
fm_directory_view_real_supports_creating_files (FMDirectoryView *view)
|
||||
{
|
||||
g_return_val_if_fail (FM_IS_DIRECTORY_VIEW (view), FALSE);
|
||||
|
||||
return !fm_directory_view_is_read_only (view) && !showing_trash_directory (view);
|
||||
}
|
||||
|
||||
gboolean
|
||||
fm_directory_view_supports_properties (FMDirectoryView *view)
|
||||
|
|
|
@ -228,6 +228,22 @@ struct FMDirectoryViewClass {
|
|||
*/
|
||||
gboolean (* supports_zooming) (FMDirectoryView *view);
|
||||
|
||||
/* is_read_only is a function pointer that subclasses may
|
||||
* override to control whether or not the user is allowed to
|
||||
* change the contents of the currently viewed directory. The
|
||||
* default implementation checks the permissions of the
|
||||
* directory.
|
||||
*/
|
||||
gboolean (* is_read_only) (FMDirectoryView *view);
|
||||
|
||||
/* supports_creating_files is a function pointer that subclasses may
|
||||
* override to control whether or not new items can be created.
|
||||
* be accepted. The default implementation checks whether the
|
||||
* user has write permissions for the viewed directory, and whether
|
||||
* the viewed directory is in the trash.
|
||||
*/
|
||||
gboolean (* supports_creating_files) (FMDirectoryView *view);
|
||||
|
||||
void (* start_renaming_item) (FMDirectoryView *view,
|
||||
const char *uri);
|
||||
|
||||
|
@ -270,6 +286,8 @@ void fm_directory_view_restore_default_zoom_level (FMDirectory
|
|||
void fm_directory_view_select_all (FMDirectoryView *view);
|
||||
void fm_directory_view_set_selection (FMDirectoryView *view,
|
||||
GList *selection);
|
||||
gboolean fm_directory_view_is_read_only (FMDirectoryView *view);
|
||||
gboolean fm_directory_view_supports_creating_files (FMDirectoryView *view);
|
||||
gboolean fm_directory_view_supports_properties (FMDirectoryView *view);
|
||||
gboolean fm_directory_view_supports_zooming (FMDirectoryView *view);
|
||||
void fm_directory_view_move_copy_items (const GList *item_uris,
|
||||
|
|
|
@ -219,7 +219,6 @@ get_stored_icon_position_callback (NautilusIconContainer *container,
|
|||
NautilusIconPosition *position,
|
||||
FMIconView *icon_view)
|
||||
{
|
||||
NautilusDirectory *directory;
|
||||
char *position_string, *scale_string;
|
||||
gboolean position_good, scale_good;
|
||||
char *locale;
|
||||
|
@ -238,7 +237,6 @@ get_stored_icon_position_callback (NautilusIconContainer *container,
|
|||
locale = setlocale (LC_NUMERIC, "C");
|
||||
|
||||
/* Get the current position of this icon from the metadata. */
|
||||
directory = fm_directory_view_get_model (FM_DIRECTORY_VIEW (icon_view));
|
||||
position_string = nautilus_file_get_metadata
|
||||
(file, NAUTILUS_METADATA_KEY_ICON_POSITION, "");
|
||||
position_good = sscanf
|
||||
|
@ -372,7 +370,7 @@ tighter_layout_callback (gpointer ignored, gpointer view)
|
|||
return;
|
||||
|
||||
icon_container = get_icon_container (FM_ICON_VIEW (view));
|
||||
directory = NAUTILUS_DIRECTORY (fm_directory_view_get_model (FM_DIRECTORY_VIEW (view)));
|
||||
directory = fm_directory_view_get_model (FM_DIRECTORY_VIEW (view));
|
||||
is_tighter_layout = fm_icon_view_get_directory_tighter_layout (FM_ICON_VIEW (view), directory);
|
||||
|
||||
fm_icon_view_set_directory_tighter_layout (FM_ICON_VIEW (view), directory, !is_tighter_layout);
|
||||
|
|
|
@ -73,6 +73,7 @@ static void real_get_column_specification (FMListView *list_view
|
|||
FMListViewColumn *specification);
|
||||
static NautilusStringList * real_get_emblem_names_to_exclude (FMDirectoryView *view);
|
||||
static void real_merge_menus (FMDirectoryView *view);
|
||||
static gboolean real_supports_creating_files (FMDirectoryView *view);
|
||||
static gboolean real_supports_properties (FMDirectoryView *view);
|
||||
static void load_location_callback (NautilusView *nautilus_view,
|
||||
char *location);
|
||||
|
@ -108,14 +109,16 @@ fm_search_list_view_initialize_class (gpointer klass)
|
|||
fm_list_view_class = FM_LIST_VIEW_CLASS (klass);
|
||||
|
||||
fm_directory_view_class->add_file = real_add_file;
|
||||
fm_directory_view_class->merge_menus = real_merge_menus;
|
||||
fm_directory_view_class->update_menus = real_update_menus;
|
||||
fm_directory_view_class->supports_properties =
|
||||
real_supports_properties;
|
||||
fm_directory_view_class->create_selection_context_menu_items =
|
||||
real_create_selection_context_menu_items;
|
||||
fm_directory_view_class->get_emblem_names_to_exclude =
|
||||
real_get_emblem_names_to_exclude;
|
||||
fm_directory_view_class->merge_menus = real_merge_menus;
|
||||
fm_directory_view_class->supports_creating_files =
|
||||
real_supports_creating_files;
|
||||
fm_directory_view_class->supports_properties =
|
||||
real_supports_properties;
|
||||
fm_directory_view_class->update_menus = real_update_menus;
|
||||
|
||||
fm_list_view_class->adding_file = real_adding_file;
|
||||
fm_list_view_class->removing_file = real_removing_file;
|
||||
|
@ -469,6 +472,14 @@ real_merge_menus (FMDirectoryView *view)
|
|||
nautilus_file_list_free (selected_files);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
real_supports_creating_files (FMDirectoryView *view)
|
||||
{
|
||||
/* The user is not allowed to modify the contents of a search
|
||||
* results view.
|
||||
*/
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
real_supports_properties (FMDirectoryView *view)
|
||||
|
|
Loading…
Reference in a new issue