diff options
Diffstat (limited to 'libnautilus-private')
20 files changed, 225 insertions, 330 deletions
diff --git a/libnautilus-private/nautilus-directory-async.c b/libnautilus-private/nautilus-directory-async.c index 5bddcdebd..7ab4c5ce3 100644 --- a/libnautilus-private/nautilus-directory-async.c +++ b/libnautilus-private/nautilus-directory-async.c @@ -104,19 +104,19 @@ static GHashTable *async_jobs; #endif /* Forward declarations for functions that need them. */ -static void deep_count_load (NautilusDirectory *directory, - const char *uri); -static gboolean request_is_satisfied (NautilusDirectory *directory, - NautilusFile *file, - Request *request); -static void cancel_loading_attributes (NautilusDirectory *directory, - GList *file_attributes); -static void add_all_files_to_work_queue (NautilusDirectory *directory); -static void link_info_done (NautilusDirectory *directory, - NautilusFile *file, - const char *uri, - const char *name, - const char *icon); +static void deep_count_load (NautilusDirectory *directory, + const char *uri); +static gboolean request_is_satisfied (NautilusDirectory *directory, + NautilusFile *file, + Request *request); +static void cancel_loading_attributes (NautilusDirectory *directory, + NautilusFileAttributes file_attributes); +static void add_all_files_to_work_queue (NautilusDirectory *directory); +static void link_info_done (NautilusDirectory *directory, + NautilusFile *file, + const char *uri, + const char *name, + const char *icon); static gboolean file_needs_high_priority_work_done (NautilusDirectory *directory, NautilusFile *file); static gboolean file_needs_low_priority_work_done (NautilusDirectory *directory, @@ -505,56 +505,33 @@ remove_monitor (NautilusDirectory *directory, void nautilus_directory_set_up_request (Request *request, - GList *file_attributes) + NautilusFileAttributes file_attributes) { memset (request, 0, sizeof (*request)); - - request->directory_count = g_list_find_custom - (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT, - eel_strcmp_compare_func) != NULL; - request->deep_count = g_list_find_custom - (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS, - eel_strcmp_compare_func) != NULL; - request->mime_list = g_list_find_custom - (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES, - eel_strcmp_compare_func) != NULL; - request->file_info = g_list_find_custom - (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE, - eel_strcmp_compare_func) != NULL; - request->file_info |= g_list_find_custom - (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_IS_DIRECTORY, - eel_strcmp_compare_func) != NULL; - request->file_info |= g_list_find_custom - (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_CAPABILITIES, - eel_strcmp_compare_func) != NULL; - request->file_info |= g_list_find_custom - (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_FILE_TYPE, - eel_strcmp_compare_func) != NULL; - if (g_list_find_custom (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_TOP_LEFT_TEXT, - eel_strcmp_compare_func) != NULL) { + request->directory_count = (file_attributes & + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT) != FALSE; + request->deep_count = (file_attributes & + NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS) != FALSE; + request->mime_list = (file_attributes & + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES) != FALSE; + request->file_info = (file_attributes & + (NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE | + NAUTILUS_FILE_ATTRIBUTE_IS_DIRECTORY | + NAUTILUS_FILE_ATTRIBUTE_CAPABILITIES | + NAUTILUS_FILE_ATTRIBUTE_FILE_TYPE)) != FALSE; + + if (file_attributes & NAUTILUS_FILE_ATTRIBUTE_TOP_LEFT_TEXT) { request->top_left_text = TRUE; request->file_info = TRUE; } - if (g_list_find_custom (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI, - eel_strcmp_compare_func) != NULL) { + if (file_attributes & NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI) { request->file_info = TRUE; request->link_info = TRUE; } - if (g_list_find_custom (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME, - eel_strcmp_compare_func) != NULL) { + if (file_attributes & NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME) { request->file_info = TRUE; request->link_info = TRUE; } @@ -570,39 +547,34 @@ nautilus_directory_set_up_request (Request *request, * directly (would need some funky char trick to prevent * namespace collisions). */ - if (g_list_find_custom (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON, - eel_strcmp_compare_func) != NULL) { + if (file_attributes & NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON) { request->metafile = TRUE; request->file_info = TRUE; request->link_info = TRUE; } - request->metafile |= g_list_find_custom - (file_attributes, - NAUTILUS_FILE_ATTRIBUTE_METADATA, - eel_strcmp_compare_func) != NULL; - + request->metafile |= (file_attributes & + NAUTILUS_FILE_ATTRIBUTE_METADATA) != FALSE; } static void mime_db_changed_callback (GnomeVFSMIMEMonitor *ignore, NautilusDirectory *dir) { const Monitor *monitor; - GList *ptr, *attrs; + NautilusFileAttributes attrs; + GList *ptr; GList *file_list; g_return_if_fail (dir != NULL); g_return_if_fail (dir->details != NULL); - attrs = NULL; - attrs = g_list_prepend (attrs, NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI); - attrs = g_list_prepend (attrs, NAUTILUS_FILE_ATTRIBUTE_CAPABILITIES); - attrs = g_list_prepend (attrs, NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON); - attrs = g_list_prepend (attrs, NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE); - attrs = g_list_prepend (attrs, NAUTILUS_FILE_ATTRIBUTE_METADATA); - attrs = g_list_prepend (attrs, NAUTILUS_FILE_ATTRIBUTE_FILE_TYPE); - attrs = g_list_prepend (attrs, NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES); + attrs = NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI | + NAUTILUS_FILE_ATTRIBUTE_CAPABILITIES | + NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON | + NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE | + NAUTILUS_FILE_ATTRIBUTE_METADATA | + NAUTILUS_FILE_ATTRIBUTE_FILE_TYPE | + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES; file_list = NULL; for (ptr = dir->details->monitor_list ; ptr != NULL ; ptr = ptr->next) { @@ -627,7 +599,6 @@ mime_db_changed_callback (GnomeVFSMIMEMonitor *ignore, NautilusDirectory *dir) } g_list_free (file_list); } - g_list_free (attrs); } void @@ -636,7 +607,7 @@ nautilus_directory_monitor_add_internal (NautilusDirectory *directory, gconstpointer client, gboolean monitor_hidden_files, gboolean monitor_backup_files, - GList *file_attributes, + NautilusFileAttributes file_attributes, NautilusDirectoryCallback callback, gpointer callback_data) { @@ -1287,7 +1258,7 @@ ready_callback_call (NautilusDirectory *directory, void nautilus_directory_call_when_ready_internal (NautilusDirectory *directory, NautilusFile *file, - GList *file_attributes, + NautilusFileAttributes file_attributes, gboolean wait_for_file_list, NautilusDirectoryCallback directory_callback, NautilusFileCallback file_callback, @@ -1351,7 +1322,7 @@ nautilus_directory_call_when_ready_internal (NautilusDirectory *directory, gboolean nautilus_directory_check_if_ready_internal (NautilusDirectory *directory, NautilusFile *file, - GList *file_attributes) + NautilusFileAttributes file_attributes) { Request request; @@ -2043,10 +2014,10 @@ file_list_start_or_stop (NautilusDirectory *directory) void nautilus_file_invalidate_count_and_mime_list (NautilusFile *file) { - GList *attributes = NULL; - - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES); + NautilusFileAttributes attributes; + + attributes = NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT | + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES; nautilus_file_invalidate_attributes (file, attributes); } @@ -2072,8 +2043,8 @@ nautilus_directory_invalidate_count_and_mime_list (NautilusDirectory *directory) } static void -nautilus_directory_invalidate_file_attributes (NautilusDirectory *directory, - GList *file_attributes) +nautilus_directory_invalidate_file_attributes (NautilusDirectory *directory, + NautilusFileAttributes file_attributes) { GList *node; @@ -2091,8 +2062,8 @@ nautilus_directory_invalidate_file_attributes (NautilusDirectory *directory, } void -nautilus_directory_force_reload_internal (NautilusDirectory *directory, - GList *file_attributes) +nautilus_directory_force_reload_internal (NautilusDirectory *directory, + NautilusFileAttributes file_attributes) { /* invalidate attributes that are getting reloaded for all files */ nautilus_directory_invalidate_file_attributes (directory, file_attributes); @@ -3205,7 +3176,7 @@ cancel_link_info_for_file (NautilusDirectory *directory, static void cancel_loading_attributes (NautilusDirectory *directory, - GList *file_attributes) + NautilusFileAttributes file_attributes) { Request request; @@ -3238,9 +3209,9 @@ cancel_loading_attributes (NautilusDirectory *directory, } void -nautilus_directory_cancel_loading_file_attributes (NautilusDirectory *directory, - NautilusFile *file, - GList *file_attributes) +nautilus_directory_cancel_loading_file_attributes (NautilusDirectory *directory, + NautilusFile *file, + NautilusFileAttributes file_attributes) { Request request; diff --git a/libnautilus-private/nautilus-directory-background.c b/libnautilus-private/nautilus-directory-background.c index 58fefbc1d..917030846 100644 --- a/libnautilus-private/nautilus-directory-background.c +++ b/libnautilus-private/nautilus-directory-background.c @@ -863,7 +863,6 @@ nautilus_connect_background_to_file_metadata (GtkWidget *widget, { EelBackground *background; gpointer old_file; - GList *attributes; /* Get at the background object we'll be connecting. */ background = eel_get_widget_background (widget); @@ -913,11 +912,9 @@ nautilus_connect_background_to_file_metadata (GtkWidget *widget, G_CALLBACK (saved_settings_changed_callback), background, 0); /* arrange to receive file metadata */ - attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_METADATA); nautilus_file_monitor_add (file, background, - attributes); - g_list_free (attributes); + NAUTILUS_FILE_ATTRIBUTE_METADATA); /* arrange for notification when the theme changes */ eel_preferences_add_callback (NAUTILUS_PREFERENCES_THEME, diff --git a/libnautilus-private/nautilus-directory-private.h b/libnautilus-private/nautilus-directory-private.h index 22bcada83..038c58afd 100644 --- a/libnautilus-private/nautilus-directory-private.h +++ b/libnautilus-private/nautilus-directory-private.h @@ -125,14 +125,14 @@ NautilusDirectory *nautilus_directory_get_existing (const cha void nautilus_directory_async_state_changed (NautilusDirectory *directory); void nautilus_directory_call_when_ready_internal (NautilusDirectory *directory, NautilusFile *file, - GList *file_attributes, + NautilusFileAttributes file_attributes, gboolean wait_for_file_list, NautilusDirectoryCallback directory_callback, NautilusFileCallback file_callback, gpointer callback_data); gboolean nautilus_directory_check_if_ready_internal (NautilusDirectory *directory, NautilusFile *file, - GList *file_attributes); + NautilusFileAttributes file_attributes); void nautilus_directory_cancel_callback_internal (NautilusDirectory *directory, NautilusFile *file, NautilusDirectoryCallback directory_callback, @@ -143,7 +143,7 @@ void nautilus_directory_monitor_add_internal (NautilusD gconstpointer client, gboolean monitor_hidden_files, gboolean monitor_backup_files, - GList *attributes, + NautilusFileAttributes attributes, NautilusDirectoryCallback callback, gpointer callback_data); void nautilus_directory_monitor_remove_internal (NautilusDirectory *directory, @@ -162,10 +162,10 @@ void nautilus_directory_stop_monitoring_file_list (NautilusD void nautilus_directory_cancel (NautilusDirectory *directory); void nautilus_async_destroying_file (NautilusFile *file); void nautilus_directory_force_reload_internal (NautilusDirectory *directory, - GList *file_attributes); + NautilusFileAttributes file_attributes); void nautilus_directory_cancel_loading_file_attributes (NautilusDirectory *directory, NautilusFile *file, - GList *file_attributes); + NautilusFileAttributes file_attributes); /* Calls shared between directory, file, and async. code. */ void nautilus_directory_emit_files_added (NautilusDirectory *directory, @@ -182,7 +182,7 @@ NautilusDirectory *nautilus_directory_get_internal (const cha gboolean create); char * nautilus_directory_get_name_for_self_as_new_file (NautilusDirectory *directory); void nautilus_directory_set_up_request (Request *request, - GList *file_attributes); + NautilusFileAttributes file_attributes); /* Interface to the file list. */ NautilusFile * nautilus_directory_find_file_by_name (NautilusDirectory *directory, diff --git a/libnautilus-private/nautilus-directory.c b/libnautilus-private/nautilus-directory.c index 322a86b3b..6e08e2500 100644 --- a/libnautilus-private/nautilus-directory.c +++ b/libnautilus-private/nautilus-directory.c @@ -1246,7 +1246,7 @@ nautilus_directory_notify_files_moved (GList *uri_pairs) GList *new_files_list, *unref_list; GHashTable *added_lists, *changed_lists; char *name; - GList *cancel_attributes; + NautilusFileAttributes cancel_attributes; /* Make a list of added and changed files in each directory. */ new_files_list = NULL; @@ -1347,8 +1347,6 @@ nautilus_directory_notify_files_moved (GList *uri_pairs) /* Separate handling for brand new file objects. */ nautilus_directory_notify_files_added (new_files_list); g_list_free (new_files_list); - - g_list_free (cancel_attributes); } void @@ -1520,7 +1518,7 @@ nautilus_directory_get_file_uri (NautilusDirectory *directory, void nautilus_directory_call_when_ready (NautilusDirectory *directory, - GList *file_attributes, + NautilusFileAttributes file_attributes, gboolean wait_for_all_files, NautilusDirectoryCallback callback, gpointer callback_data) @@ -1552,7 +1550,7 @@ nautilus_directory_file_monitor_add (NautilusDirectory *directory, gconstpointer client, gboolean monitor_hidden_files, gboolean monitor_backup_files, - GList *file_attributes, + NautilusFileAttributes file_attributes, NautilusDirectoryCallback callback, gpointer callback_data) { @@ -1739,7 +1737,6 @@ nautilus_self_check_directory (void) { NautilusDirectory *directory; NautilusFile *file; - GList *attributes; directory = nautilus_directory_get ("file:///etc"); file = nautilus_file_get ("file:///etc/passwd"); @@ -1748,14 +1745,12 @@ nautilus_self_check_directory (void) nautilus_directory_file_monitor_add (directory, &data_dummy, - TRUE, TRUE, NULL, NULL, NULL); + TRUE, TRUE, 0, NULL, NULL); got_metadata_flag = FALSE; - attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_METADATA); - nautilus_directory_call_when_ready (directory, attributes, TRUE, + nautilus_directory_call_when_ready (directory, NAUTILUS_FILE_ATTRIBUTE_METADATA, TRUE, got_metadata_callback, &data_dummy); - g_list_free (attributes); while (!got_metadata_flag) { gtk_main_iteration (); @@ -1803,10 +1798,8 @@ nautilus_self_check_directory (void) directory = nautilus_directory_get ("file:///etc"); got_metadata_flag = FALSE; - attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_METADATA); - nautilus_directory_call_when_ready (directory, attributes, TRUE, + nautilus_directory_call_when_ready (directory, NAUTILUS_FILE_ATTRIBUTE_METADATA, TRUE, got_metadata_callback, &data_dummy); - g_list_free (attributes); while (!got_metadata_flag) { gtk_main_iteration (); @@ -1816,11 +1809,11 @@ nautilus_self_check_directory (void) got_files_flag = FALSE; - attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS); - nautilus_directory_call_when_ready (directory, attributes, TRUE, + nautilus_directory_call_when_ready (directory, + NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE | + NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS, + TRUE, got_files_callback, &data_dummy); - g_list_free (attributes); while (!got_files_flag) { gtk_main_iteration (); diff --git a/libnautilus-private/nautilus-directory.h b/libnautilus-private/nautilus-directory.h index 8f1865ddd..6ae4f3330 100644 --- a/libnautilus-private/nautilus-directory.h +++ b/libnautilus-private/nautilus-directory.h @@ -27,6 +27,7 @@ #include <gtk/gtkobject.h> #include <libgnomevfs/gnome-vfs-types.h> +#include <libnautilus-private/nautilus-file-attributes.h> /* NautilusDirectory is a class that manages the model for a directory, real or virtual, for Nautilus, mainly the file-manager component. The directory is @@ -105,7 +106,7 @@ typedef struct gboolean (* contains_file) (NautilusDirectory *directory, NautilusFile *file); void (* call_when_ready) (NautilusDirectory *directory, - GList *file_attributes, + NautilusFileAttributes file_attributes, gboolean wait_for_file_list, NautilusDirectoryCallback callback, gpointer callback_data); @@ -116,7 +117,7 @@ typedef struct gconstpointer client, gboolean monitor_hidden_files, gboolean monitor_backup_files, - GList *monitor_attributes, + NautilusFileAttributes monitor_attributes, NautilusDirectoryCallback initial_files_callback, gpointer callback_data); void (* file_monitor_remove) (NautilusDirectory *directory, @@ -163,7 +164,7 @@ NautilusFile * nautilus_directory_get_corresponding_file (NautilusDirector * The file attribute and metadata keys are for files in the directory. */ void nautilus_directory_call_when_ready (NautilusDirectory *directory, - GList *file_attributes, + NautilusFileAttributes file_attributes, gboolean wait_for_all_files, NautilusDirectoryCallback callback, gpointer callback_data); @@ -177,7 +178,7 @@ void nautilus_directory_file_monitor_add (NautilusDirector gconstpointer client, gboolean monitor_hidden_files, gboolean monitor_backup_files, - GList *attributes, + NautilusFileAttributes attributes, NautilusDirectoryCallback initial_files_callback, gpointer callback_data); void nautilus_directory_file_monitor_remove (NautilusDirectory *directory, diff --git a/libnautilus-private/nautilus-file-attributes.h b/libnautilus-private/nautilus-file-attributes.h index 1957826c7..a34bba663 100644 --- a/libnautilus-private/nautilus-file-attributes.h +++ b/libnautilus-private/nautilus-file-attributes.h @@ -29,17 +29,19 @@ * interest in changes to the attributes or when waiting for them. */ -#define NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI "activation URI" -#define NAUTILUS_FILE_ATTRIBUTE_CAPABILITIES "capabilities" -#define NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON "custom icon" -#define NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS "deep counts" -#define NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT "directory item count" -#define NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES "directory item MIME types" -#define NAUTILUS_FILE_ATTRIBUTE_FILE_TYPE "file type" -#define NAUTILUS_FILE_ATTRIBUTE_IS_DIRECTORY "is directory" -#define NAUTILUS_FILE_ATTRIBUTE_METADATA "metadata" -#define NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE "MIME type" -#define NAUTILUS_FILE_ATTRIBUTE_TOP_LEFT_TEXT "top left text" -#define NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME "display name" +typedef enum { + NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI = 1 << 0, + NAUTILUS_FILE_ATTRIBUTE_CAPABILITIES = 1 << 1, + NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON = 1 << 2, + NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS = 1 << 3, + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT = 1 << 4, + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES = 1 << 5, + NAUTILUS_FILE_ATTRIBUTE_FILE_TYPE = 1 << 6, + NAUTILUS_FILE_ATTRIBUTE_IS_DIRECTORY = 1 << 7, + NAUTILUS_FILE_ATTRIBUTE_METADATA = 1 << 8, + NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE = 1 << 9, + NAUTILUS_FILE_ATTRIBUTE_TOP_LEFT_TEXT = 1 << 10, + NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME = 1 << 11, +} NautilusFileAttributes; #endif /* NAUTILUS_FILE_ATTRIBUTES_H */ diff --git a/libnautilus-private/nautilus-file-private.h b/libnautilus-private/nautilus-file-private.h index dc6d62775..5739bd862 100644 --- a/libnautilus-private/nautilus-file-private.h +++ b/libnautilus-private/nautilus-file-private.h @@ -167,14 +167,14 @@ gboolean nautilus_file_should_get_top_left_text (NautilusFile /* 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); -GList * nautilus_file_get_all_attributes (void); -gboolean nautilus_file_is_self_owned (NautilusFile *file); -void nautilus_file_invalidate_count_and_mime_list (NautilusFile *file); -gboolean nautilus_file_rename_in_progress (NautilusFile *file); - -GnomeVFSFileInfo *nautilus_file_peek_vfs_file_info (NautilusFile *file); +void nautilus_file_invalidate_attributes_internal (NautilusFile *file, + NautilusFileAttributes file_attributes); +NautilusFileAttributes nautilus_file_get_all_attributes (void); +gboolean nautilus_file_is_self_owned (NautilusFile *file); +void nautilus_file_invalidate_count_and_mime_list (NautilusFile *file); +gboolean nautilus_file_rename_in_progress (NautilusFile *file); +GnomeVFSFileInfo * nautilus_file_peek_vfs_file_info (NautilusFile *file); + /* Thumbnailing: */ void nautilus_file_set_is_thumbnailing (NautilusFile *file, diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c index c7995c7a3..12388fa6d 100644 --- a/libnautilus-private/nautilus-file.c +++ b/libnautilus-private/nautilus-file.c @@ -917,7 +917,6 @@ rename_callback (GnomeVFSAsyncHandle *handle, char *old_relative_uri; char *old_uri; char *new_uri; - GList name_attribute = { 0, }; op = callback_data; g_assert (handle == op->handle); @@ -961,9 +960,8 @@ rename_callback (GnomeVFSAsyncHandle *handle, * and a rename affects the contents of the desktop file. */ if (op->file->details->display_name != NULL) { - name_attribute.data = NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME; - nautilus_file_invalidate_attributes (op->file, - &name_attribute); + nautilus_file_invalidate_attributes (op->file, + NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME); } } operation_complete (op, result); @@ -1065,9 +1063,8 @@ rename_guts (NautilusFile *file, g_free (uri); if (success) { - GList attributes = { 0 }; - attributes.data = NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME; - nautilus_file_invalidate_attributes (file, &attributes); + nautilus_file_invalidate_attributes (file, + NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME); (* callback) (file, GNOME_VFS_OK, callback_data); return; } else { @@ -2401,7 +2398,7 @@ nautilus_file_get_name (NautilusFile *file) void nautilus_file_monitor_add (NautilusFile *file, gconstpointer client, - GList *attributes) + NautilusFileAttributes attributes) { g_return_if_fail (NAUTILUS_IS_FILE (file)); g_return_if_fail (client != NULL); @@ -5019,13 +5016,13 @@ nautilus_file_is_not_yet_confirmed (NautilusFile *file) * obtain the information, which might be slow network calls, e.g. * * @file: The file being queried. - * @file_attributes: A GList of the desired information. + * @file_attributes: A bit-mask with the desired information. * * Return value: TRUE if all of the specified attributes are currently readable. */ gboolean nautilus_file_check_if_ready (NautilusFile *file, - GList *file_attributes) + NautilusFileAttributes file_attributes) { /* To be parallel with call_when_ready, return * TRUE for NULL file. @@ -5043,7 +5040,7 @@ nautilus_file_check_if_ready (NautilusFile *file, void nautilus_file_call_when_ready (NautilusFile *file, - GList *file_attributes, + NautilusFileAttributes file_attributes, NautilusFileCallback callback, gpointer callback_data) @@ -5120,7 +5117,7 @@ invalidate_link_info (NautilusFile *file) void nautilus_file_invalidate_attributes_internal (NautilusFile *file, - GList *file_attributes) + NautilusFileAttributes file_attributes) { Request request; @@ -5180,7 +5177,7 @@ nautilus_file_set_is_thumbnailing (NautilusFile *file, void nautilus_file_invalidate_attributes (NautilusFile *file, - GList *file_attributes) + NautilusFileAttributes file_attributes) { /* Cancel possible in-progress loads of any of these attributes */ nautilus_directory_cancel_loading_file_attributes (file->details->directory, @@ -5196,37 +5193,30 @@ nautilus_file_invalidate_attributes (NautilusFile *file, nautilus_directory_async_state_changed (file->details->directory); } -GList * +NautilusFileAttributes nautilus_file_get_all_attributes (void) { - GList *attributes; - - attributes = NULL; - - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_CAPABILITIES); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_FILE_TYPE); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_IS_DIRECTORY); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_METADATA); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_TOP_LEFT_TEXT); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME); - - return attributes; + return NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI | + NAUTILUS_FILE_ATTRIBUTE_CAPABILITIES | + NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON | + NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS | + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT | + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES | + NAUTILUS_FILE_ATTRIBUTE_FILE_TYPE | + NAUTILUS_FILE_ATTRIBUTE_IS_DIRECTORY | + NAUTILUS_FILE_ATTRIBUTE_METADATA | + NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE | + NAUTILUS_FILE_ATTRIBUTE_TOP_LEFT_TEXT | + NAUTILUS_FILE_ATTRIBUTE_DISPLAY_NAME; } void nautilus_file_invalidate_all_attributes (NautilusFile *file) { - GList *all_attributes; + NautilusFileAttributes all_attributes; all_attributes = nautilus_file_get_all_attributes (); nautilus_file_invalidate_attributes (file, all_attributes); - g_list_free (all_attributes); } diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h index d098981db..1ee2d39d2 100644 --- a/libnautilus-private/nautilus-file.h +++ b/libnautilus-private/nautilus-file.h @@ -27,6 +27,7 @@ #include <gtk/gtkobject.h> #include <libgnomevfs/gnome-vfs-types.h> +#include <libnautilus-private/nautilus-file-attributes.h> /* NautilusFile is an object used to represent a single element of a * NautilusDirectory. It's lightweight and relies on NautilusDirectory @@ -100,7 +101,7 @@ void nautilus_file_unref (Nautilu /* Monitor the file. */ void nautilus_file_monitor_add (NautilusFile *file, gconstpointer client, - GList *attributes); + NautilusFileAttributes attributes); void nautilus_file_monitor_remove (NautilusFile *file, gconstpointer client); @@ -109,16 +110,16 @@ void nautilus_file_monitor_remove (Nautilu * to other attributes as well. */ void nautilus_file_call_when_ready (NautilusFile *file, - GList *attributes, + NautilusFileAttributes attributes, NautilusFileCallback callback, gpointer callback_data); void nautilus_file_cancel_call_when_ready (NautilusFile *file, NautilusFileCallback callback, gpointer callback_data); gboolean nautilus_file_check_if_ready (NautilusFile *file, - GList *attributes); + NautilusFileAttributes attributes); void nautilus_file_invalidate_attributes (NautilusFile *file, - GList *attributes); + NautilusFileAttributes attributes); void nautilus_file_invalidate_all_attributes (NautilusFile *file); /* Basic attributes for file objects. */ @@ -344,33 +345,33 @@ typedef struct { void (* updated_deep_count_in_progress) (NautilusFile *file); /* Virtual functions (mainly used for trash directory). */ - void (* monitor_add) (NautilusFile *file, - gconstpointer client, - GList *attributes); - void (* monitor_remove) (NautilusFile *file, - gconstpointer client); - void (* call_when_ready) (NautilusFile *file, - GList *attributes, - NautilusFileCallback callback, - gpointer callback_data); - void (* cancel_call_when_ready) (NautilusFile *file, - NautilusFileCallback callback, - gpointer callback_data); - gboolean (* check_if_ready) (NautilusFile *file, - GList *attributes); - GnomeVFSFileType (* get_file_type) (NautilusFile *file); - gboolean (* get_item_count) (NautilusFile *file, - guint *count, - gboolean *count_unreadable); - NautilusRequestStatus (* get_deep_counts) (NautilusFile *file, - guint *directory_count, - guint *file_count, - guint *unreadable_directory_count, - GnomeVFSFileSize *total_size); - gboolean (* get_date) (NautilusFile *file, - NautilusDateType type, - time_t *date); - char * (* get_where_string) (NautilusFile *file); + void (* monitor_add) (NautilusFile *file, + gconstpointer client, + NautilusFileAttributes attributes); + void (* monitor_remove) (NautilusFile *file, + gconstpointer client); + void (* call_when_ready) (NautilusFile *file, + NautilusFileAttributes attributes, + NautilusFileCallback callback, + gpointer callback_data); + void (* cancel_call_when_ready) (NautilusFile *file, + NautilusFileCallback callback, + gpointer callback_data); + gboolean (* check_if_ready) (NautilusFile *file, + NautilusFileAttributes attributes); + GnomeVFSFileType (* get_file_type) (NautilusFile *file); + gboolean (* get_item_count) (NautilusFile *file, + guint *count, + gboolean *count_unreadable); + NautilusRequestStatus (* get_deep_counts) (NautilusFile *file, + guint *directory_count, + guint *file_count, + guint *unreadable_directory_count, + GnomeVFSFileSize *total_size); + gboolean (* get_date) (NautilusFile *file, + NautilusDateType type, + time_t *date); + char * (* get_where_string) (NautilusFile *file); } NautilusFileClass; #endif /* NAUTILUS_FILE_H */ diff --git a/libnautilus-private/nautilus-icon-factory.c b/libnautilus-private/nautilus-icon-factory.c index 15da7b0ef..a85d77cc0 100644 --- a/libnautilus-private/nautilus-icon-factory.c +++ b/libnautilus-private/nautilus-icon-factory.c @@ -847,19 +847,13 @@ nautilus_icon_factory_get_icon_for_file (NautilusFile *file, gboolean embedd_tex /** * nautilus_icon_factory_get_required_file_attributes * - * Get the list of file attributes required to obtain a file's icon. - * Callers must free this list. + * Get the file attributes required to obtain a file's icon. */ -GList * +NautilusFileAttributes nautilus_icon_factory_get_required_file_attributes (void) { - GList *attributes; - - attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON); - attributes = g_list_prepend (attributes, - NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE); - - return attributes; + return NAUTILUS_FILE_ATTRIBUTE_CUSTOM_ICON | + NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE; } @@ -874,12 +868,11 @@ nautilus_icon_factory_get_required_file_attributes (void) gboolean nautilus_icon_factory_is_icon_ready_for_file (NautilusFile *file) { - GList *attributes; + NautilusFileAttributes attributes; gboolean result; attributes = nautilus_icon_factory_get_required_file_attributes (); result = nautilus_file_check_if_ready (file, attributes); - g_list_free (attributes); return result; } diff --git a/libnautilus-private/nautilus-icon-factory.h b/libnautilus-private/nautilus-icon-factory.h index 857f4cded..4162267b6 100644 --- a/libnautilus-private/nautilus-icon-factory.h +++ b/libnautilus-private/nautilus-icon-factory.h @@ -109,8 +109,8 @@ guint nautilus_get_icon_size_for_zoom_level (Nautil /* Choose the appropriate icon, but don't render it yet. */ char * nautilus_icon_factory_get_icon_for_file (NautilusFile *file, gboolean embedd_text); -gboolean nautilus_icon_factory_is_icon_ready_for_file (NautilusFile *file); -GList * nautilus_icon_factory_get_required_file_attributes (void); +gboolean nautilus_icon_factory_is_icon_ready_for_file (NautilusFile *file); +NautilusFileAttributes nautilus_icon_factory_get_required_file_attributes (void); GList * nautilus_icon_factory_get_emblem_icons_for_file (NautilusFile *file, EelStringList *exclude); diff --git a/libnautilus-private/nautilus-link.c b/libnautilus-private/nautilus-link.c index eaee2f07a..c08a79861 100644 --- a/libnautilus-private/nautilus-link.c +++ b/libnautilus-private/nautilus-link.c @@ -125,7 +125,6 @@ nautilus_link_local_set_icon (const char *uri, const char *icon_name) { gboolean result; NautilusFile *file; - GList *attributes; switch (get_link_style_for_local_file (uri, NULL)) { case desktop: @@ -139,10 +138,8 @@ nautilus_link_local_set_icon (const char *uri, const char *icon_name) } file = nautilus_file_get (uri); - attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI); - nautilus_file_invalidate_attributes (file, attributes); + nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI); nautilus_file_unref (file); - g_list_free (attributes); return result; } @@ -152,7 +149,6 @@ nautilus_link_local_set_link_uri (const char *uri, const char *link_uri) { gboolean result; NautilusFile *file; - GList *attributes; switch (get_link_style_for_local_file (uri, NULL)) { case desktop: @@ -168,10 +164,8 @@ nautilus_link_local_set_link_uri (const char *uri, const char *link_uri) file = nautilus_file_get (uri); - attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI); - nautilus_file_invalidate_attributes (file, attributes); + nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI); nautilus_file_unref (file); - g_list_free (attributes); return result; } diff --git a/libnautilus-private/nautilus-merged-directory.c b/libnautilus-private/nautilus-merged-directory.c index 9457116d5..39118c8ae 100644 --- a/libnautilus-private/nautilus-merged-directory.c +++ b/libnautilus-private/nautilus-merged-directory.c @@ -44,7 +44,7 @@ typedef struct { NautilusDirectoryCallback callback; gpointer callback_data; - GList *wait_for_attributes; + NautilusFileAttributes wait_for_attributes; gboolean wait_for_file_list; GList *non_ready_directories; @@ -56,7 +56,7 @@ typedef struct { gboolean monitor_hidden_files; gboolean monitor_backup_files; - GList *monitor_attributes; + NautilusFileAttributes monitor_attributes; } MergedMonitor; enum { @@ -99,7 +99,6 @@ merged_callback_destroy (MergedCallback *merged_callback) g_assert (merged_callback != NULL); g_assert (NAUTILUS_IS_MERGED_DIRECTORY (merged_callback->merged)); - eel_g_list_free_deep (merged_callback->wait_for_attributes); g_list_free (merged_callback->non_ready_directories); nautilus_file_list_free (merged_callback->merged_file_list); g_free (merged_callback); @@ -158,7 +157,7 @@ directory_ready_callback (NautilusDirectory *directory, static void merged_call_when_ready (NautilusDirectory *directory, - GList *file_attributes, + NautilusFileAttributes file_attributes, gboolean wait_for_file_list, NautilusDirectoryCallback callback, gpointer callback_data) @@ -182,7 +181,7 @@ merged_call_when_ready (NautilusDirectory *directory, merged_callback->merged = merged; merged_callback->callback = callback; merged_callback->callback_data = callback_data; - merged_callback->wait_for_attributes = eel_g_str_list_copy (file_attributes); + merged_callback->wait_for_attributes = file_attributes; merged_callback->wait_for_file_list = wait_for_file_list; for (node = merged->details->directories; node != NULL; node = node->next) { merged_callback->non_ready_directories = g_list_prepend @@ -254,12 +253,12 @@ build_merged_callback_list (NautilusDirectory *directory, /* Create a monitor on each of the directories in the list. */ static void merged_monitor_add (NautilusDirectory *directory, - gconstpointer client, - gboolean monitor_hidden_files, - gboolean monitor_backup_files, - GList *file_attributes, - NautilusDirectoryCallback callback, - gpointer callback_data) + gconstpointer client, + gboolean monitor_hidden_files, + gboolean monitor_backup_files, + NautilusFileAttributes file_attributes, + NautilusDirectoryCallback callback, + gpointer callback_data) { NautilusMergedDirectory *merged; MergedMonitor *monitor; @@ -274,7 +273,6 @@ merged_monitor_add (NautilusDirectory *directory, monitor = g_hash_table_lookup (merged->details->monitors, client); if (monitor != NULL) { g_assert (monitor->merged == merged); - eel_g_list_free_deep (monitor->monitor_attributes); } else { monitor = g_new0 (MergedMonitor, 1); monitor->merged = merged; @@ -283,7 +281,7 @@ merged_monitor_add (NautilusDirectory *directory, } monitor->monitor_hidden_files = monitor_hidden_files; monitor->monitor_backup_files = monitor_backup_files; - monitor->monitor_attributes = eel_g_str_list_copy (file_attributes); + monitor->monitor_attributes = file_attributes; /* Call through to the real directory add calls. */ merged_callback_list = NULL; @@ -310,7 +308,6 @@ merged_monitor_destroy (NautilusMergedDirectory *merged, MergedMonitor *monitor) nautilus_directory_file_monitor_remove (node->data, monitor); } - eel_g_list_free_deep (monitor->monitor_attributes); g_free (monitor); } diff --git a/libnautilus-private/nautilus-mime-actions.c b/libnautilus-private/nautilus-mime-actions.c index eff1d8c9e..7fa0e9c18 100644 --- a/libnautilus-private/nautilus-mime-actions.c +++ b/libnautilus-private/nautilus-mime-actions.c @@ -70,12 +70,11 @@ is_known_mime_type (const char *mime_type) static gboolean nautilus_mime_actions_check_if_minimum_attributes_ready (NautilusFile *file) { - GList *attributes; + NautilusFileAttributes attributes; gboolean ready; attributes = nautilus_mime_actions_get_minimum_file_attributes (); ready = nautilus_file_check_if_ready (file, attributes); - g_list_free (attributes); return ready; } @@ -83,40 +82,30 @@ nautilus_mime_actions_check_if_minimum_attributes_ready (NautilusFile *file) static gboolean nautilus_mime_actions_check_if_full_attributes_ready (NautilusFile *file) { - GList *attributes; + NautilusFileAttributes attributes; gboolean ready; attributes = nautilus_mime_actions_get_full_file_attributes (); ready = nautilus_file_check_if_ready (file, attributes); - g_list_free (attributes); return ready; } -GList * +NautilusFileAttributes nautilus_mime_actions_get_minimum_file_attributes (void) { - GList *attributes; - - attributes = NULL; - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_METADATA); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE); - - return attributes; + return NAUTILUS_FILE_ATTRIBUTE_ACTIVATION_URI | + NAUTILUS_FILE_ATTRIBUTE_METADATA | + NAUTILUS_FILE_ATTRIBUTE_MIME_TYPE; } -GList * +NautilusFileAttributes nautilus_mime_actions_get_full_file_attributes (void) { - GList *attributes; - - attributes = nautilus_mime_actions_get_minimum_file_attributes (); - attributes = g_list_prepend (attributes, NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES); - - return attributes; + return nautilus_mime_actions_get_minimum_file_attributes () | + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES; } diff --git a/libnautilus-private/nautilus-mime-actions.h b/libnautilus-private/nautilus-mime-actions.h index 6939cdabf..533dddb47 100644 --- a/libnautilus-private/nautilus-mime-actions.h +++ b/libnautilus-private/nautilus-mime-actions.h @@ -30,8 +30,8 @@ #include <libnautilus-private/nautilus-file.h> -GList *nautilus_mime_actions_get_minimum_file_attributes (void); -GList *nautilus_mime_actions_get_full_file_attributes (void); +NautilusFileAttributes nautilus_mime_actions_get_minimum_file_attributes (void); +NautilusFileAttributes nautilus_mime_actions_get_full_file_attributes (void); gboolean nautilus_mime_actions_file_needs_full_file_attributes (NautilusFile *file); GnomeVFSMimeActionType nautilus_mime_get_default_action_type_for_file (NautilusFile *file); GnomeVFSMimeAction * nautilus_mime_get_default_action_for_file (NautilusFile *file); diff --git a/libnautilus-private/nautilus-program-choosing.c b/libnautilus-private/nautilus-program-choosing.c index 66cedde4c..1c837fb6f 100644 --- a/libnautilus-private/nautilus-program-choosing.c +++ b/libnautilus-private/nautilus-program-choosing.c @@ -229,7 +229,7 @@ nautilus_choose_component_for_file (NautilusFile *file, gpointer callback_data) { ChooseComponentCallbackData *choose_data; - GList *attributes; + NautilusFileAttributes attributes; g_return_if_fail (NAUTILUS_IS_FILE (file)); g_return_if_fail (parent_window == NULL || GTK_IS_WINDOW (parent_window)); @@ -266,7 +266,6 @@ nautilus_choose_component_for_file (NautilusFile *file, attributes, choose_component_callback, choose_data); - g_list_free (attributes); } void @@ -369,7 +368,7 @@ nautilus_choose_application_for_file (NautilusFile *file, gpointer callback_data) { ChooseApplicationCallbackData *choose_data; - GList *attributes; + NautilusFileAttributes attributes; g_return_if_fail (NAUTILUS_IS_FILE (file)); g_return_if_fail (parent_window == NULL || GTK_IS_WINDOW (parent_window)); @@ -406,7 +405,6 @@ nautilus_choose_application_for_file (NautilusFile *file, attributes, choose_application_callback, choose_data); - g_list_free (attributes); } diff --git a/libnautilus-private/nautilus-trash-file.c b/libnautilus-private/nautilus-trash-file.c index 5b1f67be2..77126bdf4 100644 --- a/libnautilus-private/nautilus-trash-file.c +++ b/libnautilus-private/nautilus-trash-file.c @@ -52,8 +52,8 @@ typedef struct { NautilusFileCallback callback; gpointer callback_data; - GList *delegated_attributes; - GList *non_delegated_attributes; + NautilusFileAttributes delegated_attributes; + NautilusFileAttributes non_delegated_attributes; GList *non_ready_files; @@ -63,16 +63,10 @@ typedef struct { typedef struct { NautilusTrashFile *trash; - GList *delegated_attributes; - GList *non_delegated_attributes; + NautilusFileAttributes delegated_attributes; + NautilusFileAttributes non_delegated_attributes; } TrashMonitor; -static const char * const delegated_attributes[] = { - NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS, - NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT, - NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES -}; - static void nautilus_trash_file_init (gpointer object, gpointer klass); static void nautilus_trash_file_class_init (gpointer klass); @@ -81,44 +75,31 @@ EEL_CLASS_BOILERPLATE (NautilusTrashFile, nautilus_trash_file, NAUTILUS_TYPE_FILE) -static gboolean -is_delegated_attribute (const char *attribute) +static NautilusFileAttributes +get_delegated_attributes_mask (void) { - guint i; - - g_return_val_if_fail (attribute != NULL, FALSE); - - for (i = 0; i < G_N_ELEMENTS (delegated_attributes); i++) { - if (strcmp (attribute, delegated_attributes[i]) == 0) { - return TRUE; - } - } - return FALSE; -} - -static gboolean -is_delegated_attribute_predicate (gpointer data, - gpointer callback_data) -{ - return is_delegated_attribute (data); + return NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS | + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT | + NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES; } static void -partition_attributes (GList *attributes, - GList **delegated_attributes, - GList **non_delegated_attributes) +partition_attributes (NautilusFileAttributes attributes, + NautilusFileAttributes *delegated_attributes, + NautilusFileAttributes *non_delegated_attributes) { - *delegated_attributes = eel_g_list_partition - (attributes, - is_delegated_attribute_predicate, - NULL, - non_delegated_attributes); + NautilusFileAttributes mask; + + mask = get_delegated_attributes_mask (); + + *delegated_attributes = attributes & mask; + *non_delegated_attributes = attributes & ~mask; } static void real_monitor_add (NautilusFile *file, gconstpointer client, - GList *attributes) + NautilusFileAttributes attributes) { nautilus_directory_monitor_add_internal (file->details->directory, file, @@ -135,7 +116,7 @@ real_monitor_remove (NautilusFile *file, static void real_call_when_ready (NautilusFile *file, - GList *attributes, + NautilusFileAttributes attributes, NautilusFileCallback callback, gpointer callback_data) @@ -157,7 +138,7 @@ real_cancel_call_when_ready (NautilusFile *file, static gboolean real_check_if_ready (NautilusFile *file, - GList *attributes) + NautilusFileAttributes attributes) { return nautilus_directory_check_if_ready_internal (file->details->directory, file, @@ -194,8 +175,6 @@ trash_callback_destroy (TrashCallback *trash_callback) g_assert (NAUTILUS_IS_TRASH_FILE (trash_callback->trash)); nautilus_file_unref (NAUTILUS_FILE (trash_callback->trash)); - eel_g_list_free_deep (trash_callback->delegated_attributes); - eel_g_list_free_deep (trash_callback->non_delegated_attributes); g_list_free (trash_callback->non_ready_files); g_free (trash_callback); } @@ -382,7 +361,7 @@ remove_directory_callback (NautilusTrashDirectory *trash_directory, static void trash_file_call_when_ready (NautilusFile *file, - GList *attributes, + NautilusFileAttributes attributes, NautilusFileCallback callback, gpointer callback_data) @@ -409,7 +388,7 @@ trash_file_call_when_ready (NautilusFile *file, trash_callback->callback_data = callback_data; trash_callback->initializing = TRUE; - partition_attributes (eel_g_str_list_copy (attributes), + partition_attributes (attributes, &trash_callback->delegated_attributes, &trash_callback->non_delegated_attributes); @@ -476,16 +455,16 @@ trash_file_cancel_call_when_ready (NautilusFile *file, static gboolean trash_file_check_if_ready (NautilusFile *file, - GList *attributes) + NautilusFileAttributes attributes) { - GList *delegated_attributes, *non_delegated_attributes; + NautilusFileAttributes delegated_attributes, non_delegated_attributes; NautilusTrashFile *trash; GList *node; gboolean ready; trash = NAUTILUS_TRASH_FILE (file); - partition_attributes (g_list_copy (attributes), + partition_attributes (attributes, &delegated_attributes, &non_delegated_attributes); @@ -501,16 +480,13 @@ trash_file_check_if_ready (NautilusFile *file, } } - g_list_free (delegated_attributes); - g_list_free (non_delegated_attributes); - return ready; } static void trash_file_monitor_add (NautilusFile *file, gconstpointer client, - GList *attributes) + NautilusFileAttributes attributes) { NautilusTrashFile *trash; TrashMonitor *monitor; @@ -524,8 +500,6 @@ trash_file_monitor_add (NautilusFile *file, monitor = g_hash_table_lookup (trash->details->monitors, client); if (monitor != NULL) { g_assert (monitor->trash == trash); - eel_g_list_free_deep (monitor->delegated_attributes); - eel_g_list_free_deep (monitor->non_delegated_attributes); } else { monitor = g_new0 (TrashMonitor, 1); monitor->trash = trash; @@ -533,7 +507,7 @@ trash_file_monitor_add (NautilusFile *file, (gpointer) client, monitor); } - partition_attributes (eel_g_str_list_copy (attributes), + partition_attributes (attributes, &monitor->delegated_attributes, &monitor->non_delegated_attributes); @@ -568,8 +542,6 @@ trash_file_monitor_remove (NautilusFile *file, nautilus_file_monitor_remove (node->data, monitor); } - eel_g_list_free_deep (monitor->delegated_attributes); - eel_g_list_free_deep (monitor->non_delegated_attributes); g_free (monitor); } diff --git a/libnautilus-private/nautilus-trash-monitor.c b/libnautilus-private/nautilus-trash-monitor.c index 679366083..85a49dfb8 100644 --- a/libnautilus-private/nautilus-trash-monitor.c +++ b/libnautilus-private/nautilus-trash-monitor.c @@ -125,7 +125,7 @@ nautilus_trash_monitor_init (gpointer object, gpointer klass) { NautilusDirectory *trash_directory; NautilusTrashMonitor *trash_monitor; - GList *attributes; + NautilusFileAttributes attributes; trash_monitor = NAUTILUS_TRASH_MONITOR (object); @@ -137,15 +137,13 @@ nautilus_trash_monitor_init (gpointer object, gpointer klass) trash_monitor->details->trash_directory = trash_directory; trash_monitor->details->empty = TRUE; - attributes = g_list_prepend (NULL, NAUTILUS_FILE_ATTRIBUTE_METADATA); + attributes = NAUTILUS_FILE_ATTRIBUTE_METADATA; /* Make sure we get notified about changes */ nautilus_directory_file_monitor_add (trash_directory, trash_monitor, TRUE, TRUE, attributes, nautilus_trash_files_changed_callback, trash_monitor); - g_list_free (attributes); - g_signal_connect_object (trash_directory, "files_added", G_CALLBACK (nautilus_trash_files_changed_callback), trash_monitor, 0); g_signal_connect_object (trash_directory, "files_changed", diff --git a/libnautilus-private/nautilus-vfs-directory.c b/libnautilus-private/nautilus-vfs-directory.c index 191a1b664..7bc0c0c11 100644 --- a/libnautilus-private/nautilus-vfs-directory.c +++ b/libnautilus-private/nautilus-vfs-directory.c @@ -58,7 +58,7 @@ vfs_contains_file (NautilusDirectory *directory, static void vfs_call_when_ready (NautilusDirectory *directory, - GList *file_attributes, + NautilusFileAttributes file_attributes, gboolean wait_for_file_list, NautilusDirectoryCallback callback, gpointer callback_data) @@ -95,7 +95,7 @@ vfs_file_monitor_add (NautilusDirectory *directory, gconstpointer client, gboolean monitor_hidden_files, gboolean monitor_backup_files, - GList *file_attributes, + NautilusFileAttributes file_attributes, NautilusDirectoryCallback callback, gpointer callback_data) { @@ -124,14 +124,13 @@ vfs_file_monitor_remove (NautilusDirectory *directory, static void vfs_force_reload (NautilusDirectory *directory) { - GList *all_attributes; + NautilusFileAttributes all_attributes; g_assert (NAUTILUS_IS_DIRECTORY (directory)); all_attributes = nautilus_file_get_all_attributes (); nautilus_directory_force_reload_internal (directory, all_attributes); - g_list_free (all_attributes); } static gboolean diff --git a/libnautilus-private/nautilus-vfs-file.c b/libnautilus-private/nautilus-vfs-file.c index e8bc76a64..dfe3555b5 100644 --- a/libnautilus-private/nautilus-vfs-file.c +++ b/libnautilus-private/nautilus-vfs-file.c @@ -41,7 +41,7 @@ EEL_CLASS_BOILERPLATE (NautilusVFSFile, static void vfs_file_monitor_add (NautilusFile *file, gconstpointer client, - GList *attributes) + NautilusFileAttributes attributes) { nautilus_directory_monitor_add_internal (file->details->directory, file, @@ -58,7 +58,7 @@ vfs_file_monitor_remove (NautilusFile *file, static void vfs_file_call_when_ready (NautilusFile *file, - GList *file_attributes, + NautilusFileAttributes file_attributes, NautilusFileCallback callback, gpointer callback_data) @@ -80,7 +80,7 @@ vfs_file_cancel_call_when_ready (NautilusFile *file, static gboolean vfs_file_check_if_ready (NautilusFile *file, - GList *file_attributes) + NautilusFileAttributes file_attributes) { return nautilus_directory_check_if_ready_internal (file->details->directory, file, |