summaryrefslogtreecommitdiff
path: root/libnautilus-private
diff options
context:
space:
mode:
Diffstat (limited to 'libnautilus-private')
-rw-r--r--libnautilus-private/nautilus-directory-async.c141
-rw-r--r--libnautilus-private/nautilus-directory-background.c5
-rw-r--r--libnautilus-private/nautilus-directory-private.h12
-rw-r--r--libnautilus-private/nautilus-directory.c27
-rw-r--r--libnautilus-private/nautilus-directory.h9
-rw-r--r--libnautilus-private/nautilus-file-attributes.h26
-rw-r--r--libnautilus-private/nautilus-file-private.h16
-rw-r--r--libnautilus-private/nautilus-file.c58
-rw-r--r--libnautilus-private/nautilus-file.h63
-rw-r--r--libnautilus-private/nautilus-icon-factory.c17
-rw-r--r--libnautilus-private/nautilus-icon-factory.h4
-rw-r--r--libnautilus-private/nautilus-link.c10
-rw-r--r--libnautilus-private/nautilus-merged-directory.c25
-rw-r--r--libnautilus-private/nautilus-mime-actions.c29
-rw-r--r--libnautilus-private/nautilus-mime-actions.h4
-rw-r--r--libnautilus-private/nautilus-program-choosing.c6
-rw-r--r--libnautilus-private/nautilus-trash-file.c84
-rw-r--r--libnautilus-private/nautilus-trash-monitor.c6
-rw-r--r--libnautilus-private/nautilus-vfs-directory.c7
-rw-r--r--libnautilus-private/nautilus-vfs-file.c6
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,