mirror of
https://gitlab.gnome.org/GNOME/nautilus
synced 2024-11-05 16:04:31 +00:00
e82bab8c49
Fixed bug 2147 (NautilusFile for trash needs non-empty values for more properties), bug 5652 (MIME type field appears but shouldn't in properties window for Trash), and bug 4620 (trash sidebar should show number of items). * libnautilus-extensions/nautilus-file.h: * libnautilus-extensions/nautilus-file-private.h: * libnautilus-extensions/nautilus-file.c: (nautilus_file_new_from_relative_uri): Create trash file subclass when appropriate. (nautilus_file_info_missing): Rename so it can be used in other source files. (nautilus_file_get_date): New method that returns numeric dates. (nautilus_file_get_date_as_string): Change to call nautilus_file_get_date to get the numeric date. (nautilus_file_get_file_type): Turn into a method. * libnautilus-extensions/nautilus-merged-directory.h: * libnautilus-extensions/nautilus-merged-directory.c: (merged_call_when_ready): Rolled in the old merged_callback_connect_directory function. (merged_contains_file): Moved down to a more appropriate part of the source file. (nautilus_merged_directory_get_real_directories): New public function for use by trash. * libnautilus-extensions/nautilus-trash-file.c: (trash_callback_hash), (trash_callback_equal), (trash_callback_destroy), (trash_callback_check_done), (trash_callback_remove_file), (ready_callback), (real_file_changed_callback), (monitor_add_file), (add_real_file), (trash_callback_remove_file_cover), (monitor_remove_file), (remove_real_file), (add_real_file_given_directory), (add_directory_callback), (remove_directory_callback), (trash_file_call_when_ready), (trash_file_cancel_call_when_ready), (trash_file_check_if_ready), (trash_file_monitor_add), (trash_file_monitor_remove), (trash_file_get_file_type), (trash_file_get_item_count), (trash_file_get_deep_counts), (trash_file_get_date), (remove_all_real_files), (nautilus_trash_file_initialize), (trash_destroy), (nautilus_trash_file_initialize_class): New code. First implementation of getting some attributes for the merged trash. Gets list of directories from the NautilusTrashDirectory object. The code in here is similar to the NautilusMergedDirectory class and at some point perhaps we can make the two share more. * libnautilus-extensions/nautilus-vfs-file.c: (vfs_file_get_file_type), (vfs_file_get_date), (nautilus_vfs_file_initialize_class): Implement the two new methods for the standard vfs case. Fixed various things that affect the properties window for the trash that showed up while I was testing the above work: * libnautilus-extensions/nautilus-icon-factory.c: (nautilus_icon_factory_get_icon_name_for_regular_file), (nautilus_icon_factory_get_icon_name_for_file): Move trash special case out so it doesn't matter what type the trash seems to be. The old code relied on trash not being a directory. * src/file-manager/fm-properties-window.c: (create_properties_window), (create_properties_window_callback), (cancel_create_properties_window_callback), (directory_view_destroyed_callback), (remove_pending_file): Rework code to fix problems where the timed wait or the signal handler wasn't properly cleaned up. Fixed remaining bit of bug 5631 (Tear-offs of right-click menus don't work.): * src/file-manager/nautilus-desktop-icon-view-ui.xml: Mark Disks right-click submenu so it won't get a tear-off item. Fixed bug 5650 (nautilus --quit fails to return to prompt sometimes): * src/nautilus-application.c: (nautilus_application_startup): Add special case so "nautilus --quit" doesn't hang waiting for a response from the (now quit) "server" instance of Nautilus. * src/nautilus-shell-interface.idl: Had to make the quit call no longer be "oneway" to get it to work right, otherwise the quit message could be lost when the sending application exited too fast. Fix bug 5675 (Nitpicks in new "could not be moved to new special location" dialog): * libnautilus-extensions/nautilus-file-operations.c: (handle_transfer_overwrite): Updated message wording as Eli (and Vera) suggest. Other changes: * libnautilus-extensions/nautilus-view-identifier.c: (get_lang_list): Fix comment and a small storage leak in the case where lang_with_locale is non-NULL but empty. * po/POTFILES.ignore: Obsolete file, no longer used. * src/file-manager/fm-desktop-icon-view.c: (update_home_link_and_delete_copies): Update comment to help translators understand better. * libnautilus-extensions/nautilus-directory-async.c: (directory_load_callback): Added a new assertion that could help in future gnome-vfs debugging. * libnautilus/nautilus-view-component.idl: Removed long-ago-fixed FIXME comment. * src/nautilus-window-manage-views.c: Tweak spacing.
139 lines
5.6 KiB
C
139 lines
5.6 KiB
C
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-
|
|
|
|
nautilus-directory.c: Nautilus directory model.
|
|
|
|
Copyright (C) 1999, 2000 Eazel, Inc.
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License as
|
|
published by the Free Software Foundation; either version 2 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public
|
|
License along with this program; if not, write to the
|
|
Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
|
Boston, MA 02111-1307, USA.
|
|
|
|
Author: Darin Adler <darin@eazel.com>
|
|
*/
|
|
|
|
#include "nautilus-file.h"
|
|
#include "nautilus-directory.h"
|
|
#include "nautilus-glib-extensions.h"
|
|
|
|
#define NAUTILUS_FILE_TOP_LEFT_TEXT_MAXIMUM_CHARACTERS_PER_LINE 80
|
|
#define NAUTILUS_FILE_TOP_LEFT_TEXT_MAXIMUM_LINES 24
|
|
#define NAUTILUS_FILE_TOP_LEFT_TEXT_MAXIMUM_BYTES 10000
|
|
|
|
/* These are in the typical sort order. Known things come first, then
|
|
* things where we can't know, finally things where we don't yet know.
|
|
*/
|
|
typedef enum {
|
|
KNOWN,
|
|
UNKNOWABLE,
|
|
UNKNOWN
|
|
} Knowledge;
|
|
|
|
struct NautilusFileDetails
|
|
{
|
|
NautilusDirectory *directory;
|
|
char *relative_uri;
|
|
|
|
/* Set by the NautilusDirectory while it's loading the file
|
|
* list so the file knows not to do redundant I/O.
|
|
*/
|
|
|
|
GnomeVFSFileInfo *info;
|
|
GnomeVFSResult get_info_error;
|
|
|
|
guint directory_count;
|
|
|
|
guint deep_directory_count;
|
|
guint deep_file_count;
|
|
guint deep_unreadable_count;
|
|
GnomeVFSFileSize deep_size;
|
|
|
|
GList *mime_list; /* If this is a directory, the list of MIME types in it. */
|
|
char *top_left_text;
|
|
char *activation_uri;
|
|
|
|
/* The following is for file operations in progress. Since
|
|
* there are normally only a few of these, we can move them to
|
|
* a separate hash table or something if required to keep the
|
|
* file objects small.
|
|
*/
|
|
GList *operations_in_progress;
|
|
|
|
/* boolean fields: bitfield to save space, since there can be
|
|
many NautilusFile objects. */
|
|
|
|
nautilus_boolean_bit unconfirmed : 1;
|
|
nautilus_boolean_bit is_gone : 1;
|
|
nautilus_boolean_bit loading_directory : 1;
|
|
/* got_info known from info field being non-NULL */
|
|
nautilus_boolean_bit get_info_failed : 1;
|
|
nautilus_boolean_bit file_info_is_up_to_date : 1;
|
|
|
|
nautilus_boolean_bit got_directory_count : 1;
|
|
nautilus_boolean_bit directory_count_failed : 1;
|
|
nautilus_boolean_bit directory_count_is_up_to_date : 1;
|
|
|
|
NautilusRequestStatus deep_counts_status : 2;
|
|
/* no deep_counts_are_up_to_date field; since we expose
|
|
intermediate values for this attribute, we do actually
|
|
forget it rather than invalidating. */
|
|
|
|
nautilus_boolean_bit got_mime_list : 1;
|
|
nautilus_boolean_bit mime_list_failed : 1;
|
|
nautilus_boolean_bit mime_list_is_up_to_date : 1;
|
|
|
|
nautilus_boolean_bit got_top_left_text : 1;
|
|
nautilus_boolean_bit top_left_text_is_up_to_date : 1;
|
|
|
|
nautilus_boolean_bit got_activation_uri : 1;
|
|
nautilus_boolean_bit activation_uri_is_up_to_date : 1;
|
|
};
|
|
|
|
NautilusFile *nautilus_file_new_from_info (NautilusDirectory *directory,
|
|
GnomeVFSFileInfo *info);
|
|
NautilusFile *nautilus_file_get_existing (const char *uri);
|
|
void nautilus_file_emit_changed (NautilusFile *file);
|
|
void nautilus_file_mark_gone (NautilusFile *file);
|
|
gboolean nautilus_file_info_missing (NautilusFile *file,
|
|
GnomeVFSFileInfoFields needed_mask);
|
|
char * nautilus_extract_top_left_text (const char *text,
|
|
int length);
|
|
gboolean nautilus_file_contains_text (NautilusFile *file);
|
|
void nautilus_file_set_directory (NautilusFile *file,
|
|
NautilusDirectory *directory);
|
|
gboolean nautilus_file_get_date (NautilusFile *file,
|
|
NautilusDateType date_type,
|
|
time_t *date);
|
|
|
|
/* Compare file's state with a fresh file info struct, return FALSE if
|
|
* no change, update file and return TRUE if the file info contains
|
|
* new state. */
|
|
gboolean nautilus_file_update_info (NautilusFile *file,
|
|
GnomeVFSFileInfo *info);
|
|
gboolean nautilus_file_update_name (NautilusFile *file,
|
|
const char *name);
|
|
|
|
/* Return true if the top lefts of files in this directory should be
|
|
* fetched, according to the preference settings.
|
|
*/
|
|
gboolean nautilus_file_should_get_top_left_text (NautilusFile *file);
|
|
|
|
/* Mark specified attributes for this file out of date without canceling current
|
|
* I/O or kicking off new I/O.
|
|
*/
|
|
void nautilus_file_invalidate_attributes_internal (NautilusFile *file,
|
|
GList *file_attributes);
|
|
|
|
/* Recognizing special file names. */
|
|
gboolean nautilus_file_name_matches_hidden_pattern (const char *name_or_relative_uri);
|
|
gboolean nautilus_file_name_matches_backup_pattern (const char *name_or_relative_uri);
|