summaryrefslogtreecommitdiff
path: root/src/nautilus-file.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nautilus-file.c')
-rw-r--r--src/nautilus-file.c12789
1 files changed, 6885 insertions, 5904 deletions
diff --git a/src/nautilus-file.c b/src/nautilus-file.c
index c68753e98..32d2af88a 100644
--- a/src/nautilus-file.c
+++ b/src/nautilus-file.c
@@ -1,23 +1,23 @@
/*
- nautilus-file.c: Nautilus file model.
-
- Copyright (C) 1999, 2000, 2001 Eazel, Inc.
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public
- License along with this program; if not, see <http://www.gnu.org/licenses/>.
-
- Author: Darin Adler <darin@bentspoon.com>
-*/
+ * nautilus-file.c: Nautilus file model.
+ *
+ * Copyright (C) 1999, 2000, 2001 Eazel, Inc.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this program; if not, see <http://www.gnu.org/licenses/>.
+ *
+ * Author: Darin Adler <darin@bentspoon.com>
+ */
#include <config.h>
#include "nautilus-file.h"
@@ -71,7 +71,7 @@
#include "nautilus-debug.h"
/* Time in seconds to cache getpwuid results */
-#define GETPWUID_CACHE_TIME (5*60)
+#define GETPWUID_CACHE_TIME (5 * 60)
#define ICON_NAME_THUMBNAIL_LOADING "image-loading"
@@ -92,24 +92,28 @@
/* Name of Nautilus trash directories */
#define TRASH_DIRECTORY_NAME ".Trash"
-#define METADATA_ID_IS_LIST_MASK (1<<31)
+#define METADATA_ID_IS_LIST_MASK (1 << 31)
-typedef enum {
- SHOW_HIDDEN = 1 << 0,
+typedef enum
+{
+ SHOW_HIDDEN = 1 << 0,
} FilterOptions;
-typedef enum {
- NAUTILUS_DATE_FORMAT_REGULAR = 0,
- NAUTILUS_DATE_FORMAT_REGULAR_WITH_TIME = 1,
- NAUTILUS_DATE_FORMAT_FULL = 2,
+typedef enum
+{
+ NAUTILUS_DATE_FORMAT_REGULAR = 0,
+ NAUTILUS_DATE_FORMAT_REGULAR_WITH_TIME = 1,
+ NAUTILUS_DATE_FORMAT_FULL = 2,
} NautilusDateFormat;
-typedef void (* ModifyListFunction) (GList **list, NautilusFile *file);
+typedef void (*ModifyListFunction) (GList **list,
+ NautilusFile *file);
-enum {
- CHANGED,
- UPDATED_DEEP_COUNT_IN_PROGRESS,
- LAST_SIGNAL
+enum
+{
+ CHANGED,
+ UPDATED_DEEP_COUNT_IN_PROGRESS,
+ LAST_SIGNAL
};
static guint signals[LAST_SIGNAL];
@@ -123,837 +127,927 @@ static NautilusSpeedTradeoffValue show_file_thumbs;
static NautilusSpeedTradeoffValue show_directory_item_count;
static GQuark attribute_name_q,
- attribute_size_q,
- attribute_type_q,
- attribute_detailed_type_q,
- attribute_modification_date_q,
- attribute_date_modified_q,
- attribute_date_modified_full_q,
- attribute_date_modified_with_time_q,
- attribute_accessed_date_q,
- attribute_date_accessed_q,
- attribute_date_accessed_full_q,
- attribute_mime_type_q,
- attribute_size_detail_q,
- attribute_deep_size_q,
- attribute_deep_file_count_q,
- attribute_deep_directory_count_q,
- attribute_deep_total_count_q,
- attribute_search_relevance_q,
- attribute_trashed_on_q,
- attribute_trashed_on_full_q,
- attribute_trash_orig_path_q,
- attribute_permissions_q,
- attribute_selinux_context_q,
- attribute_octal_permissions_q,
- attribute_owner_q,
- attribute_group_q,
- attribute_uri_q,
- attribute_where_q,
- attribute_link_target_q,
- attribute_volume_q,
- attribute_free_space_q;
-
-static void nautilus_file_info_iface_init (NautilusFileInfoIface *iface);
-static char * nautilus_file_get_owner_as_string (NautilusFile *file,
- gboolean include_real_name);
-static char * nautilus_file_get_type_as_string (NautilusFile *file);
-static char * nautilus_file_get_detailed_type_as_string (NautilusFile *file);
-static gboolean update_info_and_name (NautilusFile *file,
- GFileInfo *info);
-static const char * nautilus_file_peek_display_name (NautilusFile *file);
-static const char * nautilus_file_peek_display_name_collation_key (NautilusFile *file);
-static void file_mount_unmounted (GMount *mount, gpointer data);
+ attribute_size_q,
+ attribute_type_q,
+ attribute_detailed_type_q,
+ attribute_modification_date_q,
+ attribute_date_modified_q,
+ attribute_date_modified_full_q,
+ attribute_date_modified_with_time_q,
+ attribute_accessed_date_q,
+ attribute_date_accessed_q,
+ attribute_date_accessed_full_q,
+ attribute_mime_type_q,
+ attribute_size_detail_q,
+ attribute_deep_size_q,
+ attribute_deep_file_count_q,
+ attribute_deep_directory_count_q,
+ attribute_deep_total_count_q,
+ attribute_search_relevance_q,
+ attribute_trashed_on_q,
+ attribute_trashed_on_full_q,
+ attribute_trash_orig_path_q,
+ attribute_permissions_q,
+ attribute_selinux_context_q,
+ attribute_octal_permissions_q,
+ attribute_owner_q,
+ attribute_group_q,
+ attribute_uri_q,
+ attribute_where_q,
+ attribute_link_target_q,
+ attribute_volume_q,
+ attribute_free_space_q;
+
+static void nautilus_file_info_iface_init (NautilusFileInfoIface *iface);
+static char *nautilus_file_get_owner_as_string (NautilusFile *file,
+ gboolean include_real_name);
+static char *nautilus_file_get_type_as_string (NautilusFile *file);
+static char *nautilus_file_get_detailed_type_as_string (NautilusFile *file);
+static gboolean update_info_and_name (NautilusFile *file,
+ GFileInfo *info);
+static const char *nautilus_file_peek_display_name (NautilusFile *file);
+static const char *nautilus_file_peek_display_name_collation_key (NautilusFile *file);
+static void file_mount_unmounted (GMount *mount,
+ gpointer data);
static void metadata_hash_free (GHashTable *hash);
static gboolean real_drag_can_accept_files (NautilusFile *drop_target_item);
G_DEFINE_TYPE_WITH_CODE (NautilusFile, nautilus_file, G_TYPE_OBJECT,
- G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_FILE_INFO,
- nautilus_file_info_iface_init));
+ G_IMPLEMENT_INTERFACE (NAUTILUS_TYPE_FILE_INFO,
+ nautilus_file_info_iface_init));
static void
nautilus_file_init (NautilusFile *file)
{
- file->details = G_TYPE_INSTANCE_GET_PRIVATE ((file), NAUTILUS_TYPE_FILE, NautilusFileDetails);
+ file->details = G_TYPE_INSTANCE_GET_PRIVATE ((file), NAUTILUS_TYPE_FILE, NautilusFileDetails);
- nautilus_file_clear_info (file);
- nautilus_file_invalidate_extension_info_internal (file);
+ nautilus_file_clear_info (file);
+ nautilus_file_invalidate_extension_info_internal (file);
- file->details->free_space = -1;
+ file->details->free_space = -1;
}
-static GObject*
+static GObject *
nautilus_file_constructor (GType type,
- guint n_construct_properties,
- GObjectConstructParam *construct_params)
+ guint n_construct_properties,
+ GObjectConstructParam *construct_params)
{
- GObject *object;
- NautilusFile *file;
+ GObject *object;
+ NautilusFile *file;
+
+ object = (*G_OBJECT_CLASS (nautilus_file_parent_class)->constructor)(type,
+ n_construct_properties,
+ construct_params);
- object = (* G_OBJECT_CLASS (nautilus_file_parent_class)->constructor) (type,
- n_construct_properties,
- construct_params);
+ file = NAUTILUS_FILE (object);
- file = NAUTILUS_FILE (object);
+ /* Set to default type after full construction */
+ if (NAUTILUS_FILE_GET_CLASS (file)->default_file_type != G_FILE_TYPE_UNKNOWN)
+ {
+ file->details->type = NAUTILUS_FILE_GET_CLASS (file)->default_file_type;
+ }
- /* Set to default type after full construction */
- if (NAUTILUS_FILE_GET_CLASS (file)->default_file_type != G_FILE_TYPE_UNKNOWN) {
- file->details->type = NAUTILUS_FILE_GET_CLASS (file)->default_file_type;
- }
-
- return object;
+ return object;
}
gboolean
nautilus_file_set_display_name (NautilusFile *file,
- const char *display_name,
- const char *edit_name,
- gboolean custom)
-{
- gboolean changed;
-
- if (custom && display_name == NULL) {
- /* We're re-setting a custom display name, invalidate it if
- we already set it so that the old one is re-read */
- if (file->details->got_custom_display_name) {
- file->details->got_custom_display_name = FALSE;
- nautilus_file_invalidate_attributes (file,
- NAUTILUS_FILE_ATTRIBUTE_INFO);
- }
- return FALSE;
- }
-
- if (display_name == NULL || *display_name == 0) {
- return FALSE;
- }
-
- if (!custom && file->details->got_custom_display_name) {
- return FALSE;
- }
-
- if (edit_name == NULL) {
- edit_name = display_name;
- }
-
- changed = FALSE;
-
- if (g_strcmp0 (eel_ref_str_peek (file->details->display_name), display_name) != 0) {
- changed = TRUE;
-
- eel_ref_str_unref (file->details->display_name);
-
- if (g_strcmp0 (eel_ref_str_peek (file->details->name), display_name) == 0) {
- file->details->display_name = eel_ref_str_ref (file->details->name);
- } else {
- file->details->display_name = eel_ref_str_new (display_name);
- }
-
- g_free (file->details->display_name_collation_key);
- file->details->display_name_collation_key = g_utf8_collate_key_for_filename (display_name, -1);
- }
-
- if (g_strcmp0 (eel_ref_str_peek (file->details->edit_name), edit_name) != 0) {
- changed = TRUE;
-
- eel_ref_str_unref (file->details->edit_name);
- if (g_strcmp0 (eel_ref_str_peek (file->details->display_name), edit_name) == 0) {
- file->details->edit_name = eel_ref_str_ref (file->details->display_name);
- } else {
- file->details->edit_name = eel_ref_str_new (edit_name);
- }
- }
-
- file->details->got_custom_display_name = custom;
- return changed;
+ const char *display_name,
+ const char *edit_name,
+ gboolean custom)
+{
+ gboolean changed;
+
+ if (custom && display_name == NULL)
+ {
+ /* We're re-setting a custom display name, invalidate it if
+ * we already set it so that the old one is re-read */
+ if (file->details->got_custom_display_name)
+ {
+ file->details->got_custom_display_name = FALSE;
+ nautilus_file_invalidate_attributes (file,
+ NAUTILUS_FILE_ATTRIBUTE_INFO);
+ }
+ return FALSE;
+ }
+
+ if (display_name == NULL || *display_name == 0)
+ {
+ return FALSE;
+ }
+
+ if (!custom && file->details->got_custom_display_name)
+ {
+ return FALSE;
+ }
+
+ if (edit_name == NULL)
+ {
+ edit_name = display_name;
+ }
+
+ changed = FALSE;
+
+ if (g_strcmp0 (eel_ref_str_peek (file->details->display_name), display_name) != 0)
+ {
+ changed = TRUE;
+
+ eel_ref_str_unref (file->details->display_name);
+
+ if (g_strcmp0 (eel_ref_str_peek (file->details->name), display_name) == 0)
+ {
+ file->details->display_name = eel_ref_str_ref (file->details->name);
+ }
+ else
+ {
+ file->details->display_name = eel_ref_str_new (display_name);
+ }
+
+ g_free (file->details->display_name_collation_key);
+ file->details->display_name_collation_key = g_utf8_collate_key_for_filename (display_name, -1);
+ }
+
+ if (g_strcmp0 (eel_ref_str_peek (file->details->edit_name), edit_name) != 0)
+ {
+ changed = TRUE;
+
+ eel_ref_str_unref (file->details->edit_name);
+ if (g_strcmp0 (eel_ref_str_peek (file->details->display_name), edit_name) == 0)
+ {
+ file->details->edit_name = eel_ref_str_ref (file->details->display_name);
+ }
+ else
+ {
+ file->details->edit_name = eel_ref_str_new (edit_name);
+ }
+ }
+
+ file->details->got_custom_display_name = custom;
+ return changed;
}
static void
nautilus_file_clear_display_name (NautilusFile *file)
{
- eel_ref_str_unref (file->details->display_name);
- file->details->display_name = NULL;
- g_free (file->details->display_name_collation_key);
- file->details->display_name_collation_key = NULL;
- eel_ref_str_unref (file->details->edit_name);
- file->details->edit_name = NULL;
+ eel_ref_str_unref (file->details->display_name);
+ file->details->display_name = NULL;
+ g_free (file->details->display_name_collation_key);
+ file->details->display_name_collation_key = NULL;
+ eel_ref_str_unref (file->details->edit_name);
+ file->details->edit_name = NULL;
}
static gboolean
-foreach_metadata_free (gpointer key,
- gpointer value,
- gpointer user_data)
+foreach_metadata_free (gpointer key,
+ gpointer value,
+ gpointer user_data)
{
- guint id;
+ guint id;
- id = GPOINTER_TO_UINT (key);
+ id = GPOINTER_TO_UINT (key);
- if (id & METADATA_ID_IS_LIST_MASK) {
- g_strfreev ((char **)value);
- } else {
- g_free ((char *)value);
- }
- return TRUE;
+ if (id & METADATA_ID_IS_LIST_MASK)
+ {
+ g_strfreev ((char **) value);
+ }
+ else
+ {
+ g_free ((char *) value);
+ }
+ return TRUE;
}
static void
metadata_hash_free (GHashTable *hash)
{
- g_hash_table_foreach_remove (hash,
- foreach_metadata_free,
- NULL);
- g_hash_table_destroy (hash);
+ g_hash_table_foreach_remove (hash,
+ foreach_metadata_free,
+ NULL);
+ g_hash_table_destroy (hash);
}
static gboolean
metadata_hash_equal (GHashTable *hash1,
- GHashTable *hash2)
-{
- GHashTableIter iter;
- gpointer key1, value1, value2;
- guint id;
-
- if (hash1 == NULL && hash2 == NULL) {
- return TRUE;
- }
-
- if (hash1 == NULL || hash2 == NULL) {
- return FALSE;
- }
-
- if (g_hash_table_size (hash1) !=
- g_hash_table_size (hash2)) {
- return FALSE;
- }
-
- g_hash_table_iter_init (&iter, hash1);
- while (g_hash_table_iter_next (&iter, &key1, &value1)) {
- value2 = g_hash_table_lookup (hash2, key1);
- if (value2 == NULL) {
- return FALSE;
- }
- id = GPOINTER_TO_UINT (key1);
- if (id & METADATA_ID_IS_LIST_MASK) {
- if (!eel_g_strv_equal ((char **)value1, (char **)value2)) {
- return FALSE;
- }
- } else {
- if (strcmp ((char *)value1, (char *)value2) != 0) {
- return FALSE;
- }
- }
- }
-
- return TRUE;
+ GHashTable *hash2)
+{
+ GHashTableIter iter;
+ gpointer key1, value1, value2;
+ guint id;
+
+ if (hash1 == NULL && hash2 == NULL)
+ {
+ return TRUE;
+ }
+
+ if (hash1 == NULL || hash2 == NULL)
+ {
+ return FALSE;
+ }
+
+ if (g_hash_table_size (hash1) !=
+ g_hash_table_size (hash2))
+ {
+ return FALSE;
+ }
+
+ g_hash_table_iter_init (&iter, hash1);
+ while (g_hash_table_iter_next (&iter, &key1, &value1))
+ {
+ value2 = g_hash_table_lookup (hash2, key1);
+ if (value2 == NULL)
+ {
+ return FALSE;
+ }
+ id = GPOINTER_TO_UINT (key1);
+ if (id & METADATA_ID_IS_LIST_MASK)
+ {
+ if (!eel_g_strv_equal ((char **) value1, (char **) value2))
+ {
+ return FALSE;
+ }
+ }
+ else
+ {
+ if (strcmp ((char *) value1, (char *) value2) != 0)
+ {
+ return FALSE;
+ }
+ }
+ }
+
+ return TRUE;
}
static void
clear_metadata (NautilusFile *file)
{
- if (file->details->metadata) {
- metadata_hash_free (file->details->metadata);
- file->details->metadata = NULL;
- }
+ if (file->details->metadata)
+ {
+ metadata_hash_free (file->details->metadata);
+ file->details->metadata = NULL;
+ }
}
static GHashTable *
get_metadata_from_info (GFileInfo *info)
{
- GHashTable *metadata;
- char **attrs;
- guint id;
- int i;
- GFileAttributeType type;
- gpointer value;
+ GHashTable *metadata;
+ char **attrs;
+ guint id;
+ int i;
+ GFileAttributeType type;
+ gpointer value;
- attrs = g_file_info_list_attributes (info, "metadata");
+ attrs = g_file_info_list_attributes (info, "metadata");
- metadata = g_hash_table_new (NULL, NULL);
+ metadata = g_hash_table_new (NULL, NULL);
- for (i = 0; attrs[i] != NULL; i++) {
- id = nautilus_metadata_get_id (attrs[i] + strlen ("metadata::"));
- if (id == 0) {
- continue;
- }
+ for (i = 0; attrs[i] != NULL; i++)
+ {
+ id = nautilus_metadata_get_id (attrs[i] + strlen ("metadata::"));
+ if (id == 0)
+ {
+ continue;
+ }
- if (!g_file_info_get_attribute_data (info, attrs[i],
- &type, &value, NULL)) {
- continue;
- }
+ if (!g_file_info_get_attribute_data (info, attrs[i],
+ &type, &value, NULL))
+ {
+ continue;
+ }
- if (type == G_FILE_ATTRIBUTE_TYPE_STRING) {
- g_hash_table_insert (metadata, GUINT_TO_POINTER (id),
- g_strdup ((char *)value));
- } else if (type == G_FILE_ATTRIBUTE_TYPE_STRINGV) {
- id |= METADATA_ID_IS_LIST_MASK;
- g_hash_table_insert (metadata, GUINT_TO_POINTER (id),
- g_strdupv ((char **)value));
- }
- }
+ if (type == G_FILE_ATTRIBUTE_TYPE_STRING)
+ {
+ g_hash_table_insert (metadata, GUINT_TO_POINTER (id),
+ g_strdup ((char *) value));
+ }
+ else if (type == G_FILE_ATTRIBUTE_TYPE_STRINGV)
+ {
+ id |= METADATA_ID_IS_LIST_MASK;
+ g_hash_table_insert (metadata, GUINT_TO_POINTER (id),
+ g_strdupv ((char **) value));
+ }
+ }
- g_strfreev (attrs);
+ g_strfreev (attrs);
- return metadata;
+ return metadata;
}
gboolean
nautilus_file_update_metadata_from_info (NautilusFile *file,
- GFileInfo *info)
+ GFileInfo *info)
{
- gboolean changed = FALSE;
+ gboolean changed = FALSE;
- if (g_file_info_has_namespace (info, "metadata")) {
- GHashTable *metadata;
+ if (g_file_info_has_namespace (info, "metadata"))
+ {
+ GHashTable *metadata;
- metadata = get_metadata_from_info (info);
- if (!metadata_hash_equal (metadata,
- file->details->metadata)) {
- changed = TRUE;
- clear_metadata (file);
- file->details->metadata = metadata;
- } else {
- metadata_hash_free (metadata);
- }
- } else if (file->details->metadata) {
- changed = TRUE;
- clear_metadata (file);
- }
- return changed;
+ metadata = get_metadata_from_info (info);
+ if (!metadata_hash_equal (metadata,
+ file->details->metadata))
+ {
+ changed = TRUE;
+ clear_metadata (file);
+ file->details->metadata = metadata;
+ }
+ else
+ {
+ metadata_hash_free (metadata);
+ }
+ }
+ else if (file->details->metadata)
+ {
+ changed = TRUE;
+ clear_metadata (file);
+ }
+ return changed;
}
void
nautilus_file_clear_info (NautilusFile *file)
{
- file->details->got_file_info = FALSE;
- if (file->details->get_info_error) {
- g_error_free (file->details->get_info_error);
- file->details->get_info_error = NULL;
- }
- /* Reset to default type, which might be other than unknown for
- special kinds of files like the desktop or a search directory */
- file->details->type = NAUTILUS_FILE_GET_CLASS (file)->default_file_type;
-
- if (!file->details->got_custom_display_name) {
- nautilus_file_clear_display_name (file);
- }
-
- if (!file->details->got_custom_activation_uri &&
- file->details->activation_uri != NULL) {
- g_free (file->details->activation_uri);
- file->details->activation_uri = NULL;
- }
-
- if (file->details->icon != NULL) {
- g_object_unref (file->details->icon);
- file->details->icon = NULL;
- }
-
- g_free (file->details->thumbnail_path);
- file->details->thumbnail_path = NULL;
- file->details->thumbnailing_failed = FALSE;
-
- file->details->is_launcher = FALSE;
- file->details->is_foreign_link = FALSE;
- file->details->is_trusted_link = FALSE;
- file->details->is_symlink = FALSE;
- file->details->is_hidden = FALSE;
- file->details->is_mountpoint = FALSE;
- file->details->uid = -1;
- file->details->gid = -1;
- file->details->can_read = TRUE;
- file->details->can_write = TRUE;
- file->details->can_execute = TRUE;
- file->details->can_delete = TRUE;
- file->details->can_trash = TRUE;
- file->details->can_rename = TRUE;
- file->details->can_mount = FALSE;
- file->details->can_unmount = FALSE;
- file->details->can_eject = FALSE;
- file->details->can_start = FALSE;
- file->details->can_start_degraded = FALSE;
- file->details->can_stop = FALSE;
- file->details->start_stop_type = G_DRIVE_START_STOP_TYPE_UNKNOWN;
- file->details->can_poll_for_media = FALSE;
- file->details->is_media_check_automatic = FALSE;
- file->details->has_permissions = FALSE;
- file->details->permissions = 0;
- file->details->size = -1;
- file->details->sort_order = 0;
- file->details->mtime = 0;
- file->details->atime = 0;
- file->details->trash_time = 0;
- g_free (file->details->symlink_name);
- file->details->symlink_name = NULL;
- eel_ref_str_unref (file->details->mime_type);
- file->details->mime_type = NULL;
- g_free (file->details->selinux_context);
- file->details->selinux_context = NULL;
- g_free (file->details->description);
- file->details->description = NULL;
- eel_ref_str_unref (file->details->owner);
- file->details->owner = NULL;
- eel_ref_str_unref (file->details->owner_real);
- file->details->owner_real = NULL;
- eel_ref_str_unref (file->details->group);
- file->details->group = NULL;
-
- eel_ref_str_unref (file->details->filesystem_id);
- file->details->filesystem_id = NULL;
-
- clear_metadata (file);
+ file->details->got_file_info = FALSE;
+ if (file->details->get_info_error)
+ {
+ g_error_free (file->details->get_info_error);
+ file->details->get_info_error = NULL;
+ }
+ /* Reset to default type, which might be other than unknown for
+ * special kinds of files like the desktop or a search directory */
+ file->details->type = NAUTILUS_FILE_GET_CLASS (file)->default_file_type;
+
+ if (!file->details->got_custom_display_name)
+ {
+ nautilus_file_clear_display_name (file);
+ }
+
+ if (!file->details->got_custom_activation_uri &&
+ file->details->activation_uri != NULL)
+ {
+ g_free (file->details->activation_uri);
+ file->details->activation_uri = NULL;
+ }
+
+ if (file->details->icon != NULL)
+ {
+ g_object_unref (file->details->icon);
+ file->details->icon = NULL;
+ }
+
+ g_free (file->details->thumbnail_path);
+ file->details->thumbnail_path = NULL;
+ file->details->thumbnailing_failed = FALSE;
+
+ file->details->is_launcher = FALSE;
+ file->details->is_foreign_link = FALSE;
+ file->details->is_trusted_link = FALSE;
+ file->details->is_symlink = FALSE;
+ file->details->is_hidden = FALSE;
+ file->details->is_mountpoint = FALSE;
+ file->details->uid = -1;
+ file->details->gid = -1;
+ file->details->can_read = TRUE;
+ file->details->can_write = TRUE;
+ file->details->can_execute = TRUE;
+ file->details->can_delete = TRUE;
+ file->details->can_trash = TRUE;
+ file->details->can_rename = TRUE;
+ file->details->can_mount = FALSE;
+ file->details->can_unmount = FALSE;
+ file->details->can_eject = FALSE;
+ file->details->can_start = FALSE;
+ file->details->can_start_degraded = FALSE;
+ file->details->can_stop = FALSE;
+ file->details->start_stop_type = G_DRIVE_START_STOP_TYPE_UNKNOWN;
+ file->details->can_poll_for_media = FALSE;
+ file->details->is_media_check_automatic = FALSE;
+ file->details->has_permissions = FALSE;
+ file->details->permissions = 0;
+ file->details->size = -1;
+ file->details->sort_order = 0;
+ file->details->mtime = 0;
+ file->details->atime = 0;
+ file->details->trash_time = 0;
+ g_free (file->details->symlink_name);
+ file->details->symlink_name = NULL;
+ eel_ref_str_unref (file->details->mime_type);
+ file->details->mime_type = NULL;
+ g_free (file->details->selinux_context);
+ file->details->selinux_context = NULL;
+ g_free (file->details->description);
+ file->details->description = NULL;
+ eel_ref_str_unref (file->details->owner);
+ file->details->owner = NULL;
+ eel_ref_str_unref (file->details->owner_real);
+ file->details->owner_real = NULL;
+ eel_ref_str_unref (file->details->group);
+ file->details->group = NULL;
+
+ eel_ref_str_unref (file->details->filesystem_id);
+ file->details->filesystem_id = NULL;
+
+ clear_metadata (file);
}
void
-nautilus_file_set_directory (NautilusFile *file,
- NautilusDirectory *directory)
+nautilus_file_set_directory (NautilusFile *file,
+ NautilusDirectory *directory)
{
- char *parent_uri;
+ char *parent_uri;
- g_clear_object (&file->details->directory);
- g_free (file->details->directory_name_collation_key);
+ g_clear_object (&file->details->directory);
+ g_free (file->details->directory_name_collation_key);
- file->details->directory = nautilus_directory_ref (directory);
+ file->details->directory = nautilus_directory_ref (directory);
- parent_uri = nautilus_file_get_parent_uri (file);
- file->details->directory_name_collation_key = g_utf8_collate_key_for_filename (parent_uri, -1);
- g_free (parent_uri);
+ parent_uri = nautilus_file_get_parent_uri (file);
+ file->details->directory_name_collation_key = g_utf8_collate_key_for_filename (parent_uri, -1);
+ g_free (parent_uri);
}
static NautilusFile *
nautilus_file_new_from_filename (NautilusDirectory *directory,
- const char *filename,
- gboolean self_owned)
+ const char *filename,
+ gboolean self_owned)
{
- NautilusFile *file;
+ NautilusFile *file;
- g_assert (NAUTILUS_IS_DIRECTORY (directory));
- g_assert (filename != NULL);
- g_assert (filename[0] != '\0');
+ g_assert (NAUTILUS_IS_DIRECTORY (directory));
+ g_assert (filename != NULL);
+ g_assert (filename[0] != '\0');
- file = nautilus_directory_new_file_from_filename (directory, filename, self_owned);
- file->details->name = eel_ref_str_new (filename);
+ file = nautilus_directory_new_file_from_filename (directory, filename, self_owned);
+ file->details->name = eel_ref_str_new (filename);
#ifdef NAUTILUS_FILE_DEBUG_REF
- DEBUG_REF_PRINTF("%10p ref'd", file);
+ DEBUG_REF_PRINTF ("%10p ref'd", file);
#endif
- return file;
+ return file;
}
static void
-modify_link_hash_table (NautilusFile *file,
- ModifyListFunction modify_function)
-{
- char *target_uri;
- gboolean found;
- gpointer original_key;
- GList **list_ptr;
-
- /* Check if there is a symlink name. If none, we are OK. */
- if (file->details->symlink_name == NULL || !nautilus_file_is_symbolic_link (file)) {
- return;
- }
-
- /* Create the hash table first time through. */
- if (symbolic_links == NULL) {
- symbolic_links = g_hash_table_new (g_str_hash, g_str_equal);
- }
-
- target_uri = nautilus_file_get_symbolic_link_target_uri (file);
-
- /* Find the old contents of the hash table. */
- found = g_hash_table_lookup_extended
- (symbolic_links, target_uri,
- &original_key, (gpointer *)&list_ptr);
- if (!found) {
- list_ptr = g_new0 (GList *, 1);
- original_key = g_strdup (target_uri);
- g_hash_table_insert (symbolic_links, original_key, list_ptr);
- }
- (* modify_function) (list_ptr, file);
- if (*list_ptr == NULL) {
- g_hash_table_remove (symbolic_links, target_uri);
- g_free (list_ptr);
- g_free (original_key);
- }
- g_free (target_uri);
+modify_link_hash_table (NautilusFile *file,
+ ModifyListFunction modify_function)
+{
+ char *target_uri;
+ gboolean found;
+ gpointer original_key;
+ GList **list_ptr;
+
+ /* Check if there is a symlink name. If none, we are OK. */
+ if (file->details->symlink_name == NULL || !nautilus_file_is_symbolic_link (file))
+ {
+ return;
+ }
+
+ /* Create the hash table first time through. */
+ if (symbolic_links == NULL)
+ {
+ symbolic_links = g_hash_table_new (g_str_hash, g_str_equal);
+ }
+
+ target_uri = nautilus_file_get_symbolic_link_target_uri (file);
+
+ /* Find the old contents of the hash table. */
+ found = g_hash_table_lookup_extended
+ (symbolic_links, target_uri,
+ &original_key, (gpointer *) &list_ptr);
+ if (!found)
+ {
+ list_ptr = g_new0 (GList *, 1);
+ original_key = g_strdup (target_uri);
+ g_hash_table_insert (symbolic_links, original_key, list_ptr);
+ }
+ (*modify_function)(list_ptr, file);
+ if (*list_ptr == NULL)
+ {
+ g_hash_table_remove (symbolic_links, target_uri);
+ g_free (list_ptr);
+ g_free (original_key);
+ }
+ g_free (target_uri);
}
static void
-symbolic_link_weak_notify (gpointer data,
- GObject *where_the_object_was)
+symbolic_link_weak_notify (gpointer data,
+ GObject *where_the_object_was)
{
- GList **list = data;
- /* This really shouldn't happen, but we're seeing some strange things in
- bug #358172 where the symlink hashtable isn't correctly updated. */
- *list = g_list_remove (*list, where_the_object_was);
+ GList **list = data;
+ /* This really shouldn't happen, but we're seeing some strange things in
+ * bug #358172 where the symlink hashtable isn't correctly updated. */
+ *list = g_list_remove (*list, where_the_object_was);
}
static void
-add_to_link_hash_table_list (GList **list, NautilusFile *file)
+add_to_link_hash_table_list (GList **list,
+ NautilusFile *file)
{
- if (g_list_find (*list, file) != NULL) {
- g_warning ("Adding file to symlink_table multiple times. "
- "Please add feedback of what you were doing at http://bugzilla.gnome.org/show_bug.cgi?id=358172\n");
- return;
- }
- g_object_weak_ref (G_OBJECT (file), symbolic_link_weak_notify, list);
- *list = g_list_prepend (*list, file);
+ if (g_list_find (*list, file) != NULL)
+ {
+ g_warning ("Adding file to symlink_table multiple times. "
+ "Please add feedback of what you were doing at http://bugzilla.gnome.org/show_bug.cgi?id=358172\n");
+ return;
+ }
+ g_object_weak_ref (G_OBJECT (file), symbolic_link_weak_notify, list);
+ *list = g_list_prepend (*list, file);
}
static void
add_to_link_hash_table (NautilusFile *file)
{
- modify_link_hash_table (file, add_to_link_hash_table_list);
+ modify_link_hash_table (file, add_to_link_hash_table_list);
}
static void
-remove_from_link_hash_table_list (GList **list, NautilusFile *file)
+remove_from_link_hash_table_list (GList **list,
+ NautilusFile *file)
{
- if (g_list_find (*list, file) != NULL) {
- g_object_weak_unref (G_OBJECT (file), symbolic_link_weak_notify, list);
- *list = g_list_remove (*list, file);
- }
+ if (g_list_find (*list, file) != NULL)
+ {
+ g_object_weak_unref (G_OBJECT (file), symbolic_link_weak_notify, list);
+ *list = g_list_remove (*list, file);
+ }
}
static void
remove_from_link_hash_table (NautilusFile *file)
{
- modify_link_hash_table (file, remove_from_link_hash_table_list);
+ modify_link_hash_table (file, remove_from_link_hash_table_list);
}
NautilusFile *
nautilus_file_new_from_info (NautilusDirectory *directory,
- GFileInfo *info)
+ GFileInfo *info)
{
- NautilusFile *file;
+ NautilusFile *file;
- g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (directory), NULL);
- g_return_val_if_fail (info != NULL, NULL);
+ g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (directory), NULL);
+ g_return_val_if_fail (info != NULL, NULL);
- file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_VFS_FILE, NULL));
- nautilus_file_set_directory (file, directory);
+ file = NAUTILUS_FILE (g_object_new (NAUTILUS_TYPE_VFS_FILE, NULL));
+ nautilus_file_set_directory (file, directory);
- update_info_and_name (file, info);
+ update_info_and_name (file, info);
#ifdef NAUTILUS_FILE_DEBUG_REF
- DEBUG_REF_PRINTF("%10p ref'd", file);
+ DEBUG_REF_PRINTF ("%10p ref'd", file);
#endif
- return file;
+ return file;
}
static NautilusFile *
-nautilus_file_get_internal (GFile *location, gboolean create)
-{
- gboolean self_owned;
- NautilusDirectory *directory;
- NautilusFile *file;
- GFile *parent;
- char *basename;
-
- g_assert (location != NULL);
-
- parent = g_file_get_parent (location);
-
- self_owned = FALSE;
- if (parent == NULL) {
- self_owned = TRUE;
- parent = g_object_ref (location);
- }
-
- /* Get object that represents the directory. */
- directory = nautilus_directory_get_internal (parent, create);
-
- g_object_unref (parent);
-
- /* Get the name for the file. */
- if (self_owned && directory != NULL) {
- basename = nautilus_directory_get_name_for_self_as_new_file (directory);
- } else {
- basename = g_file_get_basename (location);
- }
- /* Check to see if it's a file that's already known. */
- if (directory == NULL) {
- file = NULL;
- } else if (self_owned) {
- file = directory->details->as_file;
- } else {
- file = nautilus_directory_find_file_by_name (directory, basename);
- }
-
- /* Ref or create the file. */
- if (file != NULL) {
- nautilus_file_ref (file);
- } else if (create) {
- file = nautilus_file_new_from_filename (directory, basename, self_owned);
- if (self_owned) {
- g_assert (directory->details->as_file == NULL);
- directory->details->as_file = file;
- } else {
- nautilus_directory_add_file (directory, file);
- }
- }
-
- g_free (basename);
- nautilus_directory_unref (directory);
-
- return file;
+nautilus_file_get_internal (GFile *location,
+ gboolean create)
+{
+ gboolean self_owned;
+ NautilusDirectory *directory;
+ NautilusFile *file;
+ GFile *parent;
+ char *basename;
+
+ g_assert (location != NULL);
+
+ parent = g_file_get_parent (location);
+
+ self_owned = FALSE;
+ if (parent == NULL)
+ {
+ self_owned = TRUE;
+ parent = g_object_ref (location);
+ }
+
+ /* Get object that represents the directory. */
+ directory = nautilus_directory_get_internal (parent, create);
+
+ g_object_unref (parent);
+
+ /* Get the name for the file. */
+ if (self_owned && directory != NULL)
+ {
+ basename = nautilus_directory_get_name_for_self_as_new_file (directory);
+ }
+ else
+ {
+ basename = g_file_get_basename (location);
+ }
+ /* Check to see if it's a file that's already known. */
+ if (directory == NULL)
+ {
+ file = NULL;
+ }
+ else if (self_owned)
+ {
+ file = directory->details->as_file;
+ }
+ else
+ {
+ file = nautilus_directory_find_file_by_name (directory, basename);
+ }
+
+ /* Ref or create the file. */
+ if (file != NULL)
+ {
+ nautilus_file_ref (file);
+ }
+ else if (create)
+ {
+ file = nautilus_file_new_from_filename (directory, basename, self_owned);
+ if (self_owned)
+ {
+ g_assert (directory->details->as_file == NULL);
+ directory->details->as_file = file;
+ }
+ else
+ {
+ nautilus_directory_add_file (directory, file);
+ }
+ }
+
+ g_free (basename);
+ nautilus_directory_unref (directory);
+
+ return file;
}
NautilusFile *
nautilus_file_get (GFile *location)
{
- return nautilus_file_get_internal (location, TRUE);
+ return nautilus_file_get_internal (location, TRUE);
}
NautilusFile *
nautilus_file_get_existing (GFile *location)
{
- return nautilus_file_get_internal (location, FALSE);
+ return nautilus_file_get_internal (location, FALSE);
}
NautilusFile *
nautilus_file_get_existing_by_uri (const char *uri)
{
- GFile *location;
- NautilusFile *file;
-
- location = g_file_new_for_uri (uri);
- file = nautilus_file_get_internal (location, FALSE);
- g_object_unref (location);
-
- return file;
+ GFile *location;
+ NautilusFile *file;
+
+ location = g_file_new_for_uri (uri);
+ file = nautilus_file_get_internal (location, FALSE);
+ g_object_unref (location);
+
+ return file;
}
NautilusFile *
nautilus_file_get_by_uri (const char *uri)
{
- GFile *location;
- NautilusFile *file;
-
- location = g_file_new_for_uri (uri);
- file = nautilus_file_get_internal (location, TRUE);
- g_object_unref (location);
-
- return file;
+ GFile *location;
+ NautilusFile *file;
+
+ location = g_file_new_for_uri (uri);
+ file = nautilus_file_get_internal (location, TRUE);
+ g_object_unref (location);
+
+ return file;
}
gboolean
nautilus_file_is_self_owned (NautilusFile *file)
{
- return file->details->directory->details->as_file == file;
+ return file->details->directory->details->as_file == file;
}
static void
finalize (GObject *object)
{
- NautilusDirectory *directory;
- NautilusFile *file;
- char *uri;
-
- file = NAUTILUS_FILE (object);
-
- g_assert (file->details->operations_in_progress == NULL);
-
- if (file->details->is_thumbnailing) {
- uri = nautilus_file_get_uri (file);
- nautilus_thumbnail_remove_from_queue (uri);
- g_free (uri);
- }
-
- nautilus_async_destroying_file (file);
-
- remove_from_link_hash_table (file);
-
- directory = file->details->directory;
-
- if (nautilus_file_is_self_owned (file)) {
- directory->details->as_file = NULL;
- } else {
- if (!file->details->is_gone) {
- nautilus_directory_remove_file (directory, file);
- }
- }
-
- if (file->details->get_info_error) {
- g_error_free (file->details->get_info_error);
- }
-
- nautilus_directory_unref (directory);
- eel_ref_str_unref (file->details->name);
- eel_ref_str_unref (file->details->display_name);
- g_free (file->details->display_name_collation_key);
- g_free (file->details->directory_name_collation_key);
- eel_ref_str_unref (file->details->edit_name);
- if (file->details->icon) {
- g_object_unref (file->details->icon);
- }
- g_free (file->details->thumbnail_path);
- g_free (file->details->symlink_name);
- eel_ref_str_unref (file->details->mime_type);
- eel_ref_str_unref (file->details->owner);
- eel_ref_str_unref (file->details->owner_real);
- eel_ref_str_unref (file->details->group);
- g_free (file->details->selinux_context);
- g_free (file->details->description);
- g_free (file->details->activation_uri);
- g_clear_object (&file->details->custom_icon);
-
- if (file->details->thumbnail) {
- g_object_unref (file->details->thumbnail);
- }
- if (file->details->scaled_thumbnail) {
- g_object_unref (file->details->scaled_thumbnail);
- }
-
- if (file->details->mount) {
- g_signal_handlers_disconnect_by_func (file->details->mount, file_mount_unmounted, file);
- g_object_unref (file->details->mount);
- }
-
- eel_ref_str_unref (file->details->filesystem_id);
- eel_ref_str_unref (file->details->filesystem_type);
- file->details->filesystem_type = NULL;
- g_free (file->details->trash_orig_path);
-
- g_list_free_full (file->details->mime_list, g_free);
- g_list_free_full (file->details->pending_extension_emblems, g_free);
- g_list_free_full (file->details->extension_emblems, g_free);
- g_list_free_full (file->details->pending_info_providers, g_object_unref);
-
- if (file->details->pending_extension_attributes) {
- g_hash_table_destroy (file->details->pending_extension_attributes);
- }
-
- if (file->details->extension_attributes) {
- g_hash_table_destroy (file->details->extension_attributes);
- }
-
- if (file->details->metadata) {
- metadata_hash_free (file->details->metadata);
- }
-
- G_OBJECT_CLASS (nautilus_file_parent_class)->finalize (object);
+ NautilusDirectory *directory;
+ NautilusFile *file;
+ char *uri;
+
+ file = NAUTILUS_FILE (object);
+
+ g_assert (file->details->operations_in_progress == NULL);
+
+ if (file->details->is_thumbnailing)
+ {
+ uri = nautilus_file_get_uri (file);
+ nautilus_thumbnail_remove_from_queue (uri);
+ g_free (uri);
+ }
+
+ nautilus_async_destroying_file (file);
+
+ remove_from_link_hash_table (file);
+
+ directory = file->details->directory;
+
+ if (nautilus_file_is_self_owned (file))
+ {
+ directory->details->as_file = NULL;
+ }
+ else
+ {
+ if (!file->details->is_gone)
+ {
+ nautilus_directory_remove_file (directory, file);
+ }
+ }
+
+ if (file->details->get_info_error)
+ {
+ g_error_free (file->details->get_info_error);
+ }
+
+ nautilus_directory_unref (directory);
+ eel_ref_str_unref (file->details->name);
+ eel_ref_str_unref (file->details->display_name);
+ g_free (file->details->display_name_collation_key);
+ g_free (file->details->directory_name_collation_key);
+ eel_ref_str_unref (file->details->edit_name);
+ if (file->details->icon)
+ {
+ g_object_unref (file->details->icon);
+ }
+ g_free (file->details->thumbnail_path);
+ g_free (file->details->symlink_name);
+ eel_ref_str_unref (file->details->mime_type);
+ eel_ref_str_unref (file->details->owner);
+ eel_ref_str_unref (file->details->owner_real);
+ eel_ref_str_unref (file->details->group);
+ g_free (file->details->selinux_context);
+ g_free (file->details->description);
+ g_free (file->details->activation_uri);
+ g_clear_object (&file->details->custom_icon);
+
+ if (file->details->thumbnail)
+ {
+ g_object_unref (file->details->thumbnail);
+ }
+ if (file->details->scaled_thumbnail)
+ {
+ g_object_unref (file->details->scaled_thumbnail);
+ }
+
+ if (file->details->mount)
+ {
+ g_signal_handlers_disconnect_by_func (file->details->mount, file_mount_unmounted, file);
+ g_object_unref (file->details->mount);
+ }
+
+ eel_ref_str_unref (file->details->filesystem_id);
+ eel_ref_str_unref (file->details->filesystem_type);
+ file->details->filesystem_type = NULL;
+ g_free (file->details->trash_orig_path);
+
+ g_list_free_full (file->details->mime_list, g_free);
+ g_list_free_full (file->details->pending_extension_emblems, g_free);
+ g_list_free_full (file->details->extension_emblems, g_free);
+ g_list_free_full (file->details->pending_info_providers, g_object_unref);
+
+ if (file->details->pending_extension_attributes)
+ {
+ g_hash_table_destroy (file->details->pending_extension_attributes);
+ }
+
+ if (file->details->extension_attributes)
+ {
+ g_hash_table_destroy (file->details->extension_attributes);
+ }
+
+ if (file->details->metadata)
+ {
+ metadata_hash_free (file->details->metadata);
+ }
+
+ G_OBJECT_CLASS (nautilus_file_parent_class)->finalize (object);
}
NautilusFile *
nautilus_file_ref (NautilusFile *file)
{
- if (file == NULL) {
- return NULL;
- }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ if (file == NULL)
+ {
+ return NULL;
+ }
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
#ifdef NAUTILUS_FILE_DEBUG_REF
- DEBUG_REF_PRINTF("%10p ref'd", file);
+ DEBUG_REF_PRINTF ("%10p ref'd", file);
#endif
-
- return g_object_ref (file);
+
+ return g_object_ref (file);
}
void
nautilus_file_unref (NautilusFile *file)
{
- if (file == NULL) {
- return;
- }
+ if (file == NULL)
+ {
+ return;
+ }
- g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
#ifdef NAUTILUS_FILE_DEBUG_REF
- DEBUG_REF_PRINTF("%10p unref'd", file);
+ DEBUG_REF_PRINTF ("%10p unref'd", file);
#endif
-
- g_object_unref (file);
+
+ g_object_unref (file);
}
/**
* nautilus_file_get_parent_uri_for_display:
- *
+ *
* Get the uri for the parent directory.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: A string representing the parent's location,
* formatted for user display (including stripping "file://").
* If the parent is NULL, returns the empty string.
- */
+ */
char *
-nautilus_file_get_parent_uri_for_display (NautilusFile *file)
+nautilus_file_get_parent_uri_for_display (NautilusFile *file)
{
- GFile *parent;
- char *result;
+ GFile *parent;
+ char *result;
+
+ g_assert (NAUTILUS_IS_FILE (file));
- g_assert (NAUTILUS_IS_FILE (file));
-
- parent = nautilus_file_get_parent_location (file);
- if (parent) {
- result = g_file_get_parse_name (parent);
- g_object_unref (parent);
- } else {
- result = g_strdup ("");
- }
+ parent = nautilus_file_get_parent_location (file);
+ if (parent)
+ {
+ result = g_file_get_parse_name (parent);
+ g_object_unref (parent);
+ }
+ else
+ {
+ result = g_strdup ("");
+ }
- return result;
+ return result;
}
/**
* nautilus_file_get_parent_uri:
- *
+ *
* Get the uri for the parent directory.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: A string for the parent's location, in "raw URI" form.
* Use nautilus_file_get_parent_uri_for_display instead if the
* result is to be displayed on-screen.
* If the parent is NULL, returns the empty string.
- */
+ */
char *
-nautilus_file_get_parent_uri (NautilusFile *file)
+nautilus_file_get_parent_uri (NautilusFile *file)
{
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (nautilus_file_is_self_owned (file)) {
- /* Callers expect an empty string, not a NULL. */
- return g_strdup ("");
- }
+ g_assert (NAUTILUS_IS_FILE (file));
- return nautilus_directory_get_uri (file->details->directory);
+ if (nautilus_file_is_self_owned (file))
+ {
+ /* Callers expect an empty string, not a NULL. */
+ return g_strdup ("");
+ }
+
+ return nautilus_directory_get_uri (file->details->directory);
}
GFile *
-nautilus_file_get_parent_location (NautilusFile *file)
+nautilus_file_get_parent_location (NautilusFile *file)
{
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (nautilus_file_is_self_owned (file)) {
- return NULL;
- }
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ if (nautilus_file_is_self_owned (file))
+ {
+ return NULL;
+ }
- return nautilus_directory_get_location (file->details->directory);
+ return nautilus_directory_get_location (file->details->directory);
}
NautilusFile *
nautilus_file_get_parent (NautilusFile *file)
{
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (nautilus_file_is_self_owned (file)) {
- return NULL;
- }
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ if (nautilus_file_is_self_owned (file))
+ {
+ return NULL;
+ }
- return nautilus_directory_get_corresponding_file (file->details->directory);
+ return nautilus_directory_get_corresponding_file (file->details->directory);
}
/**
* nautilus_file_can_read:
- *
+ *
* Check whether the user is allowed to read the contents of this file.
- *
+ *
* @file: The file to check.
- *
+ *
* Return value: FALSE if the user is definitely not allowed to read
* the contents of the file. If the user has read permission, or
* the code can't tell whether the user has read permission,
@@ -962,18 +1056,18 @@ nautilus_file_get_parent (NautilusFile *file)
gboolean
nautilus_file_can_read (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
-
- return file->details->can_read;
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+
+ return file->details->can_read;
}
/**
* nautilus_file_can_write:
- *
+ *
* Check whether the user is allowed to write to this file.
- *
+ *
* @file: The file to check.
- *
+ *
* Return value: FALSE if the user is definitely not allowed to write
* to the file. If the user has write permission, or
* the code can't tell whether the user has write permission,
@@ -982,18 +1076,18 @@ nautilus_file_can_read (NautilusFile *file)
gboolean
nautilus_file_can_write (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return file->details->can_write;
+ return file->details->can_write;
}
/**
* nautilus_file_can_execute:
- *
+ *
* Check whether the user is allowed to execute this file.
- *
+ *
* @file: The file to check.
- *
+ *
* Return value: FALSE if the user is definitely not allowed to execute
* the file. If the user has execute permission, or
* the code can't tell whether the user has execute permission,
@@ -1002,487 +1096,557 @@ nautilus_file_can_write (NautilusFile *file)
gboolean
nautilus_file_can_execute (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return file->details->can_execute;
+ return file->details->can_execute;
}
gboolean
nautilus_file_can_mount (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
-
- return file->details->can_mount;
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+
+ return file->details->can_mount;
}
-
+
gboolean
nautilus_file_can_unmount (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return file->details->can_unmount ||
- (file->details->mount != NULL &&
- g_mount_can_unmount (file->details->mount));
+ return file->details->can_unmount ||
+ (file->details->mount != NULL &&
+ g_mount_can_unmount (file->details->mount));
}
-
+
gboolean
nautilus_file_can_eject (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return file->details->can_eject ||
- (file->details->mount != NULL &&
- g_mount_can_eject (file->details->mount));
+ return file->details->can_eject ||
+ (file->details->mount != NULL &&
+ g_mount_can_eject (file->details->mount));
}
gboolean
nautilus_file_can_start (NautilusFile *file)
{
- gboolean ret;
- GDrive *drive;
+ gboolean ret;
+ GDrive *drive;
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- ret = FALSE;
+ ret = FALSE;
- if (file->details->can_start) {
- ret = TRUE;
- goto out;
- }
+ if (file->details->can_start)
+ {
+ ret = TRUE;
+ goto out;
+ }
- if (file->details->mount != NULL) {
- drive = g_mount_get_drive (file->details->mount);
- if (drive != NULL) {
- ret = g_drive_can_start (drive);
- g_object_unref (drive);
- }
- }
+ if (file->details->mount != NULL)
+ {
+ drive = g_mount_get_drive (file->details->mount);
+ if (drive != NULL)
+ {
+ ret = g_drive_can_start (drive);
+ g_object_unref (drive);
+ }
+ }
- out:
- return ret;
+out:
+ return ret;
}
gboolean
nautilus_file_can_start_degraded (NautilusFile *file)
{
- gboolean ret;
- GDrive *drive;
+ gboolean ret;
+ GDrive *drive;
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- ret = FALSE;
+ ret = FALSE;
- if (file->details->can_start_degraded) {
- ret = TRUE;
- goto out;
- }
+ if (file->details->can_start_degraded)
+ {
+ ret = TRUE;
+ goto out;
+ }
- if (file->details->mount != NULL) {
- drive = g_mount_get_drive (file->details->mount);
- if (drive != NULL) {
- ret = g_drive_can_start_degraded (drive);
- g_object_unref (drive);
- }
- }
+ if (file->details->mount != NULL)
+ {
+ drive = g_mount_get_drive (file->details->mount);
+ if (drive != NULL)
+ {
+ ret = g_drive_can_start_degraded (drive);
+ g_object_unref (drive);
+ }
+ }
- out:
- return ret;
+out:
+ return ret;
}
gboolean
nautilus_file_can_poll_for_media (NautilusFile *file)
{
- gboolean ret;
- GDrive *drive;
+ gboolean ret;
+ GDrive *drive;
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- ret = FALSE;
+ ret = FALSE;
- if (file->details->can_poll_for_media) {
- ret = TRUE;
- goto out;
- }
+ if (file->details->can_poll_for_media)
+ {
+ ret = TRUE;
+ goto out;
+ }
- if (file->details->mount != NULL) {
- drive = g_mount_get_drive (file->details->mount);
- if (drive != NULL) {
- ret = g_drive_can_poll_for_media (drive);
- g_object_unref (drive);
- }
- }
+ if (file->details->mount != NULL)
+ {
+ drive = g_mount_get_drive (file->details->mount);
+ if (drive != NULL)
+ {
+ ret = g_drive_can_poll_for_media (drive);
+ g_object_unref (drive);
+ }
+ }
- out:
- return ret;
+out:
+ return ret;
}
gboolean
nautilus_file_is_media_check_automatic (NautilusFile *file)
{
- gboolean ret;
- GDrive *drive;
+ gboolean ret;
+ GDrive *drive;
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- ret = FALSE;
+ ret = FALSE;
- if (file->details->is_media_check_automatic) {
- ret = TRUE;
- goto out;
- }
+ if (file->details->is_media_check_automatic)
+ {
+ ret = TRUE;
+ goto out;
+ }
- if (file->details->mount != NULL) {
- drive = g_mount_get_drive (file->details->mount);
- if (drive != NULL) {
- ret = g_drive_is_media_check_automatic (drive);
- g_object_unref (drive);
- }
- }
+ if (file->details->mount != NULL)
+ {
+ drive = g_mount_get_drive (file->details->mount);
+ if (drive != NULL)
+ {
+ ret = g_drive_is_media_check_automatic (drive);
+ g_object_unref (drive);
+ }
+ }
- out:
- return ret;
+out:
+ return ret;
}
gboolean
nautilus_file_can_stop (NautilusFile *file)
{
- gboolean ret;
- GDrive *drive;
+ gboolean ret;
+ GDrive *drive;
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- ret = FALSE;
+ ret = FALSE;
- if (file->details->can_stop) {
- ret = TRUE;
- goto out;
- }
+ if (file->details->can_stop)
+ {
+ ret = TRUE;
+ goto out;
+ }
- if (file->details->mount != NULL) {
- drive = g_mount_get_drive (file->details->mount);
- if (drive != NULL) {
- ret = g_drive_can_stop (drive);
- g_object_unref (drive);
- }
- }
+ if (file->details->mount != NULL)
+ {
+ drive = g_mount_get_drive (file->details->mount);
+ if (drive != NULL)
+ {
+ ret = g_drive_can_stop (drive);
+ g_object_unref (drive);
+ }
+ }
- out:
- return ret;
+out:
+ return ret;
}
GDriveStartStopType
nautilus_file_get_start_stop_type (NautilusFile *file)
{
- GDriveStartStopType ret;
- GDrive *drive;
+ GDriveStartStopType ret;
+ GDrive *drive;
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- ret = file->details->start_stop_type;
- if (ret != G_DRIVE_START_STOP_TYPE_UNKNOWN)
- goto out;
+ ret = file->details->start_stop_type;
+ if (ret != G_DRIVE_START_STOP_TYPE_UNKNOWN)
+ {
+ goto out;
+ }
- if (file->details->mount != NULL) {
- drive = g_mount_get_drive (file->details->mount);
- if (drive != NULL) {
- ret = g_drive_get_start_stop_type (drive);
- g_object_unref (drive);
- }
- }
+ if (file->details->mount != NULL)
+ {
+ drive = g_mount_get_drive (file->details->mount);
+ if (drive != NULL)
+ {
+ ret = g_drive_get_start_stop_type (drive);
+ g_object_unref (drive);
+ }
+ }
- out:
- return ret;
+out:
+ return ret;
}
void
-nautilus_file_mount (NautilusFile *file,
- GMountOperation *mount_op,
- GCancellable *cancellable,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- GError *error;
-
- if (NAUTILUS_FILE_GET_CLASS (file)->mount == NULL) {
- if (callback) {
- error = NULL;
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("This file cannot be mounted"));
- callback (file, NULL, error, callback_data);
- g_error_free (error);
- }
- } else {
- NAUTILUS_FILE_GET_CLASS (file)->mount (file, mount_op, cancellable, callback, callback_data);
- }
-}
-
-typedef struct {
- NautilusFile *file;
- NautilusFileOperationCallback callback;
- gpointer callback_data;
+nautilus_file_mount (NautilusFile *file,
+ GMountOperation *mount_op,
+ GCancellable *cancellable,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GError *error;
+
+ if (NAUTILUS_FILE_GET_CLASS (file)->mount == NULL)
+ {
+ if (callback)
+ {
+ error = NULL;
+ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("This file cannot be mounted"));
+ callback (file, NULL, error, callback_data);
+ g_error_free (error);
+ }
+ }
+ else
+ {
+ NAUTILUS_FILE_GET_CLASS (file)->mount (file, mount_op, cancellable, callback, callback_data);
+ }
+}
+
+typedef struct
+{
+ NautilusFile *file;
+ NautilusFileOperationCallback callback;
+ gpointer callback_data;
} UnmountData;
static void
unmount_done (void *callback_data)
{
- UnmountData *data;
+ UnmountData *data;
- data = (UnmountData *)callback_data;
- if (data->callback) {
- data->callback (data->file, NULL, NULL, data->callback_data);
- }
- nautilus_file_unref (data->file);
- g_free (data);
+ data = (UnmountData *) callback_data;
+ if (data->callback)
+ {
+ data->callback (data->file, NULL, NULL, data->callback_data);
+ }
+ nautilus_file_unref (data->file);
+ g_free (data);
}
void
-nautilus_file_unmount (NautilusFile *file,
- GMountOperation *mount_op,
- GCancellable *cancellable,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- GError *error;
- UnmountData *data;
-
- if (file->details->can_unmount) {
- if (NAUTILUS_FILE_GET_CLASS (file)->unmount != NULL) {
- NAUTILUS_FILE_GET_CLASS (file)->unmount (file, mount_op, cancellable, callback, callback_data);
- } else {
- if (callback) {
- error = NULL;
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("This file cannot be unmounted"));
- callback (file, NULL, error, callback_data);
- g_error_free (error);
- }
- }
- } else if (file->details->mount != NULL &&
- g_mount_can_unmount (file->details->mount)) {
- data = g_new0 (UnmountData, 1);
- data->file = nautilus_file_ref (file);
- data->callback = callback;
- data->callback_data = callback_data;
- nautilus_file_operations_unmount_mount_full (NULL, file->details->mount, NULL, FALSE, TRUE, unmount_done, data);
- } else if (callback) {
- callback (file, NULL, NULL, callback_data);
- }
+nautilus_file_unmount (NautilusFile *file,
+ GMountOperation *mount_op,
+ GCancellable *cancellable,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GError *error;
+ UnmountData *data;
+
+ if (file->details->can_unmount)
+ {
+ if (NAUTILUS_FILE_GET_CLASS (file)->unmount != NULL)
+ {
+ NAUTILUS_FILE_GET_CLASS (file)->unmount (file, mount_op, cancellable, callback, callback_data);
+ }
+ else
+ {
+ if (callback)
+ {
+ error = NULL;
+ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("This file cannot be unmounted"));
+ callback (file, NULL, error, callback_data);
+ g_error_free (error);
+ }
+ }
+ }
+ else if (file->details->mount != NULL &&
+ g_mount_can_unmount (file->details->mount))
+ {
+ data = g_new0 (UnmountData, 1);
+ data->file = nautilus_file_ref (file);
+ data->callback = callback;
+ data->callback_data = callback_data;
+ nautilus_file_operations_unmount_mount_full (NULL, file->details->mount, NULL, FALSE, TRUE, unmount_done, data);
+ }
+ else if (callback)
+ {
+ callback (file, NULL, NULL, callback_data);
+ }
}
void
-nautilus_file_eject (NautilusFile *file,
- GMountOperation *mount_op,
- GCancellable *cancellable,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- GError *error;
- UnmountData *data;
-
- if (file->details->can_eject) {
- if (NAUTILUS_FILE_GET_CLASS (file)->eject != NULL) {
- NAUTILUS_FILE_GET_CLASS (file)->eject (file, mount_op, cancellable, callback, callback_data);
- } else {
- if (callback) {
- error = NULL;
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("This file cannot be ejected"));
- callback (file, NULL, error, callback_data);
- g_error_free (error);
- }
- }
- } else if (file->details->mount != NULL &&
- g_mount_can_eject (file->details->mount)) {
- data = g_new0 (UnmountData, 1);
- data->file = nautilus_file_ref (file);
- data->callback = callback;
- data->callback_data = callback_data;
- nautilus_file_operations_unmount_mount_full (NULL, file->details->mount, NULL, TRUE, TRUE, unmount_done, data);
- } else if (callback) {
- callback (file, NULL, NULL, callback_data);
- }
+nautilus_file_eject (NautilusFile *file,
+ GMountOperation *mount_op,
+ GCancellable *cancellable,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GError *error;
+ UnmountData *data;
+
+ if (file->details->can_eject)
+ {
+ if (NAUTILUS_FILE_GET_CLASS (file)->eject != NULL)
+ {
+ NAUTILUS_FILE_GET_CLASS (file)->eject (file, mount_op, cancellable, callback, callback_data);
+ }
+ else
+ {
+ if (callback)
+ {
+ error = NULL;
+ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("This file cannot be ejected"));
+ callback (file, NULL, error, callback_data);
+ g_error_free (error);
+ }
+ }
+ }
+ else if (file->details->mount != NULL &&
+ g_mount_can_eject (file->details->mount))
+ {
+ data = g_new0 (UnmountData, 1);
+ data->file = nautilus_file_ref (file);
+ data->callback = callback;
+ data->callback_data = callback_data;
+ nautilus_file_operations_unmount_mount_full (NULL, file->details->mount, NULL, TRUE, TRUE, unmount_done, data);
+ }
+ else if (callback)
+ {
+ callback (file, NULL, NULL, callback_data);
+ }
}
void
-nautilus_file_start (NautilusFile *file,
- GMountOperation *start_op,
- GCancellable *cancellable,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- GError *error;
-
- if ((file->details->can_start || file->details->can_start_degraded) &&
- NAUTILUS_FILE_GET_CLASS (file)->start != NULL) {
- NAUTILUS_FILE_GET_CLASS (file)->start (file, start_op, cancellable, callback, callback_data);
- } else {
- if (callback) {
- error = NULL;
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("This file cannot be started"));
- callback (file, NULL, error, callback_data);
- g_error_free (error);
- }
- }
+nautilus_file_start (NautilusFile *file,
+ GMountOperation *start_op,
+ GCancellable *cancellable,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GError *error;
+
+ if ((file->details->can_start || file->details->can_start_degraded) &&
+ NAUTILUS_FILE_GET_CLASS (file)->start != NULL)
+ {
+ NAUTILUS_FILE_GET_CLASS (file)->start (file, start_op, cancellable, callback, callback_data);
+ }
+ else
+ {
+ if (callback)
+ {
+ error = NULL;
+ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("This file cannot be started"));
+ callback (file, NULL, error, callback_data);
+ g_error_free (error);
+ }
+ }
}
static void
-file_stop_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer callback_data)
-{
- NautilusFileOperation *op;
- gboolean stopped;
- GError *error;
-
- op = callback_data;
-
- error = NULL;
- stopped = g_drive_stop_finish (G_DRIVE (source_object),
- res, &error);
-
- if (!stopped &&
- error->domain == G_IO_ERROR &&
- (error->code == G_IO_ERROR_FAILED_HANDLED ||
- error->code == G_IO_ERROR_CANCELLED)) {
- g_error_free (error);
- error = NULL;
- }
+file_stop_callback (GObject *source_object,
+ GAsyncResult *res,
+ gpointer callback_data)
+{
+ NautilusFileOperation *op;
+ gboolean stopped;
+ GError *error;
+
+ op = callback_data;
+
+ error = NULL;
+ stopped = g_drive_stop_finish (G_DRIVE (source_object),
+ res, &error);
+
+ if (!stopped &&
+ error->domain == G_IO_ERROR &&
+ (error->code == G_IO_ERROR_FAILED_HANDLED ||
+ error->code == G_IO_ERROR_CANCELLED))
+ {
+ g_error_free (error);
+ error = NULL;
+ }
- nautilus_file_operation_complete (op, NULL, error);
- if (error) {
- g_error_free (error);
- }
+ nautilus_file_operation_complete (op, NULL, error);
+ if (error)
+ {
+ g_error_free (error);
+ }
}
void
-nautilus_file_stop (NautilusFile *file,
- GMountOperation *mount_op,
- GCancellable *cancellable,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- GError *error;
-
- if (NAUTILUS_FILE_GET_CLASS (file)->stop != NULL) {
- if (file->details->can_stop) {
- NAUTILUS_FILE_GET_CLASS (file)->stop (file, mount_op, cancellable, callback, callback_data);
- } else {
- if (callback) {
- error = NULL;
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("This file cannot be stopped"));
- callback (file, NULL, error, callback_data);
- g_error_free (error);
- }
- }
- } else {
- GDrive *drive;
-
- drive = NULL;
- if (file->details->mount != NULL)
- drive = g_mount_get_drive (file->details->mount);
-
- if (drive != NULL && g_drive_can_stop (drive)) {
- NautilusFileOperation *op;
-
- op = nautilus_file_operation_new (file, callback, callback_data);
- if (cancellable) {
- g_object_unref (op->cancellable);
- op->cancellable = g_object_ref (cancellable);
- }
-
- g_drive_stop (drive,
- G_MOUNT_UNMOUNT_NONE,
- mount_op,
- op->cancellable,
- file_stop_callback,
- op);
- } else {
- if (callback) {
- error = NULL;
- g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("This file cannot be stopped"));
- callback (file, NULL, error, callback_data);
- g_error_free (error);
- }
- }
-
- if (drive != NULL) {
- g_object_unref (drive);
- }
- }
+nautilus_file_stop (NautilusFile *file,
+ GMountOperation *mount_op,
+ GCancellable *cancellable,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GError *error;
+
+ if (NAUTILUS_FILE_GET_CLASS (file)->stop != NULL)
+ {
+ if (file->details->can_stop)
+ {
+ NAUTILUS_FILE_GET_CLASS (file)->stop (file, mount_op, cancellable, callback, callback_data);
+ }
+ else
+ {
+ if (callback)
+ {
+ error = NULL;
+ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("This file cannot be stopped"));
+ callback (file, NULL, error, callback_data);
+ g_error_free (error);
+ }
+ }
+ }
+ else
+ {
+ GDrive *drive;
+
+ drive = NULL;
+ if (file->details->mount != NULL)
+ {
+ drive = g_mount_get_drive (file->details->mount);
+ }
+
+ if (drive != NULL && g_drive_can_stop (drive))
+ {
+ NautilusFileOperation *op;
+
+ op = nautilus_file_operation_new (file, callback, callback_data);
+ if (cancellable)
+ {
+ g_object_unref (op->cancellable);
+ op->cancellable = g_object_ref (cancellable);
+ }
+
+ g_drive_stop (drive,
+ G_MOUNT_UNMOUNT_NONE,
+ mount_op,
+ op->cancellable,
+ file_stop_callback,
+ op);
+ }
+ else
+ {
+ if (callback)
+ {
+ error = NULL;
+ g_set_error_literal (&error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("This file cannot be stopped"));
+ callback (file, NULL, error, callback_data);
+ g_error_free (error);
+ }
+ }
+
+ if (drive != NULL)
+ {
+ g_object_unref (drive);
+ }
+ }
}
void
nautilus_file_poll_for_media (NautilusFile *file)
{
- if (file->details->can_poll_for_media) {
- if (NAUTILUS_FILE_GET_CLASS (file)->stop != NULL) {
- NAUTILUS_FILE_GET_CLASS (file)->poll_for_media (file);
- }
- } else if (file->details->mount != NULL) {
- GDrive *drive;
- drive = g_mount_get_drive (file->details->mount);
- if (drive != NULL) {
- g_drive_poll_for_media (drive,
- NULL, /* cancellable */
- NULL, /* GAsyncReadyCallback */
- NULL); /* user_data */
- g_object_unref (drive);
- }
- }
+ if (file->details->can_poll_for_media)
+ {
+ if (NAUTILUS_FILE_GET_CLASS (file)->stop != NULL)
+ {
+ NAUTILUS_FILE_GET_CLASS (file)->poll_for_media (file);
+ }
+ }
+ else if (file->details->mount != NULL)
+ {
+ GDrive *drive;
+ drive = g_mount_get_drive (file->details->mount);
+ if (drive != NULL)
+ {
+ g_drive_poll_for_media (drive,
+ NULL, /* cancellable */
+ NULL, /* GAsyncReadyCallback */
+ NULL); /* user_data */
+ g_object_unref (drive);
+ }
+ }
}
/**
* nautilus_file_is_desktop_directory:
- *
+ *
* Check whether this file is the desktop directory.
- *
+ *
* @file: The file to check.
- *
+ *
* Return value: TRUE if this is the physical desktop directory.
*/
gboolean
nautilus_file_is_desktop_directory (NautilusFile *file)
{
- GFile *dir;
+ GFile *dir;
- dir = file->details->directory->details->location;
+ dir = file->details->directory->details->location;
- if (dir == NULL) {
- return FALSE;
- }
+ if (dir == NULL)
+ {
+ return FALSE;
+ }
- return nautilus_is_desktop_directory_file (dir, eel_ref_str_peek (file->details->name));
+ return nautilus_is_desktop_directory_file (dir, eel_ref_str_peek (file->details->name));
}
static gboolean
is_desktop_file (NautilusFile *file)
{
- return nautilus_file_is_mime_type (file, "application/x-desktop");
+ return nautilus_file_is_mime_type (file, "application/x-desktop");
}
static gboolean
can_rename_desktop_file (NautilusFile *file)
{
- GFile *location;
- gboolean res;
+ GFile *location;
+ gboolean res;
- location = nautilus_file_get_location (file);
- res = g_file_is_native (location);
- g_object_unref (location);
- return res;
+ location = nautilus_file_get_location (file);
+ res = g_file_is_native (location);
+ g_object_unref (location);
+ return res;
}
/**
* nautilus_file_can_rename:
- *
+ *
* Check whether the user is allowed to change the name of the file.
- *
+ *
* @file: The file to check.
- *
+ *
* Return value: FALSE if the user is definitely not allowed to change
* the name of the file. If the user is allowed to change the name, or
* the code can't tell whether the user is allowed to change the name,
@@ -1491,300 +1655,328 @@ can_rename_desktop_file (NautilusFile *file)
gboolean
nautilus_file_can_rename (NautilusFile *file)
{
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->can_rename (file);
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->can_rename (file);
}
static gboolean
real_can_rename (NautilusFile *file)
{
- gboolean can_rename;
+ gboolean can_rename;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ /* Nonexistent files can't be renamed. */
+ if (nautilus_file_is_gone (file))
+ {
+ return FALSE;
+ }
- /* Nonexistent files can't be renamed. */
- if (nautilus_file_is_gone (file)) {
- return FALSE;
- }
+ /* Self-owned files can't be renamed */
+ if (nautilus_file_is_self_owned (file))
+ {
+ return FALSE;
+ }
- /* Self-owned files can't be renamed */
- if (nautilus_file_is_self_owned (file)) {
- return FALSE;
- }
+ if ((is_desktop_file (file) && !can_rename_desktop_file (file)) ||
+ nautilus_file_is_home (file))
+ {
+ return FALSE;
+ }
- if ((is_desktop_file (file) && !can_rename_desktop_file (file)) ||
- nautilus_file_is_home (file)) {
- return FALSE;
- }
-
- can_rename = TRUE;
+ can_rename = TRUE;
- if (!can_rename) {
- return FALSE;
- }
+ if (!can_rename)
+ {
+ return FALSE;
+ }
- return file->details->can_rename;
+ return file->details->can_rename;
}
gboolean
nautilus_file_can_delete (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- /* Nonexistent files can't be deleted. */
- if (nautilus_file_is_gone (file)) {
- return FALSE;
- }
+ /* Nonexistent files can't be deleted. */
+ if (nautilus_file_is_gone (file))
+ {
+ return FALSE;
+ }
- /* Self-owned files can't be deleted */
- if (nautilus_file_is_self_owned (file)) {
- return FALSE;
- }
+ /* Self-owned files can't be deleted */
+ if (nautilus_file_is_self_owned (file))
+ {
+ return FALSE;
+ }
- return file->details->can_delete;
+ return file->details->can_delete;
}
gboolean
nautilus_file_can_trash (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- /* Nonexistent files can't be deleted. */
- if (nautilus_file_is_gone (file)) {
- return FALSE;
- }
+ /* Nonexistent files can't be deleted. */
+ if (nautilus_file_is_gone (file))
+ {
+ return FALSE;
+ }
- /* Self-owned files can't be deleted */
- if (nautilus_file_is_self_owned (file)) {
- return FALSE;
- }
+ /* Self-owned files can't be deleted */
+ if (nautilus_file_is_self_owned (file))
+ {
+ return FALSE;
+ }
- return file->details->can_trash;
+ return file->details->can_trash;
}
GFile *
nautilus_file_get_location (NautilusFile *file)
{
- GFile *dir;
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ GFile *dir;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- dir = file->details->directory->details->location;
-
- if (nautilus_file_is_self_owned (file)) {
- return g_object_ref (dir);
- }
-
- return g_file_get_child (dir, eel_ref_str_peek (file->details->name));
+ dir = file->details->directory->details->location;
+
+ if (nautilus_file_is_self_owned (file))
+ {
+ return g_object_ref (dir);
+ }
+
+ return g_file_get_child (dir, eel_ref_str_peek (file->details->name));
}
/* Return the actual uri associated with the passed-in file. */
char *
nautilus_file_get_uri (NautilusFile *file)
{
- char *uri;
- GFile *loc;
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ char *uri;
+ GFile *loc;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+
+ loc = nautilus_file_get_location (file);
+ uri = g_file_get_uri (loc);
+ g_object_unref (loc);
- loc = nautilus_file_get_location (file);
- uri = g_file_get_uri (loc);
- g_object_unref (loc);
-
- return uri;
+ return uri;
}
char *
nautilus_file_get_uri_scheme (NautilusFile *file)
{
- GFile *loc;
- char *scheme;
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ GFile *loc;
+ char *scheme;
- if (file->details->directory == NULL ||
- file->details->directory->details->location == NULL) {
- return NULL;
- }
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- loc = nautilus_directory_get_location (file->details->directory);
- scheme = g_file_get_uri_scheme (loc);
- g_object_unref (loc);
-
- return scheme;
+ if (file->details->directory == NULL ||
+ file->details->directory->details->location == NULL)
+ {
+ return NULL;
+ }
+
+ loc = nautilus_directory_get_location (file->details->directory);
+ scheme = g_file_get_uri_scheme (loc);
+ g_object_unref (loc);
+
+ return scheme;
}
gboolean
nautilus_file_opens_in_view (NautilusFile *file)
{
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->opens_in_view (file);
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->opens_in_view (file);
}
static gboolean
real_opens_in_view (NautilusFile *file)
{
- return nautilus_file_is_directory (file);
+ return nautilus_file_is_directory (file);
}
NautilusFileOperation *
-nautilus_file_operation_new (NautilusFile *file,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
+nautilus_file_operation_new (NautilusFile *file,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
{
- NautilusFileOperation *op;
+ NautilusFileOperation *op;
- op = g_new0 (NautilusFileOperation, 1);
- op->file = nautilus_file_ref (file);
- op->callback = callback;
- op->callback_data = callback_data;
- op->cancellable = g_cancellable_new ();
+ op = g_new0 (NautilusFileOperation, 1);
+ op->file = nautilus_file_ref (file);
+ op->callback = callback;
+ op->callback_data = callback_data;
+ op->cancellable = g_cancellable_new ();
- op->file->details->operations_in_progress = g_list_prepend
- (op->file->details->operations_in_progress, op);
+ op->file->details->operations_in_progress = g_list_prepend
+ (op->file->details->operations_in_progress, op);
- return op;
+ return op;
}
static void
nautilus_file_operation_remove (NautilusFileOperation *op)
{
- GList *l;
- NautilusFile *file;
+ GList *l;
+ NautilusFile *file;
- op->file->details->operations_in_progress = g_list_remove
- (op->file->details->operations_in_progress, op);
+ op->file->details->operations_in_progress = g_list_remove
+ (op->file->details->operations_in_progress, op);
- for (l = op->files; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
- file->details->operations_in_progress = g_list_remove
- (file->details->operations_in_progress, op);
- }
+ for (l = op->files; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+ file->details->operations_in_progress = g_list_remove
+ (file->details->operations_in_progress, op);
+ }
}
void
nautilus_file_operation_free (NautilusFileOperation *op)
{
- NautilusFile *file;
- GList *l;
-
- nautilus_file_operation_remove (op);
-
- if (op->files == NULL)
- nautilus_file_unref (op->file);
- else
- for (l = op->files; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
- nautilus_file_unref (file);
- }
+ NautilusFile *file;
+ GList *l;
+
+ nautilus_file_operation_remove (op);
+
+ if (op->files == NULL)
+ {
+ nautilus_file_unref (op->file);
+ }
+ else
+ {
+ for (l = op->files; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
+ nautilus_file_unref (file);
+ }
+ }
- g_object_unref (op->cancellable);
- if (op->free_data) {
- op->free_data (op->data);
- }
+ g_object_unref (op->cancellable);
+ if (op->free_data)
+ {
+ op->free_data (op->data);
+ }
- if (op->undo_info != NULL) {
- nautilus_file_undo_manager_set_action (op->undo_info);
- g_object_unref (op->undo_info);
- }
+ if (op->undo_info != NULL)
+ {
+ nautilus_file_undo_manager_set_action (op->undo_info);
+ g_object_unref (op->undo_info);
+ }
- g_free (op);
+ g_free (op);
}
void
nautilus_file_operation_complete (NautilusFileOperation *op,
- GFile *result_file,
- GError *error)
+ GFile *result_file,
+ GError *error)
{
- /* Claim that something changed even if the operation failed.
- * This makes it easier for some clients who see the "reverting"
- * as "changing back".
- */
- nautilus_file_operation_remove (op);
+ /* Claim that something changed even if the operation failed.
+ * This makes it easier for some clients who see the "reverting"
+ * as "changing back".
+ */
+ nautilus_file_operation_remove (op);
- if (op->files == NULL)
- nautilus_file_changed (op->file);
+ if (op->files == NULL)
+ {
+ nautilus_file_changed (op->file);
+ }
- if (op->callback)
- (* op->callback) (op->file, result_file, error, op->callback_data);
+ if (op->callback)
+ {
+ (*op->callback)(op->file, result_file, error, op->callback_data);
+ }
- if (error != NULL) {
- g_clear_object (&op->undo_info);
- }
+ if (error != NULL)
+ {
+ g_clear_object (&op->undo_info);
+ }
- nautilus_file_operation_free (op);
+ nautilus_file_operation_free (op);
}
void
nautilus_file_operation_cancel (NautilusFileOperation *op)
{
- /* Cancel the operation if it's still in progress. */
- g_cancellable_cancel (op->cancellable);
+ /* Cancel the operation if it's still in progress. */
+ g_cancellable_cancel (op->cancellable);
}
static void
-rename_get_info_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer callback_data)
-{
- NautilusFileOperation *op;
- NautilusDirectory *directory;
- NautilusFile *existing_file;
- char *old_uri;
- char *new_uri;
- const char *new_name;
- GFileInfo *new_info;
- GError *error;
-
- op = callback_data;
-
- error = NULL;
- new_info = g_file_query_info_finish (G_FILE (source_object), res, &error);
- if (new_info != NULL) {
- directory = op->file->details->directory;
-
- new_name = g_file_info_get_name (new_info);
-
- /* If there was another file by the same name in this
- * directory and it is not the same file that we are
- * renaming, mark it gone.
- */
- existing_file = nautilus_directory_find_file_by_name (directory, new_name);
- if (existing_file != NULL && existing_file != op->file) {
- nautilus_file_mark_gone (existing_file);
- nautilus_file_changed (existing_file);
- }
-
- old_uri = nautilus_file_get_uri (op->file);
-
- update_info_and_name (op->file, new_info);
-
- new_uri = nautilus_file_get_uri (op->file);
- nautilus_directory_moved (old_uri, new_uri);
- g_free (new_uri);
- g_free (old_uri);
-
- /* the rename could have affected the display name if e.g.
- * we're in a vfolder where the name comes from a desktop file
- * and a rename affects the contents of the desktop file.
- */
- if (op->file->details->got_custom_display_name) {
- nautilus_file_invalidate_attributes (op->file,
- NAUTILUS_FILE_ATTRIBUTE_INFO |
- NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
- }
-
- g_object_unref (new_info);
- }
- nautilus_file_operation_complete (op, NULL, error);
- if (error) {
- g_error_free (error);
- }
-}
-
-typedef struct {
- NautilusFileOperation *op;
- NautilusFile *file;
+rename_get_info_callback (GObject *source_object,
+ GAsyncResult *res,
+ gpointer callback_data)
+{
+ NautilusFileOperation *op;
+ NautilusDirectory *directory;
+ NautilusFile *existing_file;
+ char *old_uri;
+ char *new_uri;
+ const char *new_name;
+ GFileInfo *new_info;
+ GError *error;
+
+ op = callback_data;
+
+ error = NULL;
+ new_info = g_file_query_info_finish (G_FILE (source_object), res, &error);
+ if (new_info != NULL)
+ {
+ directory = op->file->details->directory;
+
+ new_name = g_file_info_get_name (new_info);
+
+ /* If there was another file by the same name in this
+ * directory and it is not the same file that we are
+ * renaming, mark it gone.
+ */
+ existing_file = nautilus_directory_find_file_by_name (directory, new_name);
+ if (existing_file != NULL && existing_file != op->file)
+ {
+ nautilus_file_mark_gone (existing_file);
+ nautilus_file_changed (existing_file);
+ }
+
+ old_uri = nautilus_file_get_uri (op->file);
+
+ update_info_and_name (op->file, new_info);
+
+ new_uri = nautilus_file_get_uri (op->file);
+ nautilus_directory_moved (old_uri, new_uri);
+ g_free (new_uri);
+ g_free (old_uri);
+
+ /* the rename could have affected the display name if e.g.
+ * we're in a vfolder where the name comes from a desktop file
+ * and a rename affects the contents of the desktop file.
+ */
+ if (op->file->details->got_custom_display_name)
+ {
+ nautilus_file_invalidate_attributes (op->file,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
+ }
+
+ g_object_unref (new_info);
+ }
+ nautilus_file_operation_complete (op, NULL, error);
+ if (error)
+ {
+ g_error_free (error);
+ }
+}
+
+typedef struct
+{
+ NautilusFileOperation *op;
+ NautilusFile *file;
} BatchRenameData;
static void
@@ -1792,114 +1984,126 @@ batch_rename_get_info_callback (GObject *source_object,
GAsyncResult *res,
gpointer callback_data)
{
- NautilusFileOperation *op;
- NautilusDirectory *directory;
- NautilusFile *existing_file;
- char *old_uri;
- char *new_uri;
- const char *new_name;
- GFileInfo *new_info;
- GError *error;
- BatchRenameData *data;
+ NautilusFileOperation *op;
+ NautilusDirectory *directory;
+ NautilusFile *existing_file;
+ char *old_uri;
+ char *new_uri;
+ const char *new_name;
+ GFileInfo *new_info;
+ GError *error;
+ BatchRenameData *data;
- data = callback_data;
+ data = callback_data;
- op = data->op;
- op->file = data->file;
+ op = data->op;
+ op->file = data->file;
- error = NULL;
- new_info = g_file_query_info_finish (G_FILE (source_object), res, &error);
- if (new_info != NULL) {
- old_uri = nautilus_file_get_uri (op->file);
-
- new_name = g_file_info_get_name (new_info);
+ error = NULL;
+ new_info = g_file_query_info_finish (G_FILE (source_object), res, &error);
+ if (new_info != NULL)
+ {
+ old_uri = nautilus_file_get_uri (op->file);
- directory = op->file->details->directory;
+ new_name = g_file_info_get_name (new_info);
- /* If there was another file by the same name in this
- * directory and it is not the same file that we are
- * renaming, mark it gone.
- */
- existing_file = nautilus_directory_find_file_by_name (directory, new_name);
- if (existing_file != NULL && existing_file != op->file) {
- nautilus_file_mark_gone (existing_file);
- nautilus_file_changed (existing_file);
- }
+ directory = op->file->details->directory;
- update_info_and_name (op->file, new_info);
+ /* If there was another file by the same name in this
+ * directory and it is not the same file that we are
+ * renaming, mark it gone.
+ */
+ existing_file = nautilus_directory_find_file_by_name (directory, new_name);
+ if (existing_file != NULL && existing_file != op->file)
+ {
+ nautilus_file_mark_gone (existing_file);
+ nautilus_file_changed (existing_file);
+ }
- new_uri = nautilus_file_get_uri (op->file);
- nautilus_directory_moved (old_uri, new_uri);
- g_free (new_uri);
- g_free (old_uri);
+ update_info_and_name (op->file, new_info);
- /* the rename could have affected the display name if e.g.
- * we're in a vfolder where the name comes from a desktop file
- * and a rename affects the contents of the desktop file.
- */
- if (op->file->details->got_custom_display_name) {
- nautilus_file_invalidate_attributes (op->file,
- NAUTILUS_FILE_ATTRIBUTE_INFO |
- NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
- }
+ new_uri = nautilus_file_get_uri (op->file);
+ nautilus_directory_moved (old_uri, new_uri);
+ g_free (new_uri);
+ g_free (old_uri);
- g_object_unref (new_info);
+ /* the rename could have affected the display name if e.g.
+ * we're in a vfolder where the name comes from a desktop file
+ * and a rename affects the contents of the desktop file.
+ */
+ if (op->file->details->got_custom_display_name)
+ {
+ nautilus_file_invalidate_attributes (op->file,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
}
- op->renamed_files++;
+ g_object_unref (new_info);
+ }
- if (op->renamed_files + op->skipped_files == g_list_length (op->files)) {
- nautilus_file_operation_complete (op, NULL, error);
- }
+ op->renamed_files++;
- if (op->files == NULL)
- nautilus_file_operation_complete (op, NULL, error);
+ if (op->renamed_files + op->skipped_files == g_list_length (op->files))
+ {
+ nautilus_file_operation_complete (op, NULL, error);
+ }
- g_free (data);
+ if (op->files == NULL)
+ {
+ nautilus_file_operation_complete (op, NULL, error);
+ }
- if (error) {
- g_error_free (error);
- }
+ g_free (data);
+
+ if (error)
+ {
+ g_error_free (error);
+ }
}
static void
-rename_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer callback_data)
-{
- NautilusFileOperation *op;
- GFile *new_file;
- GError *error;
-
- op = callback_data;
-
- error = NULL;
- new_file = g_file_set_display_name_finish (G_FILE (source_object),
- res, &error);
-
- if (new_file != NULL) {
- if (op->undo_info != NULL) {
- nautilus_file_undo_info_rename_set_data_post (NAUTILUS_FILE_UNDO_INFO_RENAME (op->undo_info),
- new_file);
- }
- g_file_query_info_async (new_file,
- NAUTILUS_FILE_DEFAULT_ATTRIBUTES,
- 0,
- G_PRIORITY_DEFAULT,
- op->cancellable,
- rename_get_info_callback, op);
- } else {
- nautilus_file_operation_complete (op, NULL, error);
- g_error_free (error);
- }
+rename_callback (GObject *source_object,
+ GAsyncResult *res,
+ gpointer callback_data)
+{
+ NautilusFileOperation *op;
+ GFile *new_file;
+ GError *error;
+
+ op = callback_data;
+
+ error = NULL;
+ new_file = g_file_set_display_name_finish (G_FILE (source_object),
+ res, &error);
+
+ if (new_file != NULL)
+ {
+ if (op->undo_info != NULL)
+ {
+ nautilus_file_undo_info_rename_set_data_post (NAUTILUS_FILE_UNDO_INFO_RENAME (op->undo_info),
+ new_file);
+ }
+ g_file_query_info_async (new_file,
+ NAUTILUS_FILE_DEFAULT_ATTRIBUTES,
+ 0,
+ G_PRIORITY_DEFAULT,
+ op->cancellable,
+ rename_get_info_callback, op);
+ }
+ else
+ {
+ nautilus_file_operation_complete (op, NULL, error);
+ g_error_free (error);
+ }
}
static gboolean
-name_is (NautilusFile *file, const char *new_name)
+name_is (NautilusFile *file,
+ const char *new_name)
{
- const char *old_name;
- old_name = eel_ref_str_peek (file->details->name);
- return strcmp (new_name, old_name) == 0;
+ const char *old_name;
+ old_name = eel_ref_str_peek (file->details->name);
+ return strcmp (new_name, old_name) == 0;
}
void
@@ -1908,124 +2112,147 @@ nautilus_file_rename (NautilusFile *file,
NautilusFileOperationCallback callback,
gpointer callback_data)
{
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->rename (file,
- new_name,
- callback,
- callback_data);
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->rename (file,
+ new_name,
+ callback,
+ callback_data);
}
-static gchar*
+static gchar *
nautilus_file_can_rename_file (NautilusFile *file,
const char *new_name,
NautilusFileOperationCallback callback,
gpointer callback_data)
{
- GError *error;
- gboolean is_renameable_desktop_file;
- gboolean success;
- gboolean name_changed;
- gchar *new_file_name;
- gchar *uri;
- gchar *old_name;
-
- is_renameable_desktop_file =
- is_desktop_file (file) && can_rename_desktop_file (file);
-
- /* Return an error for incoming names containing path separators.
- * But not for .desktop files as '/' are allowed for them */
- if (strstr (new_name, "/") != NULL && !is_renameable_desktop_file) {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Slashes are not allowed in filenames"));
- if (callback != NULL)
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
- return NULL;
+ GError *error;
+ gboolean is_renameable_desktop_file;
+ gboolean success;
+ gboolean name_changed;
+ gchar *new_file_name;
+ gchar *uri;
+ gchar *old_name;
+
+ is_renameable_desktop_file =
+ is_desktop_file (file) && can_rename_desktop_file (file);
+
+ /* Return an error for incoming names containing path separators.
+ * But not for .desktop files as '/' are allowed for them */
+ if (strstr (new_name, "/") != NULL && !is_renameable_desktop_file)
+ {
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+ _("Slashes are not allowed in filenames"));
+ if (callback != NULL)
+ {
+ (*callback)(file, NULL, error, callback_data);
}
-
- /* Can't rename a file that's already gone.
- * We need to check this here because there may be a new
- * file with the same name.
- */
- if (nautilus_file_rename_handle_file_gone (file, callback, callback_data)) {
- return NULL;
+ g_error_free (error);
+ return NULL;
+ }
+
+ /* Can't rename a file that's already gone.
+ * We need to check this here because there may be a new
+ * file with the same name.
+ */
+ if (nautilus_file_rename_handle_file_gone (file, callback, callback_data))
+ {
+ return NULL;
+ }
+
+ /* Test the name-hasn't-changed case explicitly, for two reasons.
+ * (1) rename returns an error if new & old are same.
+ * (2) We don't want to send file-changed signal if nothing changed.
+ */
+ if (!is_renameable_desktop_file &&
+ name_is (file, new_name))
+ {
+ if (callback != NULL)
+ {
+ (*callback)(file, NULL, NULL, callback_data);
}
-
- /* Test the name-hasn't-changed case explicitly, for two reasons.
- * (1) rename returns an error if new & old are same.
- * (2) We don't want to send file-changed signal if nothing changed.
+ return NULL;
+ }
+
+ /* Self-owned files can't be renamed. Test the name-not-actually-changing
+ * case before this case.
+ */
+ if (nautilus_file_is_self_owned (file))
+ {
+ /* Claim that something changed even if the rename
+ * failed. This makes it easier for some clients who
+ * see the "reverting" to the old name as "changing
+ * back".
*/
- if (!is_renameable_desktop_file &&
- name_is (file, new_name)) {
- if (callback != NULL)
- (* callback) (file, NULL, NULL, callback_data);
- return NULL;
- }
+ nautilus_file_changed (file);
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
+ _("Toplevel files cannot be renamed"));
- /* Self-owned files can't be renamed. Test the name-not-actually-changing
- * case before this case.
- */
- if (nautilus_file_is_self_owned (file)) {
- /* Claim that something changed even if the rename
- * failed. This makes it easier for some clients who
- * see the "reverting" to the old name as "changing
- * back".
- */
- nautilus_file_changed (file);
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED,
- _("Toplevel files cannot be renamed"));
+ if (callback != NULL)
+ {
+ (*callback)(file, NULL, error, callback_data);
+ }
+ g_error_free (error);
- if (callback != NULL)
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
+ return NULL;
+ }
- return NULL;
+ if (is_renameable_desktop_file)
+ {
+ /* Don't actually change the name if the new name is the same.
+ * This helps for the vfolder method where this can happen and
+ * we want to minimize actual changes
+ */
+ uri = nautilus_file_get_uri (file);
+ old_name = nautilus_link_local_get_text (uri);
+ if (old_name != NULL && strcmp (new_name, old_name) == 0)
+ {
+ success = TRUE;
+ name_changed = FALSE;
}
+ else
+ {
+ success = nautilus_link_local_set_text (uri, new_name);
+ name_changed = TRUE;
+ }
+ g_free (old_name);
+ g_free (uri);
- if (is_renameable_desktop_file) {
- /* Don't actually change the name if the new name is the same.
- * This helps for the vfolder method where this can happen and
- * we want to minimize actual changes
- */
- uri = nautilus_file_get_uri (file);
- old_name = nautilus_link_local_get_text (uri);
- if (old_name != NULL && strcmp (new_name, old_name) == 0) {
- success = TRUE;
- name_changed = FALSE;
- } else {
- success = nautilus_link_local_set_text (uri, new_name);
- name_changed = TRUE;
- }
- g_free (old_name);
- g_free (uri);
-
- if (!success) {
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_FAILED,
- _("Probably the content of the file is an invalid desktop file format"));
- if (callback != NULL)
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
- return NULL;
- }
- new_file_name = g_strdup_printf ("%s.desktop", new_name);
- new_file_name = g_strdelimit (new_file_name, "/", '-');
-
- if (name_is (file, new_file_name)) {
- if (name_changed) {
- nautilus_file_invalidate_attributes (file,
- NAUTILUS_FILE_ATTRIBUTE_INFO |
- NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
- }
-
- if (callback != NULL)
- (* callback) (file, NULL, NULL, callback_data);
- g_free (new_file_name);
- return NULL;
- }
- } else {
- new_file_name = g_strdup (new_name);
+ if (!success)
+ {
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_FAILED,
+ _("Probably the content of the file is an invalid desktop file format"));
+ if (callback != NULL)
+ {
+ (*callback)(file, NULL, error, callback_data);
+ }
+ g_error_free (error);
+ return NULL;
+ }
+ new_file_name = g_strdup_printf ("%s.desktop", new_name);
+ new_file_name = g_strdelimit (new_file_name, "/", '-');
+
+ if (name_is (file, new_file_name))
+ {
+ if (name_changed)
+ {
+ nautilus_file_invalidate_attributes (file,
+ NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_LINK_INFO);
+ }
+
+ if (callback != NULL)
+ {
+ (*callback)(file, NULL, NULL, callback_data);
+ }
+ g_free (new_file_name);
+ return NULL;
}
+ }
+ else
+ {
+ new_file_name = g_strdup (new_name);
+ }
- return new_file_name;
+ return new_file_name;
}
static void
@@ -2034,95 +2261,100 @@ real_batch_rename (GList *files,
NautilusFileOperationCallback callback,
gpointer callback_data)
{
- GList *l1, *l2, *old_files, *new_files;
- NautilusFileOperation *op;
- GFile *location;
- gchar *new_file_name;
- GString *new_name;
- NautilusFile *file;
- GError *error;
- GFile *new_file;
- BatchRenameData *data;
-
- error = NULL;
- old_files = NULL;
- new_files = NULL;
-
- /* Set up a batch renaming operation. */
- op = nautilus_file_operation_new (files->data, callback, callback_data);
- op->files = files;
- op->renamed_files = 0;
- op->skipped_files = 0;
-
- for (l1 = files->next; l1 != NULL; l1 = l1->next) {
- file = NAUTILUS_FILE (l1->data);
-
- file->details->operations_in_progress = g_list_prepend (file->details->operations_in_progress,
- op);
+ GList *l1, *l2, *old_files, *new_files;
+ NautilusFileOperation *op;
+ GFile *location;
+ gchar *new_file_name;
+ GString *new_name;
+ NautilusFile *file;
+ GError *error;
+ GFile *new_file;
+ BatchRenameData *data;
+
+ error = NULL;
+ old_files = NULL;
+ new_files = NULL;
+
+ /* Set up a batch renaming operation. */
+ op = nautilus_file_operation_new (files->data, callback, callback_data);
+ op->files = files;
+ op->renamed_files = 0;
+ op->skipped_files = 0;
+
+ for (l1 = files->next; l1 != NULL; l1 = l1->next)
+ {
+ file = NAUTILUS_FILE (l1->data);
+
+ file->details->operations_in_progress = g_list_prepend (file->details->operations_in_progress,
+ op);
+ }
+
+ for (l1 = files, l2 = new_names; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next)
+ {
+ file = NAUTILUS_FILE (l1->data);
+ new_name = l2->data;
+
+ location = nautilus_file_get_location (file);
+ old_files = g_list_append (old_files, location);
+
+ new_file_name = nautilus_file_can_rename_file (file,
+ new_name->str,
+ callback,
+ callback_data);
+
+ if (new_file_name == NULL)
+ {
+ op->skipped_files++;
+
+ new_file = nautilus_file_get_location (file);
+ new_files = g_list_append (new_files, new_file);
+
+ continue;
}
- for (l1 = files, l2 = new_names; l1 != NULL && l2 != NULL; l1 = l1->next, l2 = l2->next) {
- file = NAUTILUS_FILE (l1->data);
- new_name = l2->data;
-
- location = nautilus_file_get_location (file);
- old_files = g_list_append (old_files, location);
-
- new_file_name = nautilus_file_can_rename_file (file,
- new_name->str,
- callback,
- callback_data);
-
- if (new_file_name == NULL) {
- op->skipped_files++;
-
- new_file = nautilus_file_get_location (file);
- new_files = g_list_append (new_files, new_file);
-
- continue;
- }
-
- g_assert (G_IS_FILE (location));
-
- /* Do the renaming. */
- new_file = g_file_set_display_name (location,
- new_file_name,
- op->cancellable,
- &error);
-
- data = g_new0 (BatchRenameData, 1);
- data->op = op;
- data->file = file;
-
- new_files = g_list_append (new_files, new_file);
-
- g_file_query_info_async (new_file,
- NAUTILUS_FILE_DEFAULT_ATTRIBUTES,
- 0,
- G_PRIORITY_DEFAULT,
- op->cancellable,
- batch_rename_get_info_callback,
- data);
-
- if (error != NULL) {
- g_warning ("Batch rename for file \"%s\" failed", nautilus_file_get_name (file));
- g_error_free (error);
- error = NULL;
- }
+ g_assert (G_IS_FILE (location));
+
+ /* Do the renaming. */
+ new_file = g_file_set_display_name (location,
+ new_file_name,
+ op->cancellable,
+ &error);
+
+ data = g_new0 (BatchRenameData, 1);
+ data->op = op;
+ data->file = file;
+
+ new_files = g_list_append (new_files, new_file);
+
+ g_file_query_info_async (new_file,
+ NAUTILUS_FILE_DEFAULT_ATTRIBUTES,
+ 0,
+ G_PRIORITY_DEFAULT,
+ op->cancellable,
+ batch_rename_get_info_callback,
+ data);
+
+ if (error != NULL)
+ {
+ g_warning ("Batch rename for file \"%s\" failed", nautilus_file_get_name (file));
+ g_error_free (error);
+ error = NULL;
}
+ }
- /* Tell the undo manager a batch rename is taking place */
- if (!nautilus_file_undo_manager_is_operating ()) {
- op->undo_info = nautilus_file_undo_info_batch_rename_new (g_list_length (new_files));
+ /* Tell the undo manager a batch rename is taking place */
+ if (!nautilus_file_undo_manager_is_operating ())
+ {
+ op->undo_info = nautilus_file_undo_info_batch_rename_new (g_list_length (new_files));
- nautilus_file_undo_info_batch_rename_set_data_pre (NAUTILUS_FILE_UNDO_INFO_BATCH_RENAME (op->undo_info),
- old_files);
+ nautilus_file_undo_info_batch_rename_set_data_pre (NAUTILUS_FILE_UNDO_INFO_BATCH_RENAME (op->undo_info),
+ old_files);
- nautilus_file_undo_info_batch_rename_set_data_post (NAUTILUS_FILE_UNDO_INFO_BATCH_RENAME (op->undo_info),
- new_files);
+ nautilus_file_undo_info_batch_rename_set_data_post (NAUTILUS_FILE_UNDO_INFO_BATCH_RENAME (op->undo_info),
+ new_files);
- nautilus_file_undo_manager_set_action (op->undo_info);
- }
+ nautilus_file_undo_manager_set_action (op->undo_info);
+ }
}
gboolean
@@ -2130,23 +2362,24 @@ nautilus_file_rename_handle_file_gone (NautilusFile *file,
NautilusFileOperationCallback callback,
gpointer callback_data)
{
- GError *error;
+ GError *error;
- if (nautilus_file_is_gone (file)) {
- /* Claim that something changed even if the rename
- * failed. This makes it easier for some clients who
- * see the "reverting" to the old name as "changing
- * back".
- */
- nautilus_file_changed (file);
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
- _("File not found"));
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
- return TRUE;
- }
+ if (nautilus_file_is_gone (file))
+ {
+ /* Claim that something changed even if the rename
+ * failed. This makes it easier for some clients who
+ * see the "reverting" to the old name as "changing
+ * back".
+ */
+ nautilus_file_changed (file);
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
+ _("File not found"));
+ (*callback)(file, NULL, error, callback_data);
+ g_error_free (error);
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
void
@@ -2155,10 +2388,10 @@ nautilus_file_batch_rename (GList *files,
NautilusFileOperationCallback callback,
gpointer callback_data)
{
- real_batch_rename (files,
- new_names,
- callback,
- callback_data);
+ real_batch_rename (files,
+ new_names,
+ callback,
+ callback_data);
}
static void
@@ -2167,1180 +2400,1350 @@ real_rename (NautilusFile *file,
NautilusFileOperationCallback callback,
gpointer callback_data)
{
- NautilusFileOperation *op;
- char *old_name;
- char *new_file_name;
- GFile *location;
-
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (new_name != NULL);
- g_return_if_fail (callback != NULL);
-
- new_file_name = nautilus_file_can_rename_file (file,
- new_name,
- callback,
- callback_data);
-
- if (new_file_name == NULL)
- return;
-
- /* Set up a renaming operation. */
- op = nautilus_file_operation_new (file, callback, callback_data);
- op->is_rename = TRUE;
- location = nautilus_file_get_location (file);
-
- /* Tell the undo manager a rename is taking place */
- if (!nautilus_file_undo_manager_is_operating ()) {
- op->undo_info = nautilus_file_undo_info_rename_new ();
-
- old_name = nautilus_file_get_display_name (file);
- nautilus_file_undo_info_rename_set_data_pre (NAUTILUS_FILE_UNDO_INFO_RENAME (op->undo_info),
- location, old_name, new_file_name);
- g_free (old_name);
- }
-
- /* Do the renaming. */
- g_file_set_display_name_async (location,
- new_file_name,
- G_PRIORITY_DEFAULT,
- op->cancellable,
- rename_callback,
- op);
- g_free (new_file_name);
- g_object_unref (location);
+ NautilusFileOperation *op;
+ char *old_name;
+ char *new_file_name;
+ GFile *location;
+
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (new_name != NULL);
+ g_return_if_fail (callback != NULL);
+
+ new_file_name = nautilus_file_can_rename_file (file,
+ new_name,
+ callback,
+ callback_data);
+
+ if (new_file_name == NULL)
+ {
+ return;
+ }
+
+ /* Set up a renaming operation. */
+ op = nautilus_file_operation_new (file, callback, callback_data);
+ op->is_rename = TRUE;
+ location = nautilus_file_get_location (file);
+
+ /* Tell the undo manager a rename is taking place */
+ if (!nautilus_file_undo_manager_is_operating ())
+ {
+ op->undo_info = nautilus_file_undo_info_rename_new ();
+
+ old_name = nautilus_file_get_display_name (file);
+ nautilus_file_undo_info_rename_set_data_pre (NAUTILUS_FILE_UNDO_INFO_RENAME (op->undo_info),
+ location, old_name, new_file_name);
+ g_free (old_name);
+ }
+
+ /* Do the renaming. */
+ g_file_set_display_name_async (location,
+ new_file_name,
+ G_PRIORITY_DEFAULT,
+ op->cancellable,
+ rename_callback,
+ op);
+ g_free (new_file_name);
+ g_object_unref (location);
}
gboolean
nautilus_file_rename_in_progress (NautilusFile *file)
{
- GList *node;
- NautilusFileOperation *op;
+ GList *node;
+ NautilusFileOperation *op;
- for (node = file->details->operations_in_progress; node != NULL; node = node->next) {
- op = node->data;
- if (op->is_rename) {
- return TRUE;
- }
- }
- return FALSE;
+ for (node = file->details->operations_in_progress; node != NULL; node = node->next)
+ {
+ op = node->data;
+ if (op->is_rename)
+ {
+ return TRUE;
+ }
+ }
+ return FALSE;
}
void
-nautilus_file_cancel (NautilusFile *file,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
+nautilus_file_cancel (NautilusFile *file,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
{
- GList *node, *next;
- NautilusFileOperation *op;
+ GList *node, *next;
+ NautilusFileOperation *op;
- for (node = file->details->operations_in_progress; node != NULL; node = next) {
- next = node->next;
- op = node->data;
+ for (node = file->details->operations_in_progress; node != NULL; node = next)
+ {
+ next = node->next;
+ op = node->data;
- g_assert (op->file == file);
- if (op->callback == callback && op->callback_data == callback_data) {
- nautilus_file_operation_cancel (op);
- }
- }
+ g_assert (op->file == file);
+ if (op->callback == callback && op->callback_data == callback_data)
+ {
+ nautilus_file_operation_cancel (op);
+ }
+ }
}
-gboolean
-nautilus_file_matches_uri (NautilusFile *file, const char *match_uri)
+gboolean
+nautilus_file_matches_uri (NautilusFile *file,
+ const char *match_uri)
{
- GFile *match_file, *location;
- gboolean result;
+ GFile *match_file, *location;
+ gboolean result;
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- g_return_val_if_fail (match_uri != NULL, FALSE);
-
- location = nautilus_file_get_location (file);
- match_file = g_file_new_for_uri (match_uri);
- result = g_file_equal (location, match_file);
- g_object_unref (location);
- g_object_unref (match_file);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (match_uri != NULL, FALSE);
- return result;
+ location = nautilus_file_get_location (file);
+ match_file = g_file_new_for_uri (match_uri);
+ result = g_file_equal (location, match_file);
+ g_object_unref (location);
+ g_object_unref (match_file);
+
+ return result;
}
int
nautilus_file_compare_location (NautilusFile *file_1,
NautilusFile *file_2)
{
- GFile *loc_a, *loc_b;
- gboolean res;
+ GFile *loc_a, *loc_b;
+ gboolean res;
- loc_a = nautilus_file_get_location (file_1);
- loc_b = nautilus_file_get_location (file_2);
+ loc_a = nautilus_file_get_location (file_1);
+ loc_b = nautilus_file_get_location (file_2);
- res = !g_file_equal (loc_a, loc_b);
+ res = !g_file_equal (loc_a, loc_b);
- g_object_unref (loc_a);
- g_object_unref (loc_b);
+ g_object_unref (loc_a);
+ g_object_unref (loc_b);
- return (gint) res;
+ return (gint) res;
}
gboolean
nautilus_file_is_local (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
-
- return nautilus_directory_is_local (file->details->directory);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+
+ return nautilus_directory_is_local (file->details->directory);
}
gboolean
nautilus_file_is_local_or_fuse (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return nautilus_directory_is_local_or_fuse (file->details->directory);
+ return nautilus_directory_is_local_or_fuse (file->details->directory);
}
static void
-update_link (NautilusFile *link_file, NautilusFile *target_file)
+update_link (NautilusFile *link_file,
+ NautilusFile *target_file)
{
- g_assert (NAUTILUS_IS_FILE (link_file));
- g_assert (NAUTILUS_IS_FILE (target_file));
+ g_assert (NAUTILUS_IS_FILE (link_file));
+ g_assert (NAUTILUS_IS_FILE (target_file));
- /* FIXME bugzilla.gnome.org 42044: If we don't put any code
- * here then the hash table is a waste of time.
- */
+ /* FIXME bugzilla.gnome.org 42044: If we don't put any code
+ * here then the hash table is a waste of time.
+ */
}
static GList *
get_link_files (NautilusFile *target_file)
{
- char *uri;
- GList **link_files;
-
- if (symbolic_links == NULL) {
- link_files = NULL;
- } else {
- uri = nautilus_file_get_uri (target_file);
- link_files = g_hash_table_lookup (symbolic_links, uri);
- g_free (uri);
- }
- if (link_files) {
- return nautilus_file_list_copy (*link_files);
- }
- return NULL;
+ char *uri;
+ GList **link_files;
+
+ if (symbolic_links == NULL)
+ {
+ link_files = NULL;
+ }
+ else
+ {
+ uri = nautilus_file_get_uri (target_file);
+ link_files = g_hash_table_lookup (symbolic_links, uri);
+ g_free (uri);
+ }
+ if (link_files)
+ {
+ return nautilus_file_list_copy (*link_files);
+ }
+ return NULL;
}
static void
update_links_if_target (NautilusFile *target_file)
{
- GList *link_files, *p;
+ GList *link_files, *p;
- link_files = get_link_files (target_file);
- for (p = link_files; p != NULL; p = p->next) {
- update_link (NAUTILUS_FILE (p->data), target_file);
- }
- nautilus_file_list_free (link_files);
+ link_files = get_link_files (target_file);
+ for (p = link_files; p != NULL; p = p->next)
+ {
+ update_link (NAUTILUS_FILE (p->data), target_file);
+ }
+ nautilus_file_list_free (link_files);
}
static gboolean
update_info_internal (NautilusFile *file,
- GFileInfo *info,
- gboolean update_name)
-{
- GList *node;
- gboolean changed;
- gboolean is_symlink, is_hidden, is_mountpoint;
- gboolean has_permissions;
- guint32 permissions;
- gboolean can_read, can_write, can_execute, can_delete, can_trash, can_rename, can_mount, can_unmount, can_eject;
- gboolean can_start, can_start_degraded, can_stop, can_poll_for_media, is_media_check_automatic;
- GDriveStartStopType start_stop_type;
- gboolean thumbnailing_failed;
- int uid, gid;
- goffset size;
- int sort_order;
- time_t atime, mtime;
- time_t trash_time;
- GTimeVal g_trash_time;
- const char * time_string;
- const char *symlink_name, *mime_type, *selinux_context, *name, *thumbnail_path;
- GFileType file_type;
- GIcon *icon;
- char *old_activation_uri;
- const char *activation_uri;
- const char *description;
- const char *filesystem_id;
- const char *trash_orig_path;
- const char *group, *owner, *owner_real;
- gboolean free_owner, free_group;
-
- if (file->details->is_gone) {
- return FALSE;
- }
-
- if (info == NULL) {
- nautilus_file_mark_gone (file);
- return TRUE;
- }
-
- file->details->file_info_is_up_to_date = TRUE;
-
- /* FIXME bugzilla.gnome.org 42044: Need to let links that
- * point to the old name know that the file has been renamed.
- */
-
- remove_from_link_hash_table (file);
-
- changed = FALSE;
-
- if (!file->details->got_file_info) {
- changed = TRUE;
- }
- file->details->got_file_info = TRUE;
-
- changed |= nautilus_file_set_display_name (file,
- g_file_info_get_display_name (info),
- g_file_info_get_edit_name (info),
- FALSE);
-
- file_type = g_file_info_get_file_type (info);
- if (file->details->type != file_type) {
- changed = TRUE;
- }
- file->details->type = file_type;
-
- if (!file->details->got_custom_activation_uri &&
- !nautilus_file_is_in_trash (file)) {
- activation_uri = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI);
- if (activation_uri == NULL) {
- if (file->details->activation_uri) {
- g_free (file->details->activation_uri);
- file->details->activation_uri = NULL;
- changed = TRUE;
- }
- } else {
- old_activation_uri = file->details->activation_uri;
- file->details->activation_uri = g_strdup (activation_uri);
-
- if (old_activation_uri) {
- if (strcmp (old_activation_uri,
- file->details->activation_uri) != 0) {
- changed = TRUE;
- }
- g_free (old_activation_uri);
- } else {
- changed = TRUE;
- }
- }
- }
-
- is_symlink = g_file_info_get_is_symlink (info);
- if (file->details->is_symlink != is_symlink) {
- changed = TRUE;
- }
- file->details->is_symlink = is_symlink;
-
- is_hidden = g_file_info_get_is_hidden (info) || g_file_info_get_is_backup (info);
- if (file->details->is_hidden != is_hidden) {
- changed = TRUE;
- }
- file->details->is_hidden = is_hidden;
-
- is_mountpoint = g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT);
- if (file->details->is_mountpoint != is_mountpoint) {
- changed = TRUE;
- }
- file->details->is_mountpoint = is_mountpoint;
-
- has_permissions = g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_MODE);
- permissions = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE);;
- if (file->details->has_permissions != has_permissions ||
- file->details->permissions != permissions) {
- changed = TRUE;
- }
- file->details->has_permissions = has_permissions;
- file->details->permissions = permissions;
-
- /* We default to TRUE for this if we can't know */
- can_read = TRUE;
- can_write = TRUE;
- can_execute = TRUE;
- can_delete = TRUE;
- can_rename = TRUE;
- can_trash = FALSE;
- can_mount = FALSE;
- can_unmount = FALSE;
- can_eject = FALSE;
- can_start = FALSE;
- can_start_degraded = FALSE;
- can_stop = FALSE;
- can_poll_for_media = FALSE;
- is_media_check_automatic = FALSE;
- start_stop_type = G_DRIVE_START_STOP_TYPE_UNKNOWN;
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ)) {
- can_read = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_READ);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE)) {
- can_write = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE)) {
- can_execute = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE)) {
- can_delete = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH)) {
- can_trash = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME)) {
- can_rename = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT)) {
- can_mount = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT)) {
- can_unmount = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT)) {
- can_eject = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START)) {
- can_start = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED)) {
- can_start_degraded = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP)) {
- can_stop = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE)) {
- start_stop_type = g_file_info_get_attribute_uint32 (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL)) {
- can_poll_for_media = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL);
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC)) {
- is_media_check_automatic = g_file_info_get_attribute_boolean (info,
- G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC);
- }
- if (file->details->can_read != can_read ||
- file->details->can_write != can_write ||
- file->details->can_execute != can_execute ||
- file->details->can_delete != can_delete ||
- file->details->can_trash != can_trash ||
- file->details->can_rename != can_rename ||
- file->details->can_mount != can_mount ||
- file->details->can_unmount != can_unmount ||
- file->details->can_eject != can_eject ||
- file->details->can_start != can_start ||
- file->details->can_start_degraded != can_start_degraded ||
- file->details->can_stop != can_stop ||
- file->details->start_stop_type != start_stop_type ||
- file->details->can_poll_for_media != can_poll_for_media ||
- file->details->is_media_check_automatic != is_media_check_automatic) {
- changed = TRUE;
- }
-
- file->details->can_read = can_read;
- file->details->can_write = can_write;
- file->details->can_execute = can_execute;
- file->details->can_delete = can_delete;
- file->details->can_trash = can_trash;
- file->details->can_rename = can_rename;
- file->details->can_mount = can_mount;
- file->details->can_unmount = can_unmount;
- file->details->can_eject = can_eject;
- file->details->can_start = can_start;
- file->details->can_start_degraded = can_start_degraded;
- file->details->can_stop = can_stop;
- file->details->start_stop_type = start_stop_type;
- file->details->can_poll_for_media = can_poll_for_media;
- file->details->is_media_check_automatic = is_media_check_automatic;
-
- free_owner = FALSE;
- owner = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_USER);
- owner_real = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_USER_REAL);
- free_group = FALSE;
- group = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_GROUP);
-
- uid = -1;
- gid = -1;
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_UID)) {
- uid = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_UID);
- if (owner == NULL) {
- free_owner = TRUE;
- owner = g_strdup_printf ("%d", uid);
- }
- }
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_GID)) {
- gid = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_GID);
- if (group == NULL) {
- free_group = TRUE;
- group = g_strdup_printf ("%d", gid);
- }
- }
- if (file->details->uid != uid ||
- file->details->gid != gid) {
- changed = TRUE;
- }
- file->details->uid = uid;
- file->details->gid = gid;
-
- if (g_strcmp0 (eel_ref_str_peek (file->details->owner), owner) != 0) {
- changed = TRUE;
- eel_ref_str_unref (file->details->owner);
- file->details->owner = eel_ref_str_get_unique (owner);
- }
-
- if (g_strcmp0 (eel_ref_str_peek (file->details->owner_real), owner_real) != 0) {
- changed = TRUE;
- eel_ref_str_unref (file->details->owner_real);
- file->details->owner_real = eel_ref_str_get_unique (owner_real);
- }
-
- if (g_strcmp0 (eel_ref_str_peek (file->details->group), group) != 0) {
- changed = TRUE;
- eel_ref_str_unref (file->details->group);
- file->details->group = eel_ref_str_get_unique (group);
- }
-
- if (free_owner) {
- g_free ((char *)owner);
- }
- if (free_group) {
- g_free ((char *)group);
- }
-
- size = -1;
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE)) {
- size = g_file_info_get_size (info);
- }
- if (file->details->size != size) {
- changed = TRUE;
- }
- file->details->size = size;
-
- sort_order = g_file_info_get_sort_order (info);
- if (file->details->sort_order != sort_order) {
- changed = TRUE;
- }
- file->details->sort_order = sort_order;
-
- atime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS);
- mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
- if (file->details->atime != atime ||
- file->details->mtime != mtime) {
- if (file->details->thumbnail == NULL) {
- file->details->thumbnail_is_up_to_date = FALSE;
- }
-
- changed = TRUE;
- }
- file->details->atime = atime;
- file->details->mtime = mtime;
-
- if (file->details->thumbnail != NULL &&
- file->details->thumbnail_mtime != 0 &&
- file->details->thumbnail_mtime != mtime) {
- file->details->thumbnail_is_up_to_date = FALSE;
- changed = TRUE;
- }
-
- icon = g_file_info_get_icon (info);
- if (!g_icon_equal (icon, file->details->icon)) {
- changed = TRUE;
-
- if (file->details->icon) {
- g_object_unref (file->details->icon);
- }
- file->details->icon = g_object_ref (icon);
- }
-
- thumbnail_path = g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH);
- if (g_strcmp0 (file->details->thumbnail_path, thumbnail_path) != 0) {
- changed = TRUE;
- g_free (file->details->thumbnail_path);
- file->details->thumbnail_path = g_strdup (thumbnail_path);
- }
-
- thumbnailing_failed = g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_THUMBNAILING_FAILED);
- if (file->details->thumbnailing_failed != thumbnailing_failed) {
- changed = TRUE;
- file->details->thumbnailing_failed = thumbnailing_failed;
- }
-
- symlink_name = g_file_info_get_symlink_target (info);
- if (g_strcmp0 (file->details->symlink_name, symlink_name) != 0) {
- changed = TRUE;
- g_free (file->details->symlink_name);
- file->details->symlink_name = g_strdup (symlink_name);
- }
-
- mime_type = g_file_info_get_content_type (info);
- if (g_strcmp0 (eel_ref_str_peek (file->details->mime_type), mime_type) != 0) {
- changed = TRUE;
- eel_ref_str_unref (file->details->mime_type);
- file->details->mime_type = eel_ref_str_get_unique (mime_type);
- }
-
- selinux_context = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_SELINUX_CONTEXT);
- if (g_strcmp0 (file->details->selinux_context, selinux_context) != 0) {
- changed = TRUE;
- g_free (file->details->selinux_context);
- file->details->selinux_context = g_strdup (selinux_context);
- }
-
- description = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION);
- if (g_strcmp0 (file->details->description, description) != 0) {
- changed = TRUE;
- g_free (file->details->description);
- file->details->description = g_strdup (description);
- }
-
- filesystem_id = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILESYSTEM);
- if (g_strcmp0 (eel_ref_str_peek (file->details->filesystem_id), filesystem_id) != 0) {
- changed = TRUE;
- eel_ref_str_unref (file->details->filesystem_id);
- file->details->filesystem_id = eel_ref_str_get_unique (filesystem_id);
- }
-
- trash_time = 0;
- time_string = g_file_info_get_attribute_string (info, "trash::deletion-date");
- if (time_string != NULL) {
- g_time_val_from_iso8601 (time_string, &g_trash_time);
- trash_time = g_trash_time.tv_sec;
- }
- if (file->details->trash_time != trash_time) {
- changed = TRUE;
- file->details->trash_time = trash_time;
- }
-
- trash_orig_path = g_file_info_get_attribute_byte_string (info, "trash::orig-path");
- if (g_strcmp0 (file->details->trash_orig_path, trash_orig_path) != 0) {
- changed = TRUE;
- g_free (file->details->trash_orig_path);
- file->details->trash_orig_path = g_strdup (trash_orig_path);
- }
-
- changed |=
- nautilus_file_update_metadata_from_info (file, info);
-
- if (update_name) {
- name = g_file_info_get_name (info);
- if (file->details->name == NULL ||
- strcmp (eel_ref_str_peek (file->details->name), name) != 0) {
- changed = TRUE;
-
- node = nautilus_directory_begin_file_name_change
- (file->details->directory, file);
-
- eel_ref_str_unref (file->details->name);
- if (g_strcmp0 (eel_ref_str_peek (file->details->display_name),
- name) == 0) {
- file->details->name = eel_ref_str_ref (file->details->display_name);
- } else {
- file->details->name = eel_ref_str_new (name);
- }
-
- if (!file->details->got_custom_display_name &&
- g_file_info_get_display_name (info) == NULL) {
- /* If the file info's display name is NULL,
- * nautilus_file_set_display_name() did
- * not unset the display name.
- */
- nautilus_file_clear_display_name (file);
- }
-
- nautilus_directory_end_file_name_change
- (file->details->directory, file, node);
- }
- }
-
- if (changed) {
- add_to_link_hash_table (file);
-
- update_links_if_target (file);
- }
-
- return changed;
+ GFileInfo *info,
+ gboolean update_name)
+{
+ GList *node;
+ gboolean changed;
+ gboolean is_symlink, is_hidden, is_mountpoint;
+ gboolean has_permissions;
+ guint32 permissions;
+ gboolean can_read, can_write, can_execute, can_delete, can_trash, can_rename, can_mount, can_unmount, can_eject;
+ gboolean can_start, can_start_degraded, can_stop, can_poll_for_media, is_media_check_automatic;
+ GDriveStartStopType start_stop_type;
+ gboolean thumbnailing_failed;
+ int uid, gid;
+ goffset size;
+ int sort_order;
+ time_t atime, mtime;
+ time_t trash_time;
+ GTimeVal g_trash_time;
+ const char *time_string;
+ const char *symlink_name, *mime_type, *selinux_context, *name, *thumbnail_path;
+ GFileType file_type;
+ GIcon *icon;
+ char *old_activation_uri;
+ const char *activation_uri;
+ const char *description;
+ const char *filesystem_id;
+ const char *trash_orig_path;
+ const char *group, *owner, *owner_real;
+ gboolean free_owner, free_group;
+
+ if (file->details->is_gone)
+ {
+ return FALSE;
+ }
+
+ if (info == NULL)
+ {
+ nautilus_file_mark_gone (file);
+ return TRUE;
+ }
+
+ file->details->file_info_is_up_to_date = TRUE;
+
+ /* FIXME bugzilla.gnome.org 42044: Need to let links that
+ * point to the old name know that the file has been renamed.
+ */
+
+ remove_from_link_hash_table (file);
+
+ changed = FALSE;
+
+ if (!file->details->got_file_info)
+ {
+ changed = TRUE;
+ }
+ file->details->got_file_info = TRUE;
+
+ changed |= nautilus_file_set_display_name (file,
+ g_file_info_get_display_name (info),
+ g_file_info_get_edit_name (info),
+ FALSE);
+
+ file_type = g_file_info_get_file_type (info);
+ if (file->details->type != file_type)
+ {
+ changed = TRUE;
+ }
+ file->details->type = file_type;
+
+ if (!file->details->got_custom_activation_uri &&
+ !nautilus_file_is_in_trash (file))
+ {
+ activation_uri = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_TARGET_URI);
+ if (activation_uri == NULL)
+ {
+ if (file->details->activation_uri)
+ {
+ g_free (file->details->activation_uri);
+ file->details->activation_uri = NULL;
+ changed = TRUE;
+ }
+ }
+ else
+ {
+ old_activation_uri = file->details->activation_uri;
+ file->details->activation_uri = g_strdup (activation_uri);
+
+ if (old_activation_uri)
+ {
+ if (strcmp (old_activation_uri,
+ file->details->activation_uri) != 0)
+ {
+ changed = TRUE;
+ }
+ g_free (old_activation_uri);
+ }
+ else
+ {
+ changed = TRUE;
+ }
+ }
+ }
+
+ is_symlink = g_file_info_get_is_symlink (info);
+ if (file->details->is_symlink != is_symlink)
+ {
+ changed = TRUE;
+ }
+ file->details->is_symlink = is_symlink;
+
+ is_hidden = g_file_info_get_is_hidden (info) || g_file_info_get_is_backup (info);
+ if (file->details->is_hidden != is_hidden)
+ {
+ changed = TRUE;
+ }
+ file->details->is_hidden = is_hidden;
+
+ is_mountpoint = g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT);
+ if (file->details->is_mountpoint != is_mountpoint)
+ {
+ changed = TRUE;
+ }
+ file->details->is_mountpoint = is_mountpoint;
+
+ has_permissions = g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_MODE);
+ permissions = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE);
+ ;
+ if (file->details->has_permissions != has_permissions ||
+ file->details->permissions != permissions)
+ {
+ changed = TRUE;
+ }
+ file->details->has_permissions = has_permissions;
+ file->details->permissions = permissions;
+
+ /* We default to TRUE for this if we can't know */
+ can_read = TRUE;
+ can_write = TRUE;
+ can_execute = TRUE;
+ can_delete = TRUE;
+ can_rename = TRUE;
+ can_trash = FALSE;
+ can_mount = FALSE;
+ can_unmount = FALSE;
+ can_eject = FALSE;
+ can_start = FALSE;
+ can_start_degraded = FALSE;
+ can_stop = FALSE;
+ can_poll_for_media = FALSE;
+ is_media_check_automatic = FALSE;
+ start_stop_type = G_DRIVE_START_STOP_TYPE_UNKNOWN;
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_READ))
+ {
+ can_read = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_READ);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE))
+ {
+ can_write = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE))
+ {
+ can_execute = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_EXECUTE);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE))
+ {
+ can_delete = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH))
+ {
+ can_trash = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME))
+ {
+ can_rename = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT))
+ {
+ can_mount = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_CAN_MOUNT);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT))
+ {
+ can_unmount = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_CAN_UNMOUNT);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT))
+ {
+ can_eject = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_CAN_EJECT);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START))
+ {
+ can_start = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED))
+ {
+ can_start_degraded = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_CAN_START_DEGRADED);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP))
+ {
+ can_stop = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_CAN_STOP);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE))
+ {
+ start_stop_type = g_file_info_get_attribute_uint32 (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_START_STOP_TYPE);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL))
+ {
+ can_poll_for_media = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_CAN_POLL);
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC))
+ {
+ is_media_check_automatic = g_file_info_get_attribute_boolean (info,
+ G_FILE_ATTRIBUTE_MOUNTABLE_IS_MEDIA_CHECK_AUTOMATIC);
+ }
+ if (file->details->can_read != can_read ||
+ file->details->can_write != can_write ||
+ file->details->can_execute != can_execute ||
+ file->details->can_delete != can_delete ||
+ file->details->can_trash != can_trash ||
+ file->details->can_rename != can_rename ||
+ file->details->can_mount != can_mount ||
+ file->details->can_unmount != can_unmount ||
+ file->details->can_eject != can_eject ||
+ file->details->can_start != can_start ||
+ file->details->can_start_degraded != can_start_degraded ||
+ file->details->can_stop != can_stop ||
+ file->details->start_stop_type != start_stop_type ||
+ file->details->can_poll_for_media != can_poll_for_media ||
+ file->details->is_media_check_automatic != is_media_check_automatic)
+ {
+ changed = TRUE;
+ }
+
+ file->details->can_read = can_read;
+ file->details->can_write = can_write;
+ file->details->can_execute = can_execute;
+ file->details->can_delete = can_delete;
+ file->details->can_trash = can_trash;
+ file->details->can_rename = can_rename;
+ file->details->can_mount = can_mount;
+ file->details->can_unmount = can_unmount;
+ file->details->can_eject = can_eject;
+ file->details->can_start = can_start;
+ file->details->can_start_degraded = can_start_degraded;
+ file->details->can_stop = can_stop;
+ file->details->start_stop_type = start_stop_type;
+ file->details->can_poll_for_media = can_poll_for_media;
+ file->details->is_media_check_automatic = is_media_check_automatic;
+
+ free_owner = FALSE;
+ owner = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_USER);
+ owner_real = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_USER_REAL);
+ free_group = FALSE;
+ group = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_OWNER_GROUP);
+
+ uid = -1;
+ gid = -1;
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_UID))
+ {
+ uid = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_UID);
+ if (owner == NULL)
+ {
+ free_owner = TRUE;
+ owner = g_strdup_printf ("%d", uid);
+ }
+ }
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_UNIX_GID))
+ {
+ gid = g_file_info_get_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_GID);
+ if (group == NULL)
+ {
+ free_group = TRUE;
+ group = g_strdup_printf ("%d", gid);
+ }
+ }
+ if (file->details->uid != uid ||
+ file->details->gid != gid)
+ {
+ changed = TRUE;
+ }
+ file->details->uid = uid;
+ file->details->gid = gid;
+
+ if (g_strcmp0 (eel_ref_str_peek (file->details->owner), owner) != 0)
+ {
+ changed = TRUE;
+ eel_ref_str_unref (file->details->owner);
+ file->details->owner = eel_ref_str_get_unique (owner);
+ }
+
+ if (g_strcmp0 (eel_ref_str_peek (file->details->owner_real), owner_real) != 0)
+ {
+ changed = TRUE;
+ eel_ref_str_unref (file->details->owner_real);
+ file->details->owner_real = eel_ref_str_get_unique (owner_real);
+ }
+
+ if (g_strcmp0 (eel_ref_str_peek (file->details->group), group) != 0)
+ {
+ changed = TRUE;
+ eel_ref_str_unref (file->details->group);
+ file->details->group = eel_ref_str_get_unique (group);
+ }
+
+ if (free_owner)
+ {
+ g_free ((char *) owner);
+ }
+ if (free_group)
+ {
+ g_free ((char *) group);
+ }
+
+ size = -1;
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_STANDARD_SIZE))
+ {
+ size = g_file_info_get_size (info);
+ }
+ if (file->details->size != size)
+ {
+ changed = TRUE;
+ }
+ file->details->size = size;
+
+ sort_order = g_file_info_get_sort_order (info);
+ if (file->details->sort_order != sort_order)
+ {
+ changed = TRUE;
+ }
+ file->details->sort_order = sort_order;
+
+ atime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_ACCESS);
+ mtime = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_TIME_MODIFIED);
+ if (file->details->atime != atime ||
+ file->details->mtime != mtime)
+ {
+ if (file->details->thumbnail == NULL)
+ {
+ file->details->thumbnail_is_up_to_date = FALSE;
+ }
+
+ changed = TRUE;
+ }
+ file->details->atime = atime;
+ file->details->mtime = mtime;
+
+ if (file->details->thumbnail != NULL &&
+ file->details->thumbnail_mtime != 0 &&
+ file->details->thumbnail_mtime != mtime)
+ {
+ file->details->thumbnail_is_up_to_date = FALSE;
+ changed = TRUE;
+ }
+
+ icon = g_file_info_get_icon (info);
+ if (!g_icon_equal (icon, file->details->icon))
+ {
+ changed = TRUE;
+
+ if (file->details->icon)
+ {
+ g_object_unref (file->details->icon);
+ }
+ file->details->icon = g_object_ref (icon);
+ }
+
+ thumbnail_path = g_file_info_get_attribute_byte_string (info, G_FILE_ATTRIBUTE_THUMBNAIL_PATH);
+ if (g_strcmp0 (file->details->thumbnail_path, thumbnail_path) != 0)
+ {
+ changed = TRUE;
+ g_free (file->details->thumbnail_path);
+ file->details->thumbnail_path = g_strdup (thumbnail_path);
+ }
+
+ thumbnailing_failed = g_file_info_get_attribute_boolean (info, G_FILE_ATTRIBUTE_THUMBNAILING_FAILED);
+ if (file->details->thumbnailing_failed != thumbnailing_failed)
+ {
+ changed = TRUE;
+ file->details->thumbnailing_failed = thumbnailing_failed;
+ }
+
+ symlink_name = g_file_info_get_symlink_target (info);
+ if (g_strcmp0 (file->details->symlink_name, symlink_name) != 0)
+ {
+ changed = TRUE;
+ g_free (file->details->symlink_name);
+ file->details->symlink_name = g_strdup (symlink_name);
+ }
+
+ mime_type = g_file_info_get_content_type (info);
+ if (g_strcmp0 (eel_ref_str_peek (file->details->mime_type), mime_type) != 0)
+ {
+ changed = TRUE;
+ eel_ref_str_unref (file->details->mime_type);
+ file->details->mime_type = eel_ref_str_get_unique (mime_type);
+ }
+
+ selinux_context = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_SELINUX_CONTEXT);
+ if (g_strcmp0 (file->details->selinux_context, selinux_context) != 0)
+ {
+ changed = TRUE;
+ g_free (file->details->selinux_context);
+ file->details->selinux_context = g_strdup (selinux_context);
+ }
+
+ description = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_STANDARD_DESCRIPTION);
+ if (g_strcmp0 (file->details->description, description) != 0)
+ {
+ changed = TRUE;
+ g_free (file->details->description);
+ file->details->description = g_strdup (description);
+ }
+
+ filesystem_id = g_file_info_get_attribute_string (info, G_FILE_ATTRIBUTE_ID_FILESYSTEM);
+ if (g_strcmp0 (eel_ref_str_peek (file->details->filesystem_id), filesystem_id) != 0)
+ {
+ changed = TRUE;
+ eel_ref_str_unref (file->details->filesystem_id);
+ file->details->filesystem_id = eel_ref_str_get_unique (filesystem_id);
+ }
+
+ trash_time = 0;
+ time_string = g_file_info_get_attribute_string (info, "trash::deletion-date");
+ if (time_string != NULL)
+ {
+ g_time_val_from_iso8601 (time_string, &g_trash_time);
+ trash_time = g_trash_time.tv_sec;
+ }
+ if (file->details->trash_time != trash_time)
+ {
+ changed = TRUE;
+ file->details->trash_time = trash_time;
+ }
+
+ trash_orig_path = g_file_info_get_attribute_byte_string (info, "trash::orig-path");
+ if (g_strcmp0 (file->details->trash_orig_path, trash_orig_path) != 0)
+ {
+ changed = TRUE;
+ g_free (file->details->trash_orig_path);
+ file->details->trash_orig_path = g_strdup (trash_orig_path);
+ }
+
+ changed |=
+ nautilus_file_update_metadata_from_info (file, info);
+
+ if (update_name)
+ {
+ name = g_file_info_get_name (info);
+ if (file->details->name == NULL ||
+ strcmp (eel_ref_str_peek (file->details->name), name) != 0)
+ {
+ changed = TRUE;
+
+ node = nautilus_directory_begin_file_name_change
+ (file->details->directory, file);
+
+ eel_ref_str_unref (file->details->name);
+ if (g_strcmp0 (eel_ref_str_peek (file->details->display_name),
+ name) == 0)
+ {
+ file->details->name = eel_ref_str_ref (file->details->display_name);
+ }
+ else
+ {
+ file->details->name = eel_ref_str_new (name);
+ }
+
+ if (!file->details->got_custom_display_name &&
+ g_file_info_get_display_name (info) == NULL)
+ {
+ /* If the file info's display name is NULL,
+ * nautilus_file_set_display_name() did
+ * not unset the display name.
+ */
+ nautilus_file_clear_display_name (file);
+ }
+
+ nautilus_directory_end_file_name_change
+ (file->details->directory, file, node);
+ }
+ }
+
+ if (changed)
+ {
+ add_to_link_hash_table (file);
+
+ update_links_if_target (file);
+ }
+
+ return changed;
}
static gboolean
update_info_and_name (NautilusFile *file,
- GFileInfo *info)
+ GFileInfo *info)
{
- return update_info_internal (file, info, TRUE);
+ return update_info_internal (file, info, TRUE);
}
gboolean
nautilus_file_update_info (NautilusFile *file,
- GFileInfo *info)
+ GFileInfo *info)
{
- return update_info_internal (file, info, FALSE);
+ return update_info_internal (file, info, FALSE);
}
static gboolean
update_name_internal (NautilusFile *file,
- const char *name,
- gboolean in_directory)
+ const char *name,
+ gboolean in_directory)
{
- GList *node;
+ GList *node;
- g_assert (name != NULL);
+ g_assert (name != NULL);
- if (file->details->is_gone) {
- return FALSE;
- }
+ if (file->details->is_gone)
+ {
+ return FALSE;
+ }
+
+ if (name_is (file, name))
+ {
+ return FALSE;
+ }
- if (name_is (file, name)) {
- return FALSE;
- }
-
- node = NULL;
- if (in_directory) {
- node = nautilus_directory_begin_file_name_change
- (file->details->directory, file);
- }
-
- eel_ref_str_unref (file->details->name);
- file->details->name = eel_ref_str_new (name);
+ node = NULL;
+ if (in_directory)
+ {
+ node = nautilus_directory_begin_file_name_change
+ (file->details->directory, file);
+ }
- if (!file->details->got_custom_display_name) {
- nautilus_file_clear_display_name (file);
- }
+ eel_ref_str_unref (file->details->name);
+ file->details->name = eel_ref_str_new (name);
- if (in_directory) {
- nautilus_directory_end_file_name_change
- (file->details->directory, file, node);
- }
+ if (!file->details->got_custom_display_name)
+ {
+ nautilus_file_clear_display_name (file);
+ }
- return TRUE;
+ if (in_directory)
+ {
+ nautilus_directory_end_file_name_change
+ (file->details->directory, file, node);
+ }
+
+ return TRUE;
}
gboolean
-nautilus_file_update_name (NautilusFile *file, const char *name)
+nautilus_file_update_name (NautilusFile *file,
+ const char *name)
{
- gboolean ret;
-
- ret = update_name_internal (file, name, TRUE);
+ gboolean ret;
+
+ ret = update_name_internal (file, name, TRUE);
- if (ret) {
- update_links_if_target (file);
- }
+ if (ret)
+ {
+ update_links_if_target (file);
+ }
- return ret;
+ return ret;
}
gboolean
-nautilus_file_update_name_and_directory (NautilusFile *file,
- const char *name,
- NautilusDirectory *new_directory)
-{
- NautilusDirectory *old_directory;
- FileMonitors *monitors;
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (file->details->directory), FALSE);
- g_return_val_if_fail (!file->details->is_gone, FALSE);
- g_return_val_if_fail (!nautilus_file_is_self_owned (file), FALSE);
- g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (new_directory), FALSE);
-
- old_directory = file->details->directory;
- if (old_directory == new_directory) {
- if (name) {
- return update_name_internal (file, name, TRUE);
- } else {
- return FALSE;
- }
- }
+nautilus_file_update_name_and_directory (NautilusFile *file,
+ const char *name,
+ NautilusDirectory *new_directory)
+{
+ NautilusDirectory *old_directory;
+ FileMonitors *monitors;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (file->details->directory), FALSE);
+ g_return_val_if_fail (!file->details->is_gone, FALSE);
+ g_return_val_if_fail (!nautilus_file_is_self_owned (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_DIRECTORY (new_directory), FALSE);
+
+ old_directory = file->details->directory;
+ if (old_directory == new_directory)
+ {
+ if (name)
+ {
+ return update_name_internal (file, name, TRUE);
+ }
+ else
+ {
+ return FALSE;
+ }
+ }
- nautilus_file_ref (file);
+ nautilus_file_ref (file);
- /* FIXME bugzilla.gnome.org 42044: Need to let links that
- * point to the old name know that the file has been moved.
- */
+ /* FIXME bugzilla.gnome.org 42044: Need to let links that
+ * point to the old name know that the file has been moved.
+ */
- remove_from_link_hash_table (file);
+ remove_from_link_hash_table (file);
- monitors = nautilus_directory_remove_file_monitors (old_directory, file);
- nautilus_directory_remove_file (old_directory, file);
+ monitors = nautilus_directory_remove_file_monitors (old_directory, file);
+ nautilus_directory_remove_file (old_directory, file);
- nautilus_file_set_directory (file, new_directory);
+ nautilus_file_set_directory (file, new_directory);
- if (name) {
- update_name_internal (file, name, FALSE);
- }
+ if (name)
+ {
+ update_name_internal (file, name, FALSE);
+ }
- nautilus_directory_add_file (new_directory, file);
- nautilus_directory_add_file_monitors (new_directory, file, monitors);
+ nautilus_directory_add_file (new_directory, file);
+ nautilus_directory_add_file_monitors (new_directory, file, monitors);
- add_to_link_hash_table (file);
+ add_to_link_hash_table (file);
- update_links_if_target (file);
+ update_links_if_target (file);
- nautilus_file_unref (file);
+ nautilus_file_unref (file);
- return TRUE;
+ return TRUE;
}
static Knowledge
get_item_count (NautilusFile *file,
- guint *count)
+ guint *count)
{
- gboolean known, unreadable;
+ gboolean known, unreadable;
- known = nautilus_file_get_directory_item_count
- (file, count, &unreadable);
- if (!known) {
- return UNKNOWN;
- }
- if (unreadable) {
- return UNKNOWABLE;
- }
- return KNOWN;
+ known = nautilus_file_get_directory_item_count
+ (file, count, &unreadable);
+ if (!known)
+ {
+ return UNKNOWN;
+ }
+ if (unreadable)
+ {
+ return UNKNOWABLE;
+ }
+ return KNOWN;
}
static Knowledge
get_size (NautilusFile *file,
- goffset *size)
-{
- /* If we tried and failed, then treat it like there is no size
- * to know.
- */
- if (file->details->get_info_failed) {
- return UNKNOWABLE;
- }
-
- /* If the info is NULL that means we haven't even tried yet,
- * so it's just unknown, not unknowable.
- */
- if (!file->details->got_file_info) {
- return UNKNOWN;
- }
-
- /* If we got info with no size in it, it means there is no
- * such thing as a size as far as gnome-vfs is concerned,
- * so "unknowable".
- */
- if (file->details->size == -1) {
- return UNKNOWABLE;
- }
-
- /* We have a size! */
- *size = file->details->size;
- return KNOWN;
+ goffset *size)
+{
+ /* If we tried and failed, then treat it like there is no size
+ * to know.
+ */
+ if (file->details->get_info_failed)
+ {
+ return UNKNOWABLE;
+ }
+
+ /* If the info is NULL that means we haven't even tried yet,
+ * so it's just unknown, not unknowable.
+ */
+ if (!file->details->got_file_info)
+ {
+ return UNKNOWN;
+ }
+
+ /* If we got info with no size in it, it means there is no
+ * such thing as a size as far as gnome-vfs is concerned,
+ * so "unknowable".
+ */
+ if (file->details->size == -1)
+ {
+ return UNKNOWABLE;
+ }
+
+ /* We have a size! */
+ *size = file->details->size;
+ return KNOWN;
}
static Knowledge
-get_time (NautilusFile *file,
- time_t *time_out,
- NautilusDateType type)
-{
- time_t time;
-
- /* If we tried and failed, then treat it like there is no size
- * to know.
- */
- if (file->details->get_info_failed) {
- return UNKNOWABLE;
- }
-
- /* If the info is NULL that means we haven't even tried yet,
- * so it's just unknown, not unknowable.
- */
- if (!file->details->got_file_info) {
- return UNKNOWN;
- }
-
- switch (type) {
- case NAUTILUS_DATE_TYPE_MODIFIED:
- time = file->details->mtime;
- break;
- case NAUTILUS_DATE_TYPE_ACCESSED:
- time = file->details->atime;
- break;
- case NAUTILUS_DATE_TYPE_TRASHED:
- time = file->details->trash_time;
- break;
- default:
- g_assert_not_reached ();
- break;
- }
-
- *time_out = time;
-
- /* If we got info with no modification time in it, it means
- * there is no such thing as a modification time as far as
- * gnome-vfs is concerned, so "unknowable".
- */
- if (time == 0) {
- return UNKNOWABLE;
- }
- return KNOWN;
-}
-
-static int
-compare_directories_by_count (NautilusFile *file_1, NautilusFile *file_2)
-{
- /* Sort order:
- * Directories with unknown # of items
- * Directories with "unknowable" # of items
- * Directories with 0 items
- * Directories with n items
- */
-
- Knowledge count_known_1, count_known_2;
- guint count_1, count_2;
+get_time (NautilusFile *file,
+ time_t *time_out,
+ NautilusDateType type)
+{
+ time_t time;
+
+ /* If we tried and failed, then treat it like there is no size
+ * to know.
+ */
+ if (file->details->get_info_failed)
+ {
+ return UNKNOWABLE;
+ }
+
+ /* If the info is NULL that means we haven't even tried yet,
+ * so it's just unknown, not unknowable.
+ */
+ if (!file->details->got_file_info)
+ {
+ return UNKNOWN;
+ }
+
+ switch (type)
+ {
+ case NAUTILUS_DATE_TYPE_MODIFIED:
+ {
+ time = file->details->mtime;
+ }
+ break;
- count_known_1 = get_item_count (file_1, &count_1);
- count_known_2 = get_item_count (file_2, &count_2);
+ case NAUTILUS_DATE_TYPE_ACCESSED:
+ {
+ time = file->details->atime;
+ }
+ break;
- if (count_known_1 > count_known_2) {
- return -1;
- }
- if (count_known_1 < count_known_2) {
- return +1;
- }
+ case NAUTILUS_DATE_TYPE_TRASHED:
+ {
+ time = file->details->trash_time;
+ }
+ break;
- /* count_known_1 and count_known_2 are equal now. Check if count
- * details are UNKNOWABLE or UNKNOWN.
- */
- if (count_known_1 == UNKNOWABLE || count_known_1 == UNKNOWN) {
- return 0;
- }
+ default:
+ {
+ g_assert_not_reached ();
+ }
+ break;
+ }
- if (count_1 < count_2) {
- return -1;
- }
- if (count_1 > count_2) {
- return +1;
- }
+ *time_out = time;
- return 0;
+ /* If we got info with no modification time in it, it means
+ * there is no such thing as a modification time as far as
+ * gnome-vfs is concerned, so "unknowable".
+ */
+ if (time == 0)
+ {
+ return UNKNOWABLE;
+ }
+ return KNOWN;
}
static int
-compare_files_by_size (NautilusFile *file_1, NautilusFile *file_2)
-{
- /* Sort order:
- * Files with unknown size.
- * Files with "unknowable" size.
- * Files with smaller sizes.
- * Files with large sizes.
- */
-
- Knowledge size_known_1, size_known_2;
- goffset size_1 = 0, size_2 = 0;
-
- size_known_1 = get_size (file_1, &size_1);
- size_known_2 = get_size (file_2, &size_2);
-
- if (size_known_1 > size_known_2) {
- return -1;
- }
- if (size_known_1 < size_known_2) {
- return +1;
- }
-
- /* size_known_1 and size_known_2 are equal now. Check if size
- * details are UNKNOWABLE or UNKNOWN
- */
- if (size_known_1 == UNKNOWABLE || size_known_1 == UNKNOWN) {
- return 0;
- }
-
- if (size_1 < size_2) {
- return -1;
- }
- if (size_1 > size_2) {
- return +1;
- }
-
- return 0;
+compare_directories_by_count (NautilusFile *file_1,
+ NautilusFile *file_2)
+{
+ /* Sort order:
+ * Directories with unknown # of items
+ * Directories with "unknowable" # of items
+ * Directories with 0 items
+ * Directories with n items
+ */
+
+ Knowledge count_known_1, count_known_2;
+ guint count_1, count_2;
+
+ count_known_1 = get_item_count (file_1, &count_1);
+ count_known_2 = get_item_count (file_2, &count_2);
+
+ if (count_known_1 > count_known_2)
+ {
+ return -1;
+ }
+ if (count_known_1 < count_known_2)
+ {
+ return +1;
+ }
+
+ /* count_known_1 and count_known_2 are equal now. Check if count
+ * details are UNKNOWABLE or UNKNOWN.
+ */
+ if (count_known_1 == UNKNOWABLE || count_known_1 == UNKNOWN)
+ {
+ return 0;
+ }
+
+ if (count_1 < count_2)
+ {
+ return -1;
+ }
+ if (count_1 > count_2)
+ {
+ return +1;
+ }
+
+ return 0;
}
static int
-compare_by_size (NautilusFile *file_1, NautilusFile *file_2)
-{
- /* Sort order:
- * Directories with n items
- * Directories with 0 items
- * Directories with "unknowable" # of items
- * Directories with unknown # of items
- * Files with large sizes.
- * Files with smaller sizes.
- * Files with "unknowable" size.
- * Files with unknown size.
- */
-
- gboolean is_directory_1, is_directory_2;
-
- is_directory_1 = nautilus_file_is_directory (file_1);
- is_directory_2 = nautilus_file_is_directory (file_2);
-
- if (is_directory_1 && !is_directory_2) {
- return -1;
- }
- if (is_directory_2 && !is_directory_1) {
- return +1;
- }
-
- if (is_directory_1) {
- return compare_directories_by_count (file_1, file_2);
- } else {
- return compare_files_by_size (file_1, file_2);
- }
+compare_files_by_size (NautilusFile *file_1,
+ NautilusFile *file_2)
+{
+ /* Sort order:
+ * Files with unknown size.
+ * Files with "unknowable" size.
+ * Files with smaller sizes.
+ * Files with large sizes.
+ */
+
+ Knowledge size_known_1, size_known_2;
+ goffset size_1 = 0, size_2 = 0;
+
+ size_known_1 = get_size (file_1, &size_1);
+ size_known_2 = get_size (file_2, &size_2);
+
+ if (size_known_1 > size_known_2)
+ {
+ return -1;
+ }
+ if (size_known_1 < size_known_2)
+ {
+ return +1;
+ }
+
+ /* size_known_1 and size_known_2 are equal now. Check if size
+ * details are UNKNOWABLE or UNKNOWN
+ */
+ if (size_known_1 == UNKNOWABLE || size_known_1 == UNKNOWN)
+ {
+ return 0;
+ }
+
+ if (size_1 < size_2)
+ {
+ return -1;
+ }
+ if (size_1 > size_2)
+ {
+ return +1;
+ }
+
+ return 0;
}
static int
-compare_by_display_name (NautilusFile *file_1, NautilusFile *file_2)
-{
- const char *name_1, *name_2;
- const char *key_1, *key_2;
- gboolean sort_last_1, sort_last_2;
- int compare;
-
- name_1 = nautilus_file_peek_display_name (file_1);
- name_2 = nautilus_file_peek_display_name (file_2);
-
- sort_last_1 = name_1[0] == SORT_LAST_CHAR1 || name_1[0] == SORT_LAST_CHAR2;
- sort_last_2 = name_2[0] == SORT_LAST_CHAR1 || name_2[0] == SORT_LAST_CHAR2;
-
- if (sort_last_1 && !sort_last_2) {
- compare = +1;
- } else if (!sort_last_1 && sort_last_2) {
- compare = -1;
- } else {
- key_1 = nautilus_file_peek_display_name_collation_key (file_1);
- key_2 = nautilus_file_peek_display_name_collation_key (file_2);
- compare = strcmp (key_1, key_2);
- }
+compare_by_size (NautilusFile *file_1,
+ NautilusFile *file_2)
+{
+ /* Sort order:
+ * Directories with n items
+ * Directories with 0 items
+ * Directories with "unknowable" # of items
+ * Directories with unknown # of items
+ * Files with large sizes.
+ * Files with smaller sizes.
+ * Files with "unknowable" size.
+ * Files with unknown size.
+ */
+
+ gboolean is_directory_1, is_directory_2;
+
+ is_directory_1 = nautilus_file_is_directory (file_1);
+ is_directory_2 = nautilus_file_is_directory (file_2);
+
+ if (is_directory_1 && !is_directory_2)
+ {
+ return -1;
+ }
+ if (is_directory_2 && !is_directory_1)
+ {
+ return +1;
+ }
+
+ if (is_directory_1)
+ {
+ return compare_directories_by_count (file_1, file_2);
+ }
+ else
+ {
+ return compare_files_by_size (file_1, file_2);
+ }
+}
- return compare;
+static int
+compare_by_display_name (NautilusFile *file_1,
+ NautilusFile *file_2)
+{
+ const char *name_1, *name_2;
+ const char *key_1, *key_2;
+ gboolean sort_last_1, sort_last_2;
+ int compare;
+
+ name_1 = nautilus_file_peek_display_name (file_1);
+ name_2 = nautilus_file_peek_display_name (file_2);
+
+ sort_last_1 = name_1[0] == SORT_LAST_CHAR1 || name_1[0] == SORT_LAST_CHAR2;
+ sort_last_2 = name_2[0] == SORT_LAST_CHAR1 || name_2[0] == SORT_LAST_CHAR2;
+
+ if (sort_last_1 && !sort_last_2)
+ {
+ compare = +1;
+ }
+ else if (!sort_last_1 && sort_last_2)
+ {
+ compare = -1;
+ }
+ else
+ {
+ key_1 = nautilus_file_peek_display_name_collation_key (file_1);
+ key_2 = nautilus_file_peek_display_name_collation_key (file_2);
+ compare = strcmp (key_1, key_2);
+ }
+
+ return compare;
}
static int
-compare_by_directory_name (NautilusFile *file_1, NautilusFile *file_2)
+compare_by_directory_name (NautilusFile *file_1,
+ NautilusFile *file_2)
{
- return strcmp (file_1->details->directory_name_collation_key,
- file_2->details->directory_name_collation_key);
+ return strcmp (file_1->details->directory_name_collation_key,
+ file_2->details->directory_name_collation_key);
}
static GList *
prepend_automatic_keywords (NautilusFile *file,
- GList *names)
-{
- /* Prepend in reverse order. */
- NautilusFile *parent;
-
- parent = nautilus_file_get_parent (file);
-
- /* Trash files are assumed to be read-only,
- * so we want to ignore them here. */
- if (!nautilus_file_can_write (file) &&
- !nautilus_file_is_in_trash (file) &&
- (parent == NULL || nautilus_file_can_write (parent))) {
- names = g_list_prepend
- (names, g_strdup (NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE));
- }
- if (!nautilus_file_can_read (file)) {
- names = g_list_prepend
- (names, g_strdup (NAUTILUS_FILE_EMBLEM_NAME_CANT_READ));
- }
- if (nautilus_file_is_symbolic_link (file)) {
- names = g_list_prepend
- (names, g_strdup (NAUTILUS_FILE_EMBLEM_NAME_SYMBOLIC_LINK));
- }
-
- if (parent) {
- nautilus_file_unref (parent);
- }
-
-
- return names;
+ GList *names)
+{
+ /* Prepend in reverse order. */
+ NautilusFile *parent;
+
+ parent = nautilus_file_get_parent (file);
+
+ /* Trash files are assumed to be read-only,
+ * so we want to ignore them here. */
+ if (!nautilus_file_can_write (file) &&
+ !nautilus_file_is_in_trash (file) &&
+ (parent == NULL || nautilus_file_can_write (parent)))
+ {
+ names = g_list_prepend
+ (names, g_strdup (NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE));
+ }
+ if (!nautilus_file_can_read (file))
+ {
+ names = g_list_prepend
+ (names, g_strdup (NAUTILUS_FILE_EMBLEM_NAME_CANT_READ));
+ }
+ if (nautilus_file_is_symbolic_link (file))
+ {
+ names = g_list_prepend
+ (names, g_strdup (NAUTILUS_FILE_EMBLEM_NAME_SYMBOLIC_LINK));
+ }
+
+ if (parent)
+ {
+ nautilus_file_unref (parent);
+ }
+
+
+ return names;
}
static int
-compare_by_type (NautilusFile *file_1, NautilusFile *file_2)
-{
- gboolean is_directory_1;
- gboolean is_directory_2;
- char *type_string_1;
- char *type_string_2;
- int result;
-
- /* Directories go first. Then, if mime types are identical,
- * don't bother getting strings (for speed). This assumes
- * that the string is dependent entirely on the mime type,
- * which is true now but might not be later.
- */
- is_directory_1 = nautilus_file_is_directory (file_1);
- is_directory_2 = nautilus_file_is_directory (file_2);
-
- if (is_directory_1 && is_directory_2) {
- return 0;
- }
-
- if (is_directory_1) {
- return -1;
- }
-
- if (is_directory_2) {
- return +1;
- }
-
- if (file_1->details->mime_type != NULL &&
- file_2->details->mime_type != NULL &&
- strcmp (eel_ref_str_peek (file_1->details->mime_type),
- eel_ref_str_peek (file_2->details->mime_type)) == 0) {
- return 0;
- }
-
- type_string_1 = nautilus_file_get_type_as_string (file_1);
- type_string_2 = nautilus_file_get_type_as_string (file_2);
-
- if (type_string_1 == NULL || type_string_2 == NULL) {
- if (type_string_1 != NULL) {
- return -1;
- }
+compare_by_type (NautilusFile *file_1,
+ NautilusFile *file_2)
+{
+ gboolean is_directory_1;
+ gboolean is_directory_2;
+ char *type_string_1;
+ char *type_string_2;
+ int result;
+
+ /* Directories go first. Then, if mime types are identical,
+ * don't bother getting strings (for speed). This assumes
+ * that the string is dependent entirely on the mime type,
+ * which is true now but might not be later.
+ */
+ is_directory_1 = nautilus_file_is_directory (file_1);
+ is_directory_2 = nautilus_file_is_directory (file_2);
+
+ if (is_directory_1 && is_directory_2)
+ {
+ return 0;
+ }
+
+ if (is_directory_1)
+ {
+ return -1;
+ }
+
+ if (is_directory_2)
+ {
+ return +1;
+ }
+
+ if (file_1->details->mime_type != NULL &&
+ file_2->details->mime_type != NULL &&
+ strcmp (eel_ref_str_peek (file_1->details->mime_type),
+ eel_ref_str_peek (file_2->details->mime_type)) == 0)
+ {
+ return 0;
+ }
+
+ type_string_1 = nautilus_file_get_type_as_string (file_1);
+ type_string_2 = nautilus_file_get_type_as_string (file_2);
+
+ if (type_string_1 == NULL || type_string_2 == NULL)
+ {
+ if (type_string_1 != NULL)
+ {
+ return -1;
+ }
- if (type_string_2 != NULL) {
- return 1;
- }
+ if (type_string_2 != NULL)
+ {
+ return 1;
+ }
- return 0;
- }
+ return 0;
+ }
- result = g_utf8_collate (type_string_1, type_string_2);
+ result = g_utf8_collate (type_string_1, type_string_2);
- g_free (type_string_1);
- g_free (type_string_2);
+ g_free (type_string_1);
+ g_free (type_string_2);
- return result;
+ return result;
}
static Knowledge
get_search_relevance (NautilusFile *file,
- gdouble *relevance_out)
+ gdouble *relevance_out)
{
- /* we're only called in search directories, and in that
- * case, the relevance is always known (or zero).
- */
- *relevance_out = file->details->search_relevance;
- return KNOWN;
+ /* we're only called in search directories, and in that
+ * case, the relevance is always known (or zero).
+ */
+ *relevance_out = file->details->search_relevance;
+ return KNOWN;
}
static int
-compare_by_search_relevance (NautilusFile *file_1, NautilusFile *file_2)
+compare_by_search_relevance (NautilusFile *file_1,
+ NautilusFile *file_2)
{
- gdouble r_1, r_2;
+ gdouble r_1, r_2;
- get_search_relevance (file_1, &r_1);
- get_search_relevance (file_2, &r_2);
+ get_search_relevance (file_1, &r_1);
+ get_search_relevance (file_2, &r_2);
- if (r_1 < r_2) {
- return -1;
- }
- if (r_1 > r_2) {
- return +1;
- }
+ if (r_1 < r_2)
+ {
+ return -1;
+ }
+ if (r_1 > r_2)
+ {
+ return +1;
+ }
- return 0;
+ return 0;
}
static int
-compare_by_time (NautilusFile *file_1, NautilusFile *file_2, NautilusDateType type)
-{
- /* Sort order:
- * Files with unknown times.
- * Files with "unknowable" times.
- * Files with older times.
- * Files with newer times.
- */
-
- Knowledge time_known_1, time_known_2;
- time_t time_1, time_2;
-
- time_1 = 0;
- time_2 = 0;
-
- time_known_1 = get_time (file_1, &time_1, type);
- time_known_2 = get_time (file_2, &time_2, type);
-
- if (time_known_1 > time_known_2) {
- return -1;
- }
- if (time_known_1 < time_known_2) {
- return +1;
- }
-
- /* Now time_known_1 is equal to time_known_2. Check whether
- * we failed to get modification times for files
- */
- if(time_known_1 == UNKNOWABLE || time_known_1 == UNKNOWN) {
- return 0;
- }
-
- if (time_1 < time_2) {
- return -1;
- }
- if (time_1 > time_2) {
- return +1;
- }
-
- return 0;
+compare_by_time (NautilusFile *file_1,
+ NautilusFile *file_2,
+ NautilusDateType type)
+{
+ /* Sort order:
+ * Files with unknown times.
+ * Files with "unknowable" times.
+ * Files with older times.
+ * Files with newer times.
+ */
+
+ Knowledge time_known_1, time_known_2;
+ time_t time_1, time_2;
+
+ time_1 = 0;
+ time_2 = 0;
+
+ time_known_1 = get_time (file_1, &time_1, type);
+ time_known_2 = get_time (file_2, &time_2, type);
+
+ if (time_known_1 > time_known_2)
+ {
+ return -1;
+ }
+ if (time_known_1 < time_known_2)
+ {
+ return +1;
+ }
+
+ /* Now time_known_1 is equal to time_known_2. Check whether
+ * we failed to get modification times for files
+ */
+ if(time_known_1 == UNKNOWABLE || time_known_1 == UNKNOWN)
+ {
+ return 0;
+ }
+
+ if (time_1 < time_2)
+ {
+ return -1;
+ }
+ if (time_1 > time_2)
+ {
+ return +1;
+ }
+
+ return 0;
}
static int
-compare_by_full_path (NautilusFile *file_1, NautilusFile *file_2)
+compare_by_full_path (NautilusFile *file_1,
+ NautilusFile *file_2)
{
- int compare;
+ int compare;
- compare = compare_by_directory_name (file_1, file_2);
- if (compare != 0) {
- return compare;
- }
- return compare_by_display_name (file_1, file_2);
+ compare = compare_by_directory_name (file_1, file_2);
+ if (compare != 0)
+ {
+ return compare;
+ }
+ return compare_by_display_name (file_1, file_2);
}
static int
nautilus_file_compare_for_sort_internal (NautilusFile *file_1,
- NautilusFile *file_2,
- gboolean directories_first,
- gboolean reversed)
+ NautilusFile *file_2,
+ gboolean directories_first,
+ gboolean reversed)
{
- gboolean is_directory_1, is_directory_2;
+ gboolean is_directory_1, is_directory_2;
- if (directories_first) {
- is_directory_1 = nautilus_file_is_directory (file_1);
- is_directory_2 = nautilus_file_is_directory (file_2);
+ if (directories_first)
+ {
+ is_directory_1 = nautilus_file_is_directory (file_1);
+ is_directory_2 = nautilus_file_is_directory (file_2);
- if (is_directory_1 && !is_directory_2) {
- return -1;
- }
+ if (is_directory_1 && !is_directory_2)
+ {
+ return -1;
+ }
- if (is_directory_2 && !is_directory_1) {
- return +1;
- }
- }
+ if (is_directory_2 && !is_directory_1)
+ {
+ return +1;
+ }
+ }
- if (file_1->details->sort_order < file_2->details->sort_order) {
- return reversed ? 1 : -1;
- } else if (file_1->details->sort_order > file_2->details->sort_order) {
- return reversed ? -1 : 1;
- }
+ if (file_1->details->sort_order < file_2->details->sort_order)
+ {
+ return reversed ? 1 : -1;
+ }
+ else if (file_1->details->sort_order > file_2->details->sort_order)
+ {
+ return reversed ? -1 : 1;
+ }
- return 0;
+ return 0;
}
/**
@@ -3351,7 +3754,7 @@ nautilus_file_compare_for_sort_internal (NautilusFile *file_1,
* @directories_first: Put all directories before any non-directories
* @reversed: Reverse the order of the items, except that
* the directories_first flag is still respected.
- *
+ *
* Return value: int < 0 if @file_1 should come before file_2 in a
* sorted list; int > 0 if @file_2 should come before file_1 in a
* sorted list; 0 if @file_1 and @file_2 are equal for this sort criterion. Note
@@ -3359,177 +3762,226 @@ nautilus_file_compare_for_sort_internal (NautilusFile *file_1,
* of the sort criterion being the primary but not only differentiator.
**/
int
-nautilus_file_compare_for_sort (NautilusFile *file_1,
- NautilusFile *file_2,
- NautilusFileSortType sort_type,
- gboolean directories_first,
- gboolean reversed)
-{
- int result;
-
- if (file_1 == file_2) {
- return 0;
- }
-
- result = nautilus_file_compare_for_sort_internal (file_1, file_2, directories_first, reversed);
-
- if (result == 0) {
- switch (sort_type) {
- case NAUTILUS_FILE_SORT_BY_DISPLAY_NAME:
- result = compare_by_display_name (file_1, file_2);
- if (result == 0) {
- result = compare_by_directory_name (file_1, file_2);
- }
- break;
- case NAUTILUS_FILE_SORT_BY_SIZE:
- /* Compare directory sizes ourselves, then if necessary
- * use GnomeVFS to compare file sizes.
- */
- result = compare_by_size (file_1, file_2);
- if (result == 0) {
- result = compare_by_full_path (file_1, file_2);
- }
- break;
- case NAUTILUS_FILE_SORT_BY_TYPE:
- /* GnomeVFS doesn't know about our special text for certain
- * mime types, so we handle the mime-type sorting ourselves.
- */
- result = compare_by_type (file_1, file_2);
- if (result == 0) {
- result = compare_by_full_path (file_1, file_2);
- }
- break;
- case NAUTILUS_FILE_SORT_BY_MTIME:
- result = compare_by_time (file_1, file_2, NAUTILUS_DATE_TYPE_MODIFIED);
- if (result == 0) {
- result = compare_by_full_path (file_1, file_2);
- }
- break;
- case NAUTILUS_FILE_SORT_BY_ATIME:
- result = compare_by_time (file_1, file_2, NAUTILUS_DATE_TYPE_ACCESSED);
- if (result == 0) {
- result = compare_by_full_path (file_1, file_2);
- }
- break;
- case NAUTILUS_FILE_SORT_BY_TRASHED_TIME:
- result = compare_by_time (file_1, file_2, NAUTILUS_DATE_TYPE_TRASHED);
- if (result == 0) {
- result = compare_by_full_path (file_1, file_2);
- }
- break;
- case NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE:
- result = compare_by_search_relevance (file_1, file_2);
- if (result == 0) {
- result = compare_by_full_path (file_1, file_2);
-
- /* ensure alphabetical order for files of the same relevance */
- reversed = FALSE;
- }
- break;
- default:
- g_return_val_if_reached (0);
- }
-
- if (reversed) {
- result = -result;
- }
- }
-
- return result;
+nautilus_file_compare_for_sort (NautilusFile *file_1,
+ NautilusFile *file_2,
+ NautilusFileSortType sort_type,
+ gboolean directories_first,
+ gboolean reversed)
+{
+ int result;
+
+ if (file_1 == file_2)
+ {
+ return 0;
+ }
+
+ result = nautilus_file_compare_for_sort_internal (file_1, file_2, directories_first, reversed);
+
+ if (result == 0)
+ {
+ switch (sort_type)
+ {
+ case NAUTILUS_FILE_SORT_BY_DISPLAY_NAME:
+ {
+ result = compare_by_display_name (file_1, file_2);
+ if (result == 0)
+ {
+ result = compare_by_directory_name (file_1, file_2);
+ }
+ }
+ break;
+
+ case NAUTILUS_FILE_SORT_BY_SIZE:
+ {
+ /* Compare directory sizes ourselves, then if necessary
+ * use GnomeVFS to compare file sizes.
+ */
+ result = compare_by_size (file_1, file_2);
+ if (result == 0)
+ {
+ result = compare_by_full_path (file_1, file_2);
+ }
+ }
+ break;
+
+ case NAUTILUS_FILE_SORT_BY_TYPE:
+ {
+ /* GnomeVFS doesn't know about our special text for certain
+ * mime types, so we handle the mime-type sorting ourselves.
+ */
+ result = compare_by_type (file_1, file_2);
+ if (result == 0)
+ {
+ result = compare_by_full_path (file_1, file_2);
+ }
+ }
+ break;
+
+ case NAUTILUS_FILE_SORT_BY_MTIME:
+ {
+ result = compare_by_time (file_1, file_2, NAUTILUS_DATE_TYPE_MODIFIED);
+ if (result == 0)
+ {
+ result = compare_by_full_path (file_1, file_2);
+ }
+ }
+ break;
+
+ case NAUTILUS_FILE_SORT_BY_ATIME:
+ {
+ result = compare_by_time (file_1, file_2, NAUTILUS_DATE_TYPE_ACCESSED);
+ if (result == 0)
+ {
+ result = compare_by_full_path (file_1, file_2);
+ }
+ }
+ break;
+
+ case NAUTILUS_FILE_SORT_BY_TRASHED_TIME:
+ {
+ result = compare_by_time (file_1, file_2, NAUTILUS_DATE_TYPE_TRASHED);
+ if (result == 0)
+ {
+ result = compare_by_full_path (file_1, file_2);
+ }
+ }
+ break;
+
+ case NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE:
+ {
+ result = compare_by_search_relevance (file_1, file_2);
+ if (result == 0)
+ {
+ result = compare_by_full_path (file_1, file_2);
+
+ /* ensure alphabetical order for files of the same relevance */
+ reversed = FALSE;
+ }
+ }
+ break;
+
+ default:
+ g_return_val_if_reached (0);
+ }
+
+ if (reversed)
+ {
+ result = -result;
+ }
+ }
+
+ return result;
}
int
-nautilus_file_compare_for_sort_by_attribute_q (NautilusFile *file_1,
- NautilusFile *file_2,
- GQuark attribute,
- gboolean directories_first,
- gboolean reversed)
-{
- int result;
-
- if (file_1 == file_2) {
- return 0;
- }
-
- /* Convert certain attributes into NautilusFileSortTypes and use
- * nautilus_file_compare_for_sort()
- */
- if (attribute == 0 || attribute == attribute_name_q) {
- return nautilus_file_compare_for_sort (file_1, file_2,
- NAUTILUS_FILE_SORT_BY_DISPLAY_NAME,
- directories_first,
- reversed);
- } else if (attribute == attribute_size_q) {
- return nautilus_file_compare_for_sort (file_1, file_2,
- NAUTILUS_FILE_SORT_BY_SIZE,
- directories_first,
- reversed);
- } else if (attribute == attribute_type_q) {
- return nautilus_file_compare_for_sort (file_1, file_2,
- NAUTILUS_FILE_SORT_BY_TYPE,
- directories_first,
- reversed);
- } else if (attribute == attribute_modification_date_q || attribute == attribute_date_modified_q || attribute == attribute_date_modified_with_time_q || attribute == attribute_date_modified_full_q) {
- return nautilus_file_compare_for_sort (file_1, file_2,
- NAUTILUS_FILE_SORT_BY_MTIME,
- directories_first,
- reversed);
- } else if (attribute == attribute_accessed_date_q || attribute == attribute_date_accessed_q || attribute == attribute_date_accessed_full_q) {
- return nautilus_file_compare_for_sort (file_1, file_2,
- NAUTILUS_FILE_SORT_BY_ATIME,
- directories_first,
- reversed);
- } else if (attribute == attribute_trashed_on_q || attribute == attribute_trashed_on_full_q) {
- return nautilus_file_compare_for_sort (file_1, file_2,
- NAUTILUS_FILE_SORT_BY_TRASHED_TIME,
- directories_first,
- reversed);
- } else if (attribute == attribute_search_relevance_q) {
- return nautilus_file_compare_for_sort (file_1, file_2,
- NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE,
- directories_first,
- reversed);
- }
-
- /* it is a normal attribute, compare by strings */
-
- result = nautilus_file_compare_for_sort_internal (file_1, file_2, directories_first, reversed);
-
- if (result == 0) {
- char *value_1;
- char *value_2;
-
- value_1 = nautilus_file_get_string_attribute_q (file_1,
- attribute);
- value_2 = nautilus_file_get_string_attribute_q (file_2,
- attribute);
-
- if (value_1 != NULL && value_2 != NULL) {
- result = strcmp (value_1, value_2);
- }
-
- g_free (value_1);
- g_free (value_2);
-
- if (reversed) {
- result = -result;
- }
- }
-
- return result;
+nautilus_file_compare_for_sort_by_attribute_q (NautilusFile *file_1,
+ NautilusFile *file_2,
+ GQuark attribute,
+ gboolean directories_first,
+ gboolean reversed)
+{
+ int result;
+
+ if (file_1 == file_2)
+ {
+ return 0;
+ }
+
+ /* Convert certain attributes into NautilusFileSortTypes and use
+ * nautilus_file_compare_for_sort()
+ */
+ if (attribute == 0 || attribute == attribute_name_q)
+ {
+ return nautilus_file_compare_for_sort (file_1, file_2,
+ NAUTILUS_FILE_SORT_BY_DISPLAY_NAME,
+ directories_first,
+ reversed);
+ }
+ else if (attribute == attribute_size_q)
+ {
+ return nautilus_file_compare_for_sort (file_1, file_2,
+ NAUTILUS_FILE_SORT_BY_SIZE,
+ directories_first,
+ reversed);
+ }
+ else if (attribute == attribute_type_q)
+ {
+ return nautilus_file_compare_for_sort (file_1, file_2,
+ NAUTILUS_FILE_SORT_BY_TYPE,
+ directories_first,
+ reversed);
+ }
+ else if (attribute == attribute_modification_date_q || attribute == attribute_date_modified_q || attribute == attribute_date_modified_with_time_q || attribute == attribute_date_modified_full_q)
+ {
+ return nautilus_file_compare_for_sort (file_1, file_2,
+ NAUTILUS_FILE_SORT_BY_MTIME,
+ directories_first,
+ reversed);
+ }
+ else if (attribute == attribute_accessed_date_q || attribute == attribute_date_accessed_q || attribute == attribute_date_accessed_full_q)
+ {
+ return nautilus_file_compare_for_sort (file_1, file_2,
+ NAUTILUS_FILE_SORT_BY_ATIME,
+ directories_first,
+ reversed);
+ }
+ else if (attribute == attribute_trashed_on_q || attribute == attribute_trashed_on_full_q)
+ {
+ return nautilus_file_compare_for_sort (file_1, file_2,
+ NAUTILUS_FILE_SORT_BY_TRASHED_TIME,
+ directories_first,
+ reversed);
+ }
+ else if (attribute == attribute_search_relevance_q)
+ {
+ return nautilus_file_compare_for_sort (file_1, file_2,
+ NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE,
+ directories_first,
+ reversed);
+ }
+
+ /* it is a normal attribute, compare by strings */
+
+ result = nautilus_file_compare_for_sort_internal (file_1, file_2, directories_first, reversed);
+
+ if (result == 0)
+ {
+ char *value_1;
+ char *value_2;
+
+ value_1 = nautilus_file_get_string_attribute_q (file_1,
+ attribute);
+ value_2 = nautilus_file_get_string_attribute_q (file_2,
+ attribute);
+
+ if (value_1 != NULL && value_2 != NULL)
+ {
+ result = strcmp (value_1, value_2);
+ }
+
+ g_free (value_1);
+ g_free (value_2);
+
+ if (reversed)
+ {
+ result = -result;
+ }
+ }
+
+ return result;
}
int
-nautilus_file_compare_for_sort_by_attribute (NautilusFile *file_1,
- NautilusFile *file_2,
- const char *attribute,
- gboolean directories_first,
- gboolean reversed)
+nautilus_file_compare_for_sort_by_attribute (NautilusFile *file_1,
+ NautilusFile *file_2,
+ const char *attribute,
+ gboolean directories_first,
+ gboolean reversed)
{
- return nautilus_file_compare_for_sort_by_attribute_q (file_1, file_2,
- g_quark_from_string (attribute),
- directories_first,
- reversed);
+ return nautilus_file_compare_for_sort_by_attribute_q (file_1, file_2,
+ g_quark_from_string (attribute),
+ directories_first,
+ reversed);
}
@@ -3537,28 +3989,28 @@ nautilus_file_compare_for_sort_by_attribute (NautilusFile
* nautilus_file_compare_name:
* @file: A file object
* @string: A string we are comparing it with
- *
+ *
* Return value: result of a comparison of the file name and the given string.
**/
int
nautilus_file_compare_display_name (NautilusFile *file,
- const char *string)
+ const char *string)
{
- const char *name;
- int result;
+ const char *name;
+ int result;
- g_return_val_if_fail (string != NULL, -1);
+ g_return_val_if_fail (string != NULL, -1);
- name = nautilus_file_peek_display_name (file);
- result = g_strcmp0 (name, string);
- return result;
+ name = nautilus_file_peek_display_name (file);
+ result = g_strcmp0 (name, string);
+ return result;
}
gboolean
nautilus_file_is_hidden_file (NautilusFile *file)
{
- return file->details->is_hidden;
+ return file->details->is_hidden;
}
/**
@@ -3566,91 +4018,95 @@ nautilus_file_is_hidden_file (NautilusFile *file)
* @file: the file to check
* @show_hidden: whether we want to show hidden files or not
* @show_foreign: whether we want to show foreign files or not
- *
+ *
* Determines if a #NautilusFile should be shown. Note that when browsing
- * a trash directory, this function will always return %TRUE.
+ * a trash directory, this function will always return %TRUE.
*
* Returns: %TRUE if the file should be shown, %FALSE if it shouldn't.
*/
-gboolean
-nautilus_file_should_show (NautilusFile *file,
- gboolean show_hidden,
- gboolean show_foreign)
-{
- /* Never hide any files in trash. */
- if (nautilus_file_is_in_trash (file)) {
- return TRUE;
- }
-
- if (!show_hidden && nautilus_file_is_hidden_file (file)) {
- return FALSE;
- }
+gboolean
+nautilus_file_should_show (NautilusFile *file,
+ gboolean show_hidden,
+ gboolean show_foreign)
+{
+ /* Never hide any files in trash. */
+ if (nautilus_file_is_in_trash (file))
+ {
+ return TRUE;
+ }
+
+ if (!show_hidden && nautilus_file_is_hidden_file (file))
+ {
+ return FALSE;
+ }
- if (!show_foreign && nautilus_file_is_foreign_link (file)) {
- return FALSE;
- }
+ if (!show_foreign && nautilus_file_is_foreign_link (file))
+ {
+ return FALSE;
+ }
- return TRUE;
+ return TRUE;
}
gboolean
nautilus_file_is_home (NautilusFile *file)
{
- GFile *dir;
+ GFile *dir;
- dir = file->details->directory->details->location;
- if (dir == NULL) {
- return FALSE;
- }
+ dir = file->details->directory->details->location;
+ if (dir == NULL)
+ {
+ return FALSE;
+ }
- return nautilus_is_home_directory_file (dir,
- eel_ref_str_peek (file->details->name));
+ return nautilus_is_home_directory_file (dir,
+ eel_ref_str_peek (file->details->name));
}
gboolean
nautilus_file_is_in_search (NautilusFile *file)
{
- char *uri;
- gboolean ret;
+ char *uri;
+ gboolean ret;
- uri = nautilus_file_get_uri (file);
- ret = eel_uri_is_search (uri);
- g_free (uri);
+ uri = nautilus_file_get_uri (file);
+ ret = eel_uri_is_search (uri);
+ g_free (uri);
- return ret;
+ return ret;
}
static gboolean
filter_hidden_partition_callback (NautilusFile *file,
gpointer callback_data)
{
- FilterOptions options;
+ FilterOptions options;
- options = GPOINTER_TO_INT (callback_data);
+ options = GPOINTER_TO_INT (callback_data);
- return nautilus_file_should_show (file,
- options & SHOW_HIDDEN,
- TRUE);
+ return nautilus_file_should_show (file,
+ options & SHOW_HIDDEN,
+ TRUE);
}
GList *
nautilus_file_list_filter_hidden (GList *files,
- gboolean show_hidden)
+ gboolean show_hidden)
{
- GList *filtered_files;
- GList *removed_files;
+ GList *filtered_files;
+ GList *removed_files;
- /* FIXME bugzilla.gnome.org 40653:
- * Eventually this should become a generic filtering thingy.
- */
+ /* FIXME bugzilla.gnome.org 40653:
+ * Eventually this should become a generic filtering thingy.
+ */
- filtered_files = nautilus_file_list_filter (files,
- &removed_files,
- filter_hidden_partition_callback,
- GINT_TO_POINTER ((show_hidden ? SHOW_HIDDEN : 0)));
- nautilus_file_list_free (removed_files);
+ filtered_files = nautilus_file_list_filter (files,
+ &removed_files,
+ filter_hidden_partition_callback,
+ GINT_TO_POINTER ((show_hidden ? SHOW_HIDDEN : 0)));
+ nautilus_file_list_free (removed_files);
- return filtered_files;
+ return filtered_files;
}
/* This functions filters a file list when its items match a certain condition
@@ -3662,430 +4118,467 @@ nautilus_file_list_filter (GList *files,
NautilusFileFilterFunc filter_function,
gpointer user_data)
{
- GList *filtered = NULL;
- GList *l;
- GList *last;
- GList *reversed;
-
- *failed = NULL;
- /* Avoid using g_list_append since it's O(n) */
- reversed = g_list_copy (files);
- reversed = g_list_reverse (reversed);
- last = g_list_last (reversed);
- for (l = last; l != NULL; l = l->prev) {
- if (filter_function (l->data, user_data)) {
- filtered = g_list_prepend (filtered, nautilus_file_ref (l->data));
- } else {
- *failed = g_list_prepend (*failed, nautilus_file_ref (l->data));
- }
+ GList *filtered = NULL;
+ GList *l;
+ GList *last;
+ GList *reversed;
+
+ *failed = NULL;
+ /* Avoid using g_list_append since it's O(n) */
+ reversed = g_list_copy (files);
+ reversed = g_list_reverse (reversed);
+ last = g_list_last (reversed);
+ for (l = last; l != NULL; l = l->prev)
+ {
+ if (filter_function (l->data, user_data))
+ {
+ filtered = g_list_prepend (filtered, nautilus_file_ref (l->data));
+ }
+ else
+ {
+ *failed = g_list_prepend (*failed, nautilus_file_ref (l->data));
}
+ }
- g_list_free (reversed);
+ g_list_free (reversed);
- return filtered;
+ return filtered;
}
char *
nautilus_file_get_metadata (NautilusFile *file,
- const char *key,
- const char *default_metadata)
+ const char *key,
+ const char *default_metadata)
{
- guint id;
- char *value;
+ guint id;
+ char *value;
- g_return_val_if_fail (key != NULL, g_strdup (default_metadata));
- g_return_val_if_fail (key[0] != '\0', g_strdup (default_metadata));
+ g_return_val_if_fail (key != NULL, g_strdup (default_metadata));
+ g_return_val_if_fail (key[0] != '\0', g_strdup (default_metadata));
- if (file == NULL ||
- file->details->metadata == NULL) {
- return g_strdup (default_metadata);
- }
+ if (file == NULL ||
+ file->details->metadata == NULL)
+ {
+ return g_strdup (default_metadata);
+ }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), g_strdup (default_metadata));
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), g_strdup (default_metadata));
- id = nautilus_metadata_get_id (key);
- value = g_hash_table_lookup (file->details->metadata, GUINT_TO_POINTER (id));
+ id = nautilus_metadata_get_id (key);
+ value = g_hash_table_lookup (file->details->metadata, GUINT_TO_POINTER (id));
- if (value) {
- return g_strdup (value);
- }
- return g_strdup (default_metadata);
+ if (value)
+ {
+ return g_strdup (value);
+ }
+ return g_strdup (default_metadata);
}
GList *
nautilus_file_get_metadata_list (NautilusFile *file,
- const char *key)
+ const char *key)
{
- GList *res;
- guint id;
- char **value;
- int i;
+ GList *res;
+ guint id;
+ char **value;
+ int i;
- g_return_val_if_fail (key != NULL, NULL);
- g_return_val_if_fail (key[0] != '\0', NULL);
+ g_return_val_if_fail (key != NULL, NULL);
+ g_return_val_if_fail (key[0] != '\0', NULL);
- if (file == NULL ||
- file->details->metadata == NULL) {
- return NULL;
- }
+ if (file == NULL ||
+ file->details->metadata == NULL)
+ {
+ return NULL;
+ }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- id = nautilus_metadata_get_id (key);
- id |= METADATA_ID_IS_LIST_MASK;
+ id = nautilus_metadata_get_id (key);
+ id |= METADATA_ID_IS_LIST_MASK;
- value = g_hash_table_lookup (file->details->metadata, GUINT_TO_POINTER (id));
+ value = g_hash_table_lookup (file->details->metadata, GUINT_TO_POINTER (id));
- if (value) {
- res = NULL;
- for (i = 0; value[i] != NULL; i++) {
- res = g_list_prepend (res, g_strdup (value[i]));
- }
- return g_list_reverse (res);
- }
+ if (value)
+ {
+ res = NULL;
+ for (i = 0; value[i] != NULL; i++)
+ {
+ res = g_list_prepend (res, g_strdup (value[i]));
+ }
+ return g_list_reverse (res);
+ }
- return NULL;
+ return NULL;
}
void
nautilus_file_set_metadata (NautilusFile *file,
- const char *key,
- const char *default_metadata,
- const char *metadata)
+ const char *key,
+ const char *default_metadata,
+ const char *metadata)
{
- const char *val;
+ const char *val;
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (key != NULL);
- g_return_if_fail (key[0] != '\0');
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (key != NULL);
+ g_return_if_fail (key[0] != '\0');
- val = metadata;
- if (val == NULL) {
- val = default_metadata;
- }
+ val = metadata;
+ if (val == NULL)
+ {
+ val = default_metadata;
+ }
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->set_metadata (file, key, val);
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->set_metadata (file, key, val);
}
void
nautilus_file_set_metadata_list (NautilusFile *file,
- const char *key,
- GList *list)
+ const char *key,
+ GList *list)
{
- char **val;
- int len, i;
- GList *l;
+ char **val;
+ int len, i;
+ GList *l;
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (key != NULL);
- g_return_if_fail (key[0] != '\0');
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (key != NULL);
+ g_return_if_fail (key[0] != '\0');
- len = g_list_length (list);
- val = g_new (char *, len + 1);
- for (l = list, i = 0; l != NULL; l = l->next, i++) {
- val[i] = l->data;
- }
- val[i] = NULL;
+ len = g_list_length (list);
+ val = g_new (char *, len + 1);
+ for (l = list, i = 0; l != NULL; l = l->next, i++)
+ {
+ val[i] = l->data;
+ }
+ val[i] = NULL;
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->set_metadata_as_list (file, key, val);
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->set_metadata_as_list (file, key, val);
- g_free (val);
+ g_free (val);
}
gboolean
nautilus_file_get_boolean_metadata (NautilusFile *file,
- const char *key,
- gboolean default_metadata)
+ const char *key,
+ gboolean default_metadata)
{
- char *result_as_string;
- gboolean result;
+ char *result_as_string;
+ gboolean result;
- g_return_val_if_fail (key != NULL, default_metadata);
- g_return_val_if_fail (key[0] != '\0', default_metadata);
+ g_return_val_if_fail (key != NULL, default_metadata);
+ g_return_val_if_fail (key[0] != '\0', default_metadata);
- if (file == NULL) {
- return default_metadata;
- }
+ if (file == NULL)
+ {
+ return default_metadata;
+ }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), default_metadata);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), default_metadata);
- result_as_string = nautilus_file_get_metadata
- (file, key, default_metadata ? "true" : "false");
- g_assert (result_as_string != NULL);
+ result_as_string = nautilus_file_get_metadata
+ (file, key, default_metadata ? "true" : "false");
+ g_assert (result_as_string != NULL);
- if (g_ascii_strcasecmp (result_as_string, "true") == 0) {
- result = TRUE;
- } else if (g_ascii_strcasecmp (result_as_string, "false") == 0) {
- result = FALSE;
- } else {
- g_error ("boolean metadata with value other than true or false");
- result = default_metadata;
- }
+ if (g_ascii_strcasecmp (result_as_string, "true") == 0)
+ {
+ result = TRUE;
+ }
+ else if (g_ascii_strcasecmp (result_as_string, "false") == 0)
+ {
+ result = FALSE;
+ }
+ else
+ {
+ g_error ("boolean metadata with value other than true or false");
+ result = default_metadata;
+ }
- g_free (result_as_string);
- return result;
+ g_free (result_as_string);
+ return result;
}
int
nautilus_file_get_integer_metadata (NautilusFile *file,
- const char *key,
- int default_metadata)
-{
- char *result_as_string;
- char default_as_string[32];
- int result;
- char c;
-
- g_return_val_if_fail (key != NULL, default_metadata);
- g_return_val_if_fail (key[0] != '\0', default_metadata);
-
- if (file == NULL) {
- return default_metadata;
- }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), default_metadata);
-
- g_snprintf (default_as_string, sizeof (default_as_string), "%d", default_metadata);
- result_as_string = nautilus_file_get_metadata
- (file, key, default_as_string);
-
- /* Normally we can't get a a NULL, but we check for it here to
- * handle the oddball case of a non-existent directory.
- */
- if (result_as_string == NULL) {
- result = default_metadata;
- } else {
- if (sscanf (result_as_string, " %d %c", &result, &c) != 1) {
- result = default_metadata;
- }
- g_free (result_as_string);
- }
+ const char *key,
+ int default_metadata)
+{
+ char *result_as_string;
+ char default_as_string[32];
+ int result;
+ char c;
+
+ g_return_val_if_fail (key != NULL, default_metadata);
+ g_return_val_if_fail (key[0] != '\0', default_metadata);
+
+ if (file == NULL)
+ {
+ return default_metadata;
+ }
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), default_metadata);
+
+ g_snprintf (default_as_string, sizeof (default_as_string), "%d", default_metadata);
+ result_as_string = nautilus_file_get_metadata
+ (file, key, default_as_string);
+
+ /* Normally we can't get a a NULL, but we check for it here to
+ * handle the oddball case of a non-existent directory.
+ */
+ if (result_as_string == NULL)
+ {
+ result = default_metadata;
+ }
+ else
+ {
+ if (sscanf (result_as_string, " %d %c", &result, &c) != 1)
+ {
+ result = default_metadata;
+ }
+ g_free (result_as_string);
+ }
- return result;
+ return result;
}
static gboolean
get_time_from_time_string (const char *time_string,
- time_t *time)
+ time_t *time)
{
- long scanned_time;
- char c;
+ long scanned_time;
+ char c;
- g_assert (time != NULL);
+ g_assert (time != NULL);
- /* Only accept string if it has one integer with nothing
- * afterwards.
- */
- if (time_string == NULL ||
- sscanf (time_string, "%ld%c", &scanned_time, &c) != 1) {
- return FALSE;
- }
- *time = (time_t) scanned_time;
- return TRUE;
+ /* Only accept string if it has one integer with nothing
+ * afterwards.
+ */
+ if (time_string == NULL ||
+ sscanf (time_string, "%ld%c", &scanned_time, &c) != 1)
+ {
+ return FALSE;
+ }
+ *time = (time_t) scanned_time;
+ return TRUE;
}
time_t
nautilus_file_get_time_metadata (NautilusFile *file,
- const char *key)
+ const char *key)
{
- time_t time;
- char *time_string;
+ time_t time;
+ char *time_string;
- time_string = nautilus_file_get_metadata (file, key, NULL);
- if (!get_time_from_time_string (time_string, &time)) {
- time = UNDEFINED_TIME;
- }
- g_free (time_string);
+ time_string = nautilus_file_get_metadata (file, key, NULL);
+ if (!get_time_from_time_string (time_string, &time))
+ {
+ time = UNDEFINED_TIME;
+ }
+ g_free (time_string);
- return time;
+ return time;
}
void
nautilus_file_set_time_metadata (NautilusFile *file,
- const char *key,
- time_t time)
+ const char *key,
+ time_t time)
{
- char time_str[21];
- char *metadata;
+ char time_str[21];
+ char *metadata;
- if (time != UNDEFINED_TIME) {
- /* 2^64 turns out to be 20 characters */
- g_snprintf (time_str, 20, "%ld", (long int)time);
- time_str[20] = '\0';
- metadata = time_str;
- } else {
- metadata = NULL;
- }
+ if (time != UNDEFINED_TIME)
+ {
+ /* 2^64 turns out to be 20 characters */
+ g_snprintf (time_str, 20, "%ld", (long int) time);
+ time_str[20] = '\0';
+ metadata = time_str;
+ }
+ else
+ {
+ metadata = NULL;
+ }
- nautilus_file_set_metadata (file, key, NULL, metadata);
+ nautilus_file_set_metadata (file, key, NULL, metadata);
}
void
nautilus_file_set_boolean_metadata (NautilusFile *file,
- const char *key,
- gboolean default_metadata,
- gboolean metadata)
+ const char *key,
+ gboolean default_metadata,
+ gboolean metadata)
{
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (key != NULL);
- g_return_if_fail (key[0] != '\0');
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (key != NULL);
+ g_return_if_fail (key[0] != '\0');
- nautilus_file_set_metadata (file, key,
- default_metadata ? "true" : "false",
- metadata ? "true" : "false");
+ nautilus_file_set_metadata (file, key,
+ default_metadata ? "true" : "false",
+ metadata ? "true" : "false");
}
void
nautilus_file_set_integer_metadata (NautilusFile *file,
- const char *key,
- int default_metadata,
- int metadata)
+ const char *key,
+ int default_metadata,
+ int metadata)
{
- char value_as_string[32];
- char default_as_string[32];
+ char value_as_string[32];
+ char default_as_string[32];
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (key != NULL);
- g_return_if_fail (key[0] != '\0');
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (key != NULL);
+ g_return_if_fail (key[0] != '\0');
- g_snprintf (value_as_string, sizeof (value_as_string), "%d", metadata);
- g_snprintf (default_as_string, sizeof (default_as_string), "%d", default_metadata);
+ g_snprintf (value_as_string, sizeof (value_as_string), "%d", metadata);
+ g_snprintf (default_as_string, sizeof (default_as_string), "%d", default_metadata);
- nautilus_file_set_metadata (file, key,
- default_as_string, value_as_string);
+ nautilus_file_set_metadata (file, key,
+ default_as_string, value_as_string);
}
static const char *
nautilus_file_peek_display_name_collation_key (NautilusFile *file)
{
- const char *res;
+ const char *res;
- res = file->details->display_name_collation_key;
- if (res == NULL)
- res = "";
+ res = file->details->display_name_collation_key;
+ if (res == NULL)
+ {
+ res = "";
+ }
- return res;
+ return res;
}
static const char *
nautilus_file_peek_display_name (NautilusFile *file)
{
- const char *name;
- char *escaped_name;
-
- /* FIXME: for some reason we can get a NautilusFile instance which is
- * no longer valid or could be freed somewhere else in the same time.
- * There's race condition somewhere. See bug 602500.
- */
- if (file == NULL || nautilus_file_is_gone (file))
- return "";
-
- /* Default to display name based on filename if its not set yet */
-
- if (file->details->display_name == NULL) {
- name = eel_ref_str_peek (file->details->name);
- if (g_utf8_validate (name, -1, NULL)) {
- nautilus_file_set_display_name (file,
- name,
- NULL,
- FALSE);
- } else {
- escaped_name = g_uri_escape_string (name, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, TRUE);
- nautilus_file_set_display_name (file,
- escaped_name,
- NULL,
- FALSE);
- g_free (escaped_name);
- }
- }
-
- return file->details->display_name ?
- eel_ref_str_peek (file->details->display_name) : "";
+ const char *name;
+ char *escaped_name;
+
+ /* FIXME: for some reason we can get a NautilusFile instance which is
+ * no longer valid or could be freed somewhere else in the same time.
+ * There's race condition somewhere. See bug 602500.
+ */
+ if (file == NULL || nautilus_file_is_gone (file))
+ {
+ return "";
+ }
+
+ /* Default to display name based on filename if its not set yet */
+
+ if (file->details->display_name == NULL)
+ {
+ name = eel_ref_str_peek (file->details->name);
+ if (g_utf8_validate (name, -1, NULL))
+ {
+ nautilus_file_set_display_name (file,
+ name,
+ NULL,
+ FALSE);
+ }
+ else
+ {
+ escaped_name = g_uri_escape_string (name, G_URI_RESERVED_CHARS_ALLOWED_IN_PATH, TRUE);
+ nautilus_file_set_display_name (file,
+ escaped_name,
+ NULL,
+ FALSE);
+ g_free (escaped_name);
+ }
+ }
+
+ return file->details->display_name ?
+ eel_ref_str_peek (file->details->display_name) : "";
}
char *
nautilus_file_get_display_name (NautilusFile *file)
{
- return g_strdup (nautilus_file_peek_display_name (file));
+ return g_strdup (nautilus_file_peek_display_name (file));
}
char *
nautilus_file_get_edit_name (NautilusFile *file)
{
- const char *res;
-
- res = eel_ref_str_peek (file->details->edit_name);
- if (res == NULL)
- res = "";
-
- return g_strdup (res);
+ const char *res;
+
+ res = eel_ref_str_peek (file->details->edit_name);
+ if (res == NULL)
+ {
+ res = "";
+ }
+
+ return g_strdup (res);
}
char *
nautilus_file_get_name (NautilusFile *file)
{
- return g_strdup (eel_ref_str_peek (file->details->name));
+ return g_strdup (eel_ref_str_peek (file->details->name));
}
/**
* nautilus_file_get_description:
* @file: a #NautilusFile.
- *
- * Gets the standard::description key from @file, if
+ *
+ * Gets the standard::description key from @file, if
* it has been cached.
- *
- * Returns: a string containing the value of the standard::description
- * key, or %NULL.
+ *
+ * Returns: a string containing the value of the standard::description
+ * key, or %NULL.
*/
char *
nautilus_file_get_description (NautilusFile *file)
{
- return g_strdup (file->details->description);
+ return g_strdup (file->details->description);
}
-
-void
-nautilus_file_monitor_add (NautilusFile *file,
- gconstpointer client,
- NautilusFileAttributes attributes)
+
+void
+nautilus_file_monitor_add (NautilusFile *file,
+ gconstpointer client,
+ NautilusFileAttributes attributes)
{
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (client != NULL);
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (client != NULL);
+
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->monitor_add (file, client, attributes);
+}
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->monitor_add (file, client, attributes);
-}
-
void
-nautilus_file_monitor_remove (NautilusFile *file,
- gconstpointer client)
+nautilus_file_monitor_remove (NautilusFile *file,
+ gconstpointer client)
{
- g_return_if_fail (NAUTILUS_IS_FILE (file));
- g_return_if_fail (client != NULL);
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (client != NULL);
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->monitor_remove (file, client);
-}
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->monitor_remove (file, client);
+}
gboolean
nautilus_file_is_launcher (NautilusFile *file)
{
- return file->details->is_launcher;
+ return file->details->is_launcher;
}
gboolean
nautilus_file_is_foreign_link (NautilusFile *file)
{
- return file->details->is_foreign_link;
+ return file->details->is_foreign_link;
}
gboolean
nautilus_file_is_trusted_link (NautilusFile *file)
{
- return file->details->is_trusted_link;
+ return file->details->is_trusted_link;
}
gboolean
nautilus_file_has_activation_uri (NautilusFile *file)
{
- return file->details->activation_uri != NULL;
+ return file->details->activation_uri != NULL;
}
@@ -4096,368 +4589,423 @@ nautilus_file_has_activation_uri (NautilusFile *file)
char *
nautilus_file_get_activation_uri (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+
+ if (file->details->activation_uri != NULL)
+ {
+ return g_strdup (file->details->activation_uri);
+ }
- if (file->details->activation_uri != NULL) {
- return g_strdup (file->details->activation_uri);
- }
-
- return nautilus_file_get_uri (file);
+ return nautilus_file_get_uri (file);
}
GFile *
nautilus_file_get_activation_location (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- if (file->details->activation_uri != NULL) {
- return g_file_new_for_uri (file->details->activation_uri);
- }
-
- return nautilus_file_get_location (file);
+ if (file->details->activation_uri != NULL)
+ {
+ return g_file_new_for_uri (file->details->activation_uri);
+ }
+
+ return nautilus_file_get_location (file);
}
char *
nautilus_file_get_target_uri (NautilusFile *file)
{
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_target_uri (file);
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_target_uri (file);
}
static char *
real_get_target_uri (NautilusFile *file)
{
- char *uri, *target_uri;
- GFile *location;
+ char *uri, *target_uri;
+ GFile *location;
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- uri = nautilus_file_get_uri (file);
+ uri = nautilus_file_get_uri (file);
- /* Check for Nautilus link */
- if (nautilus_file_is_nautilus_link (file)) {
- location = nautilus_file_get_location (file);
- /* FIXME bugzilla.gnome.org 43020: This does sync. I/O and works only locally. */
- if (g_file_is_native (location)) {
- target_uri = nautilus_link_local_get_link_uri (uri);
- if (target_uri != NULL) {
- g_free (uri);
- uri = target_uri;
- }
- }
- g_object_unref (location);
- }
+ /* Check for Nautilus link */
+ if (nautilus_file_is_nautilus_link (file))
+ {
+ location = nautilus_file_get_location (file);
+ /* FIXME bugzilla.gnome.org 43020: This does sync. I/O and works only locally. */
+ if (g_file_is_native (location))
+ {
+ target_uri = nautilus_link_local_get_link_uri (uri);
+ if (target_uri != NULL)
+ {
+ g_free (uri);
+ uri = target_uri;
+ }
+ }
+ g_object_unref (location);
+ }
- return uri;
+ return uri;
}
static gboolean
is_uri_relative (const char *uri)
{
- char *scheme;
- gboolean ret;
+ char *scheme;
+ gboolean ret;
- scheme = g_uri_parse_scheme (uri);
- ret = (scheme == NULL);
- g_free (scheme);
- return ret;
+ scheme = g_uri_parse_scheme (uri);
+ ret = (scheme == NULL);
+ g_free (scheme);
+ return ret;
}
static char *
get_custom_icon_metadata_uri (NautilusFile *file)
{
- char *custom_icon_uri;
- char *uri;
- char *dir_uri;
-
- uri = nautilus_file_get_metadata (file, NAUTILUS_METADATA_KEY_CUSTOM_ICON, NULL);
- if (uri != NULL &&
- nautilus_file_is_directory (file) &&
- is_uri_relative (uri)) {
- dir_uri = nautilus_file_get_uri (file);
- custom_icon_uri = g_build_filename (dir_uri, uri, NULL);
- g_free (dir_uri);
- g_free (uri);
- } else {
- custom_icon_uri = uri;
- }
- return custom_icon_uri;
+ char *custom_icon_uri;
+ char *uri;
+ char *dir_uri;
+
+ uri = nautilus_file_get_metadata (file, NAUTILUS_METADATA_KEY_CUSTOM_ICON, NULL);
+ if (uri != NULL &&
+ nautilus_file_is_directory (file) &&
+ is_uri_relative (uri))
+ {
+ dir_uri = nautilus_file_get_uri (file);
+ custom_icon_uri = g_build_filename (dir_uri, uri, NULL);
+ g_free (dir_uri);
+ g_free (uri);
+ }
+ else
+ {
+ custom_icon_uri = uri;
+ }
+ return custom_icon_uri;
}
static char *
get_custom_icon_metadata_name (NautilusFile *file)
{
- char *icon_name;
+ char *icon_name;
- icon_name = nautilus_file_get_metadata (file,
- NAUTILUS_METADATA_KEY_CUSTOM_ICON_NAME, NULL);
+ icon_name = nautilus_file_get_metadata (file,
+ NAUTILUS_METADATA_KEY_CUSTOM_ICON_NAME, NULL);
- return icon_name;
+ return icon_name;
}
static GIcon *
get_mount_icon (NautilusFile *file)
{
- GMount *mount;
- GIcon *mount_icon;
+ GMount *mount;
+ GIcon *mount_icon;
- mount = nautilus_file_get_mount (file);
- mount_icon = NULL;
+ mount = nautilus_file_get_mount (file);
+ mount_icon = NULL;
- if (mount != NULL) {
- mount_icon = g_mount_get_icon (mount);
- g_object_unref (mount);
- }
+ if (mount != NULL)
+ {
+ mount_icon = g_mount_get_icon (mount);
+ g_object_unref (mount);
+ }
- return mount_icon;
+ return mount_icon;
}
static GIcon *
get_link_icon (NautilusFile *file)
{
- GIcon *icon = NULL;
+ GIcon *icon = NULL;
- if (file->details->got_link_info && file->details->custom_icon != NULL) {
- icon = g_object_ref (file->details->custom_icon);
- }
+ if (file->details->got_link_info && file->details->custom_icon != NULL)
+ {
+ icon = g_object_ref (file->details->custom_icon);
+ }
- return icon;
+ return icon;
}
static GIcon *
get_custom_icon (NautilusFile *file)
{
- char *custom_icon_uri, *custom_icon_name;
- GFile *icon_file;
- GIcon *icon;
-
- if (file == NULL) {
- return NULL;
- }
-
- icon = NULL;
-
- /* Metadata takes precedence; first we look at the custom
- * icon URI, then at the custom icon name.
- */
- custom_icon_uri = get_custom_icon_metadata_uri (file);
-
- if (custom_icon_uri) {
- icon_file = g_file_new_for_uri (custom_icon_uri);
- icon = g_file_icon_new (icon_file);
- g_object_unref (icon_file);
- g_free (custom_icon_uri);
- }
-
- if (icon == NULL) {
- custom_icon_name = get_custom_icon_metadata_name (file);
-
- if (custom_icon_name != NULL) {
- icon = g_themed_icon_new_with_default_fallbacks (custom_icon_name);
- g_free (custom_icon_name);
- }
- }
+ char *custom_icon_uri, *custom_icon_name;
+ GFile *icon_file;
+ GIcon *icon;
+
+ if (file == NULL)
+ {
+ return NULL;
+ }
+
+ icon = NULL;
+
+ /* Metadata takes precedence; first we look at the custom
+ * icon URI, then at the custom icon name.
+ */
+ custom_icon_uri = get_custom_icon_metadata_uri (file);
+
+ if (custom_icon_uri)
+ {
+ icon_file = g_file_new_for_uri (custom_icon_uri);
+ icon = g_file_icon_new (icon_file);
+ g_object_unref (icon_file);
+ g_free (custom_icon_uri);
+ }
+
+ if (icon == NULL)
+ {
+ custom_icon_name = get_custom_icon_metadata_name (file);
+
+ if (custom_icon_name != NULL)
+ {
+ icon = g_themed_icon_new_with_default_fallbacks (custom_icon_name);
+ g_free (custom_icon_name);
+ }
+ }
- return icon;
+ return icon;
}
static GIcon *
get_custom_or_link_icon (NautilusFile *file)
{
- GIcon *icon;
+ GIcon *icon;
- icon = get_custom_icon (file);
- if (icon != NULL) {
- return icon;
- }
+ icon = get_custom_icon (file);
+ if (icon != NULL)
+ {
+ return icon;
+ }
- icon = get_link_icon (file);
- if (icon != NULL) {
- return icon;
- }
+ icon = get_link_icon (file);
+ if (icon != NULL)
+ {
+ return icon;
+ }
- return NULL;
+ return NULL;
}
static GIcon *
get_default_file_icon (void)
{
- static GIcon *fallback_icon = NULL;
- if (fallback_icon == NULL) {
- fallback_icon = g_themed_icon_new ("text-x-generic");
- }
+ static GIcon *fallback_icon = NULL;
+ if (fallback_icon == NULL)
+ {
+ fallback_icon = g_themed_icon_new ("text-x-generic");
+ }
- return fallback_icon;
+ return fallback_icon;
}
GFilesystemPreviewType
nautilus_file_get_filesystem_use_preview (NautilusFile *file)
{
- GFilesystemPreviewType use_preview;
- NautilusFile *parent;
+ GFilesystemPreviewType use_preview;
+ NautilusFile *parent;
- parent = nautilus_file_get_parent (file);
- if (parent != NULL) {
- use_preview = parent->details->filesystem_use_preview;
- g_object_unref (parent);
- } else {
- use_preview = 0;
- }
+ parent = nautilus_file_get_parent (file);
+ if (parent != NULL)
+ {
+ use_preview = parent->details->filesystem_use_preview;
+ g_object_unref (parent);
+ }
+ else
+ {
+ use_preview = 0;
+ }
- return use_preview;
+ return use_preview;
}
char *
nautilus_file_get_filesystem_type (NautilusFile *file)
{
- NautilusFile *parent;
- char *filesystem_type = NULL;
-
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (nautilus_file_is_directory (file)) {
- filesystem_type = g_strdup (eel_ref_str_peek (file->details->filesystem_type));
- } else {
- parent = nautilus_file_get_parent (file);
- if (parent != NULL) {
- filesystem_type = g_strdup (eel_ref_str_peek (parent->details->filesystem_type));
- nautilus_file_unref (parent);
- }
+ NautilusFile *parent;
+ char *filesystem_type = NULL;
+
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ if (nautilus_file_is_directory (file))
+ {
+ filesystem_type = g_strdup (eel_ref_str_peek (file->details->filesystem_type));
+ }
+ else
+ {
+ parent = nautilus_file_get_parent (file);
+ if (parent != NULL)
+ {
+ filesystem_type = g_strdup (eel_ref_str_peek (parent->details->filesystem_type));
+ nautilus_file_unref (parent);
}
+ }
- return filesystem_type;
+ return filesystem_type;
}
gboolean
nautilus_file_should_show_thumbnail (NautilusFile *file)
{
- const char *mime_type;
- GFilesystemPreviewType use_preview;
-
- use_preview = nautilus_file_get_filesystem_use_preview (file);
-
- mime_type = eel_ref_str_peek (file->details->mime_type);
- if (mime_type == NULL) {
- mime_type = "application/octet-stream";
- }
-
- /* If the thumbnail has already been created, don't care about the size
- * of the original file.
- */
- if (nautilus_thumbnail_is_mimetype_limited_by_size (mime_type) &&
- file->details->thumbnail_path == NULL &&
- nautilus_file_get_size (file) > cached_thumbnail_limit) {
- return FALSE;
- }
-
- if (show_file_thumbs == NAUTILUS_SPEED_TRADEOFF_ALWAYS) {
- if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
- return FALSE;
- } else {
- return TRUE;
- }
- } else if (show_file_thumbs == NAUTILUS_SPEED_TRADEOFF_NEVER) {
- return FALSE;
- } else {
- if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
- /* file system says to never thumbnail anything */
- return FALSE;
- } else if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL) {
- /* file system says we should treat file as if it's local */
- return TRUE;
- } else {
- /* only local files */
- return nautilus_file_is_local (file);
- }
- }
-
- return FALSE;
+ const char *mime_type;
+ GFilesystemPreviewType use_preview;
+
+ use_preview = nautilus_file_get_filesystem_use_preview (file);
+
+ mime_type = eel_ref_str_peek (file->details->mime_type);
+ if (mime_type == NULL)
+ {
+ mime_type = "application/octet-stream";
+ }
+
+ /* If the thumbnail has already been created, don't care about the size
+ * of the original file.
+ */
+ if (nautilus_thumbnail_is_mimetype_limited_by_size (mime_type) &&
+ file->details->thumbnail_path == NULL &&
+ nautilus_file_get_size (file) > cached_thumbnail_limit)
+ {
+ return FALSE;
+ }
+
+ if (show_file_thumbs == NAUTILUS_SPEED_TRADEOFF_ALWAYS)
+ {
+ if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER)
+ {
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+ }
+ else if (show_file_thumbs == NAUTILUS_SPEED_TRADEOFF_NEVER)
+ {
+ return FALSE;
+ }
+ else
+ {
+ if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER)
+ {
+ /* file system says to never thumbnail anything */
+ return FALSE;
+ }
+ else if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL)
+ {
+ /* file system says we should treat file as if it's local */
+ return TRUE;
+ }
+ else
+ {
+ /* only local files */
+ return nautilus_file_is_local (file);
+ }
+ }
+
+ return FALSE;
}
static gboolean
nautilus_is_video_file (NautilusFile *file)
{
- const char *mime_type;
- guint i;
+ const char *mime_type;
+ guint i;
- mime_type = eel_ref_str_peek (file->details->mime_type);
- if (mime_type == NULL)
- return FALSE;
+ mime_type = eel_ref_str_peek (file->details->mime_type);
+ if (mime_type == NULL)
+ {
+ return FALSE;
+ }
- for (i = 0; video_mime_types[i] != NULL; i++) {
- if (g_content_type_equals (video_mime_types[i], mime_type))
- return TRUE;
- }
+ for (i = 0; video_mime_types[i] != NULL; i++)
+ {
+ if (g_content_type_equals (video_mime_types[i], mime_type))
+ {
+ return TRUE;
+ }
+ }
- return FALSE;
+ return FALSE;
}
static GList *
sort_keyword_list_and_remove_duplicates (GList *keywords)
{
- GList *p;
- GList *duplicate_link;
-
- if (keywords != NULL) {
- keywords = g_list_sort (keywords, (GCompareFunc) g_utf8_collate);
-
- p = keywords;
- while (p->next != NULL) {
- if (strcmp ((const char *) p->data, (const char *) p->next->data) == 0) {
- duplicate_link = p->next;
- keywords = g_list_remove_link (keywords, duplicate_link);
- g_list_free_full (duplicate_link, g_free);
- } else {
- p = p->next;
- }
- }
- }
+ GList *p;
+ GList *duplicate_link;
+
+ if (keywords != NULL)
+ {
+ keywords = g_list_sort (keywords, (GCompareFunc) g_utf8_collate);
+
+ p = keywords;
+ while (p->next != NULL)
+ {
+ if (strcmp ((const char *) p->data, (const char *) p->next->data) == 0)
+ {
+ duplicate_link = p->next;
+ keywords = g_list_remove_link (keywords, duplicate_link);
+ g_list_free_full (duplicate_link, g_free);
+ }
+ else
+ {
+ p = p->next;
+ }
+ }
+ }
- return keywords;
+ return keywords;
}
static void
-clean_up_metadata_keywords (NautilusFile *file,
- GList **metadata_keywords)
-{
- NautilusFile *parent_file;
- GList *l, *res = NULL;
- char *exclude[4];
- char *keyword;
- gboolean found;
- gint i;
-
- i = 0;
- exclude[i++] = NAUTILUS_FILE_EMBLEM_NAME_TRASH;
- exclude[i++] = NAUTILUS_FILE_EMBLEM_NAME_NOTE;
-
- parent_file = nautilus_file_get_parent (file);
- if (parent_file) {
- if (!nautilus_file_can_write (parent_file)) {
- exclude[i++] = NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE;
- }
- nautilus_file_unref (parent_file);
- }
- exclude[i++] = NULL;
-
- for (l = *metadata_keywords; l != NULL; l = l->next) {
- keyword = l->data;
- found = FALSE;
-
- for (i = 0; exclude[i] != NULL; i++) {
- if (strcmp (exclude[i], keyword) == 0) {
- found = TRUE;
- break;
- }
- }
-
- if (!found) {
- res = g_list_prepend (res, keyword);
- }
- }
-
- g_list_free (*metadata_keywords);
- *metadata_keywords = res;
+clean_up_metadata_keywords (NautilusFile *file,
+ GList **metadata_keywords)
+{
+ NautilusFile *parent_file;
+ GList *l, *res = NULL;
+ char *exclude[4];
+ char *keyword;
+ gboolean found;
+ gint i;
+
+ i = 0;
+ exclude[i++] = NAUTILUS_FILE_EMBLEM_NAME_TRASH;
+ exclude[i++] = NAUTILUS_FILE_EMBLEM_NAME_NOTE;
+
+ parent_file = nautilus_file_get_parent (file);
+ if (parent_file)
+ {
+ if (!nautilus_file_can_write (parent_file))
+ {
+ exclude[i++] = NAUTILUS_FILE_EMBLEM_NAME_CANT_WRITE;
+ }
+ nautilus_file_unref (parent_file);
+ }
+ exclude[i++] = NULL;
+
+ for (l = *metadata_keywords; l != NULL; l = l->next)
+ {
+ keyword = l->data;
+ found = FALSE;
+
+ for (i = 0; exclude[i] != NULL; i++)
+ {
+ if (strcmp (exclude[i], keyword) == 0)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+
+ if (!found)
+ {
+ res = g_list_prepend (res, keyword);
+ }
+ }
+
+ g_list_free (*metadata_keywords);
+ *metadata_keywords = res;
}
/**
@@ -4472,22 +5020,23 @@ clean_up_metadata_keywords (NautilusFile *file,
static GList *
nautilus_file_get_keywords (NautilusFile *file)
{
- GList *keywords, *metadata_keywords;
+ GList *keywords, *metadata_keywords;
- if (file == NULL) {
- return NULL;
- }
+ if (file == NULL)
+ {
+ return NULL;
+ }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- keywords = g_list_copy_deep (file->details->extension_emblems, (GCopyFunc) g_strdup, NULL);
- keywords = g_list_concat (keywords, g_list_copy_deep (file->details->pending_extension_emblems, (GCopyFunc) g_strdup, NULL));
+ keywords = g_list_copy_deep (file->details->extension_emblems, (GCopyFunc) g_strdup, NULL);
+ keywords = g_list_concat (keywords, g_list_copy_deep (file->details->pending_extension_emblems, (GCopyFunc) g_strdup, NULL));
- metadata_keywords = nautilus_file_get_metadata_list (file, NAUTILUS_METADATA_KEY_EMBLEMS);
- clean_up_metadata_keywords (file, &metadata_keywords);
- keywords = g_list_concat (keywords, metadata_keywords);
+ metadata_keywords = nautilus_file_get_metadata_list (file, NAUTILUS_METADATA_KEY_EMBLEMS);
+ clean_up_metadata_keywords (file, &metadata_keywords);
+ keywords = g_list_concat (keywords, metadata_keywords);
- return sort_keyword_list_and_remove_duplicates (keywords);
+ return sort_keyword_list_and_remove_duplicates (keywords);
}
/**
@@ -4503,708 +5052,832 @@ nautilus_file_get_keywords (NautilusFile *file)
static GList *
nautilus_file_get_emblem_icons (NautilusFile *file)
{
- GList *keywords, *l;
- GList *icons;
- char *icon_names[2];
- char *keyword;
- GIcon *icon;
+ GList *keywords, *l;
+ GList *icons;
+ char *icon_names[2];
+ char *keyword;
+ GIcon *icon;
- if (file == NULL) {
- return NULL;
- }
+ if (file == NULL)
+ {
+ return NULL;
+ }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- keywords = nautilus_file_get_keywords (file);
- keywords = prepend_automatic_keywords (file, keywords);
+ keywords = nautilus_file_get_keywords (file);
+ keywords = prepend_automatic_keywords (file, keywords);
- icons = NULL;
- for (l = keywords; l != NULL; l = l->next) {
- keyword = l->data;
+ icons = NULL;
+ for (l = keywords; l != NULL; l = l->next)
+ {
+ keyword = l->data;
- icon_names[0] = g_strconcat ("emblem-", keyword, NULL);
- icon_names[1] = keyword;
- icon = g_themed_icon_new_from_names (icon_names, 2);
- g_free (icon_names[0]);
+ icon_names[0] = g_strconcat ("emblem-", keyword, NULL);
+ icon_names[1] = keyword;
+ icon = g_themed_icon_new_from_names (icon_names, 2);
+ g_free (icon_names[0]);
- icons = g_list_prepend (icons, icon);
- }
+ icons = g_list_prepend (icons, icon);
+ }
- icon = get_mount_icon (file);
- if (icon != NULL) {
- icons = g_list_prepend (icons, icon);
- }
+ icon = get_mount_icon (file);
+ if (icon != NULL)
+ {
+ icons = g_list_prepend (icons, icon);
+ }
- g_list_free_full (keywords, g_free);
+ g_list_free_full (keywords, g_free);
- return icons;
+ return icons;
}
static void
-prepend_icon_name (const char *name,
- GThemedIcon *icon)
+prepend_icon_name (const char *name,
+ GThemedIcon *icon)
{
- g_themed_icon_prepend_name(icon, name);
+ g_themed_icon_prepend_name (icon, name);
}
static GIcon *
-apply_emblems_to_icon (NautilusFile *file,
- GIcon *icon,
- NautilusFileIconFlags flags)
-{
- GIcon *emblemed_icon;
- GEmblem *emblem;
- GList *emblems, *l;
-
- emblemed_icon = NULL;
- emblems = nautilus_file_get_emblem_icons (file);
-
- for (l = emblems; l != NULL; l = l->next) {
- if (g_icon_equal (l->data, icon)) {
- continue;
- }
+apply_emblems_to_icon (NautilusFile *file,
+ GIcon *icon,
+ NautilusFileIconFlags flags)
+{
+ GIcon *emblemed_icon;
+ GEmblem *emblem;
+ GList *emblems, *l;
+
+ emblemed_icon = NULL;
+ emblems = nautilus_file_get_emblem_icons (file);
+
+ for (l = emblems; l != NULL; l = l->next)
+ {
+ if (g_icon_equal (l->data, icon))
+ {
+ continue;
+ }
- emblem = g_emblem_new (l->data);
+ emblem = g_emblem_new (l->data);
- if (emblemed_icon == NULL) {
- emblemed_icon = g_emblemed_icon_new (icon, emblem);
- } else {
- g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (emblemed_icon), emblem);
- }
+ if (emblemed_icon == NULL)
+ {
+ emblemed_icon = g_emblemed_icon_new (icon, emblem);
+ }
+ else
+ {
+ g_emblemed_icon_add_emblem (G_EMBLEMED_ICON (emblemed_icon), emblem);
+ }
- if (emblemed_icon != NULL &&
- (flags & NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM)) {
- break;
- }
- }
+ if (emblemed_icon != NULL &&
+ (flags & NAUTILUS_FILE_ICON_FLAGS_USE_ONE_EMBLEM))
+ {
+ break;
+ }
+ }
- if (emblems != NULL) {
- g_list_free_full (emblems, g_object_unref);
- }
+ if (emblems != NULL)
+ {
+ g_list_free_full (emblems, g_object_unref);
+ }
- if (emblemed_icon != NULL) {
- return emblemed_icon;
- } else {
- return g_object_ref (icon);
- }
+ if (emblemed_icon != NULL)
+ {
+ return emblemed_icon;
+ }
+ else
+ {
+ return g_object_ref (icon);
+ }
}
GIcon *
-nautilus_file_get_gicon (NautilusFile *file,
- NautilusFileIconFlags flags)
-{
- const char * const * names;
- const char *name;
- GPtrArray *prepend_array;
- GIcon *icon, *emblemed_icon;
- int i;
- gboolean is_folder = FALSE, is_inode_directory = FALSE;
-
- if (file == NULL) {
- return NULL;
- }
-
- icon = get_custom_or_link_icon (file);
- if (icon != NULL) {
- return icon;
- }
-
- if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON) {
- icon = get_mount_icon (file);
-
- if (icon != NULL) {
- goto out;
- }
- }
-
- if (file->details->icon) {
- icon = NULL;
-
- if (((flags & NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT) ||
- (flags & NAUTILUS_FILE_ICON_FLAGS_FOR_OPEN_FOLDER) ||
- (flags & NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON) ||
- (flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS)) &&
- G_IS_THEMED_ICON (file->details->icon)) {
- names = g_themed_icon_get_names (G_THEMED_ICON (file->details->icon));
- prepend_array = g_ptr_array_new ();
-
- for (i = 0; names[i] != NULL; i++) {
- name = names[i];
-
- if (strcmp (name, "folder") == 0) {
- is_folder = TRUE;
- }
- if (strcmp (name, "inode-directory") == 0) {
- is_inode_directory = TRUE;
- }
- }
-
- /* Here, we add icons in reverse order of precedence,
- * because they are later prepended */
-
- /* "folder" should override "inode-directory", not the other way around */
- if (is_inode_directory) {
- g_ptr_array_add (prepend_array, "folder");
- }
- if (is_folder && (flags & NAUTILUS_FILE_ICON_FLAGS_FOR_OPEN_FOLDER)) {
- g_ptr_array_add (prepend_array, "folder-open");
- }
- if (is_folder &&
- (flags & NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT)) {
- g_ptr_array_add (prepend_array, "folder-drag-accept");
- }
-
- if (prepend_array->len) {
- /* When constructing GThemed Icon, pointers from the array
- * are reused, but not the array itself, so the cast is safe */
- icon = g_themed_icon_new_from_names ((char**) names, -1);
- g_ptr_array_foreach (prepend_array, (GFunc) prepend_icon_name, icon);
- }
-
- g_ptr_array_free (prepend_array, TRUE);
- }
-
- if (icon == NULL) {
- icon = g_object_ref (file->details->icon);
- }
- }
-
- out:
- if (icon == NULL) {
- icon = g_object_ref (get_default_file_icon ());
- }
-
- if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS) {
- emblemed_icon = apply_emblems_to_icon (file, icon, flags);
- g_object_unref (icon);
- icon = emblemed_icon;
- }
-
- return icon;
+nautilus_file_get_gicon (NautilusFile *file,
+ NautilusFileIconFlags flags)
+{
+ const char * const *names;
+ const char *name;
+ GPtrArray *prepend_array;
+ GIcon *icon, *emblemed_icon;
+ int i;
+ gboolean is_folder = FALSE, is_inode_directory = FALSE;
+
+ if (file == NULL)
+ {
+ return NULL;
+ }
+
+ icon = get_custom_or_link_icon (file);
+ if (icon != NULL)
+ {
+ return icon;
+ }
+
+ if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON)
+ {
+ icon = get_mount_icon (file);
+
+ if (icon != NULL)
+ {
+ goto out;
+ }
+ }
+
+ if (file->details->icon)
+ {
+ icon = NULL;
+
+ if (((flags & NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT) ||
+ (flags & NAUTILUS_FILE_ICON_FLAGS_FOR_OPEN_FOLDER) ||
+ (flags & NAUTILUS_FILE_ICON_FLAGS_USE_MOUNT_ICON) ||
+ (flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS)) &&
+ G_IS_THEMED_ICON (file->details->icon))
+ {
+ names = g_themed_icon_get_names (G_THEMED_ICON (file->details->icon));
+ prepend_array = g_ptr_array_new ();
+
+ for (i = 0; names[i] != NULL; i++)
+ {
+ name = names[i];
+
+ if (strcmp (name, "folder") == 0)
+ {
+ is_folder = TRUE;
+ }
+ if (strcmp (name, "inode-directory") == 0)
+ {
+ is_inode_directory = TRUE;
+ }
+ }
+
+ /* Here, we add icons in reverse order of precedence,
+ * because they are later prepended */
+
+ /* "folder" should override "inode-directory", not the other way around */
+ if (is_inode_directory)
+ {
+ g_ptr_array_add (prepend_array, "folder");
+ }
+ if (is_folder && (flags & NAUTILUS_FILE_ICON_FLAGS_FOR_OPEN_FOLDER))
+ {
+ g_ptr_array_add (prepend_array, "folder-open");
+ }
+ if (is_folder &&
+ (flags & NAUTILUS_FILE_ICON_FLAGS_FOR_DRAG_ACCEPT))
+ {
+ g_ptr_array_add (prepend_array, "folder-drag-accept");
+ }
+
+ if (prepend_array->len)
+ {
+ /* When constructing GThemed Icon, pointers from the array
+ * are reused, but not the array itself, so the cast is safe */
+ icon = g_themed_icon_new_from_names ((char **) names, -1);
+ g_ptr_array_foreach (prepend_array, (GFunc) prepend_icon_name, icon);
+ }
+
+ g_ptr_array_free (prepend_array, TRUE);
+ }
+
+ if (icon == NULL)
+ {
+ icon = g_object_ref (file->details->icon);
+ }
+ }
+
+out:
+ if (icon == NULL)
+ {
+ icon = g_object_ref (get_default_file_icon ());
+ }
+
+ if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_EMBLEMS)
+ {
+ emblemed_icon = apply_emblems_to_icon (file, icon, flags);
+ g_object_unref (icon);
+ icon = emblemed_icon;
+ }
+
+ return icon;
}
char *
nautilus_file_get_thumbnail_path (NautilusFile *file)
{
- return g_strdup (file->details->thumbnail_path);
+ return g_strdup (file->details->thumbnail_path);
}
static NautilusIconInfo *
-nautilus_file_get_thumbnail_icon (NautilusFile *file,
- int size,
- int scale,
- NautilusFileIconFlags flags)
-{
- int modified_size;
- GdkPixbuf *pixbuf;
- int w, h, s;
- double thumb_scale;
- GIcon *gicon, *emblemed_icon;
- NautilusIconInfo *icon;
-
- icon = NULL;
- gicon = NULL;
- pixbuf = NULL;
-
- if (flags & NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE) {
- modified_size = size * scale;
- } else {
- modified_size = size * scale * cached_thumbnail_size / NAUTILUS_CANVAS_ICON_SIZE_SMALL;
- DEBUG ("Modifying icon size to %d, as our cached thumbnail size is %d",
- modified_size, cached_thumbnail_size);
- }
-
- if (file->details->thumbnail) {
- w = gdk_pixbuf_get_width (file->details->thumbnail);
- h = gdk_pixbuf_get_height (file->details->thumbnail);
-
- s = MAX (w, h);
- /* Don't scale up small thumbnails in the standard view */
- if (s <= cached_thumbnail_size) {
- thumb_scale = (double) size / NAUTILUS_CANVAS_ICON_SIZE_SMALL;
- } else {
- thumb_scale = (double) modified_size / s;
- }
-
- /* Make sure that icons don't get smaller than NAUTILUS_LIST_ICON_SIZE_SMALL */
- if (s * thumb_scale <= NAUTILUS_LIST_ICON_SIZE_SMALL) {
- thumb_scale = (double) NAUTILUS_LIST_ICON_SIZE_SMALL / s;
- }
-
- if (file->details->thumbnail_scale == thumb_scale &&
- file->details->scaled_thumbnail != NULL) {
- pixbuf = file->details->scaled_thumbnail;
- } else {
- pixbuf = gdk_pixbuf_scale_simple (file->details->thumbnail,
- MAX (w * thumb_scale, 1),
- MAX (h * thumb_scale, 1),
- GDK_INTERP_BILINEAR);
-
- /* We don't want frames around small icons */
- if (!gdk_pixbuf_get_has_alpha (file->details->thumbnail) || s >= 128 * scale) {
- if (nautilus_is_video_file (file)) {
- nautilus_ui_frame_video (&pixbuf);
- } else {
- nautilus_ui_frame_image (&pixbuf);
- }
- }
-
- g_clear_object (&file->details->scaled_thumbnail);
- file->details->scaled_thumbnail = pixbuf;
- file->details->thumbnail_scale = thumb_scale;
- }
-
- /* Don't scale up if more than 25%, then read the original
- image instead. We don't want to compare to exactly 100%,
- since the zoom level 150% gives thumbnails at 144, which is
- ok to scale up from 128. */
- if (modified_size > 128 * 1.25 * scale &&
- !file->details->thumbnail_wants_original &&
- nautilus_can_thumbnail_internally (file)) {
- /* Invalidate if we resize upward */
- file->details->thumbnail_wants_original = TRUE;
- nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL);
- }
-
- DEBUG ("Returning thumbnailed image, at size %d %d",
- (int) (w * thumb_scale), (int) (h * thumb_scale));
- } else if (file->details->thumbnail_path == NULL &&
- file->details->can_read &&
- !file->details->is_thumbnailing &&
- !file->details->thumbnailing_failed &&
- nautilus_can_thumbnail (file)) {
- nautilus_create_thumbnail (file);
- }
-
- if (pixbuf != NULL) {
- gicon = g_object_ref (pixbuf);
- } else if (file->details->is_thumbnailing) {
- gicon = g_themed_icon_new (ICON_NAME_THUMBNAIL_LOADING);
- }
-
- if (gicon != NULL) {
- emblemed_icon = apply_emblems_to_icon (file, gicon, flags);
- g_object_unref (gicon);
-
- if (g_icon_equal (emblemed_icon, G_ICON (pixbuf))) {
- icon = nautilus_icon_info_new_for_pixbuf (pixbuf, scale);
- } else {
- icon = nautilus_icon_info_lookup (emblemed_icon, size, scale);
- }
-
- g_object_unref (emblemed_icon);
- }
-
- return icon;
-}
-
-static gboolean
-nautilus_thumbnail_is_limited_by_zoom (int size,
- int scale)
-{
- int zoom_level;
+nautilus_file_get_thumbnail_icon (NautilusFile *file,
+ int size,
+ int scale,
+ NautilusFileIconFlags flags)
+{
+ int modified_size;
+ GdkPixbuf *pixbuf;
+ int w, h, s;
+ double thumb_scale;
+ GIcon *gicon, *emblemed_icon;
+ NautilusIconInfo *icon;
+
+ icon = NULL;
+ gicon = NULL;
+ pixbuf = NULL;
+
+ if (flags & NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE)
+ {
+ modified_size = size * scale;
+ }
+ else
+ {
+ modified_size = size * scale * cached_thumbnail_size / NAUTILUS_CANVAS_ICON_SIZE_SMALL;
+ DEBUG ("Modifying icon size to %d, as our cached thumbnail size is %d",
+ modified_size, cached_thumbnail_size);
+ }
+
+ if (file->details->thumbnail)
+ {
+ w = gdk_pixbuf_get_width (file->details->thumbnail);
+ h = gdk_pixbuf_get_height (file->details->thumbnail);
+
+ s = MAX (w, h);
+ /* Don't scale up small thumbnails in the standard view */
+ if (s <= cached_thumbnail_size)
+ {
+ thumb_scale = (double) size / NAUTILUS_CANVAS_ICON_SIZE_SMALL;
+ }
+ else
+ {
+ thumb_scale = (double) modified_size / s;
+ }
- zoom_level = size * scale;
+ /* Make sure that icons don't get smaller than NAUTILUS_LIST_ICON_SIZE_SMALL */
+ if (s * thumb_scale <= NAUTILUS_LIST_ICON_SIZE_SMALL)
+ {
+ thumb_scale = (double) NAUTILUS_LIST_ICON_SIZE_SMALL / s;
+ }
- if (zoom_level <= NAUTILUS_LIST_ICON_SIZE_SMALL)
- return TRUE;
+ if (file->details->thumbnail_scale == thumb_scale &&
+ file->details->scaled_thumbnail != NULL)
+ {
+ pixbuf = file->details->scaled_thumbnail;
+ }
+ else
+ {
+ pixbuf = gdk_pixbuf_scale_simple (file->details->thumbnail,
+ MAX (w * thumb_scale, 1),
+ MAX (h * thumb_scale, 1),
+ GDK_INTERP_BILINEAR);
+
+ /* We don't want frames around small icons */
+ if (!gdk_pixbuf_get_has_alpha (file->details->thumbnail) || s >= 128 * scale)
+ {
+ if (nautilus_is_video_file (file))
+ {
+ nautilus_ui_frame_video (&pixbuf);
+ }
+ else
+ {
+ nautilus_ui_frame_image (&pixbuf);
+ }
+ }
- return FALSE;
-}
+ g_clear_object (&file->details->scaled_thumbnail);
+ file->details->scaled_thumbnail = pixbuf;
+ file->details->thumbnail_scale = thumb_scale;
+ }
-NautilusIconInfo *
-nautilus_file_get_icon (NautilusFile *file,
- int size,
- int scale,
- NautilusFileIconFlags flags)
-{
- NautilusIconInfo *icon;
- GIcon *gicon;
+ /* Don't scale up if more than 25%, then read the original
+ * image instead. We don't want to compare to exactly 100%,
+ * since the zoom level 150% gives thumbnails at 144, which is
+ * ok to scale up from 128. */
+ if (modified_size > 128 * 1.25 * scale &&
+ !file->details->thumbnail_wants_original &&
+ nautilus_can_thumbnail_internally (file))
+ {
+ /* Invalidate if we resize upward */
+ file->details->thumbnail_wants_original = TRUE;
+ nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL);
+ }
- icon = NULL;
+ DEBUG ("Returning thumbnailed image, at size %d %d",
+ (int) (w * thumb_scale), (int) (h * thumb_scale));
+ }
+ else if (file->details->thumbnail_path == NULL &&
+ file->details->can_read &&
+ !file->details->is_thumbnailing &&
+ !file->details->thumbnailing_failed &&
+ nautilus_can_thumbnail (file))
+ {
+ nautilus_create_thumbnail (file);
+ }
+
+ if (pixbuf != NULL)
+ {
+ gicon = g_object_ref (pixbuf);
+ }
+ else if (file->details->is_thumbnailing)
+ {
+ gicon = g_themed_icon_new (ICON_NAME_THUMBNAIL_LOADING);
+ }
+
+ if (gicon != NULL)
+ {
+ emblemed_icon = apply_emblems_to_icon (file, gicon, flags);
+ g_object_unref (gicon);
+
+ if (g_icon_equal (emblemed_icon, G_ICON (pixbuf)))
+ {
+ icon = nautilus_icon_info_new_for_pixbuf (pixbuf, scale);
+ }
+ else
+ {
+ icon = nautilus_icon_info_lookup (emblemed_icon, size, scale);
+ }
- if (file == NULL) {
- goto out;
- }
+ g_object_unref (emblemed_icon);
+ }
- gicon = get_custom_or_link_icon (file);
- if (gicon != NULL) {
- icon = nautilus_icon_info_lookup (gicon, size, scale);
- g_object_unref (gicon);
+ return icon;
+}
- goto out;
- }
+static gboolean
+nautilus_thumbnail_is_limited_by_zoom (int size,
+ int scale)
+{
+ int zoom_level;
- DEBUG ("Called file_get_icon(), at size %d, force thumbnail %d", size,
- flags & NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE);
+ zoom_level = size * scale;
- if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS &&
- nautilus_file_should_show_thumbnail (file) &&
- !nautilus_thumbnail_is_limited_by_zoom (size, scale)) {
- icon = nautilus_file_get_thumbnail_icon (file, size, scale, flags);
- }
+ if (zoom_level <= NAUTILUS_LIST_ICON_SIZE_SMALL)
+ {
+ return TRUE;
+ }
- if (icon == NULL) {
- gicon = nautilus_file_get_gicon (file, flags);
- icon = nautilus_icon_info_lookup (gicon, size, scale);
- g_object_unref (gicon);
+ return FALSE;
+}
- if (nautilus_icon_info_is_fallback (icon)) {
- g_object_unref (icon);
- icon = nautilus_icon_info_lookup (get_default_file_icon (), size, scale);
- }
- }
+NautilusIconInfo *
+nautilus_file_get_icon (NautilusFile *file,
+ int size,
+ int scale,
+ NautilusFileIconFlags flags)
+{
+ NautilusIconInfo *icon;
+ GIcon *gicon;
+
+ icon = NULL;
+
+ if (file == NULL)
+ {
+ goto out;
+ }
+
+ gicon = get_custom_or_link_icon (file);
+ if (gicon != NULL)
+ {
+ icon = nautilus_icon_info_lookup (gicon, size, scale);
+ g_object_unref (gicon);
+
+ goto out;
+ }
+
+ DEBUG ("Called file_get_icon(), at size %d, force thumbnail %d", size,
+ flags & NAUTILUS_FILE_ICON_FLAGS_FORCE_THUMBNAIL_SIZE);
+
+ if (flags & NAUTILUS_FILE_ICON_FLAGS_USE_THUMBNAILS &&
+ nautilus_file_should_show_thumbnail (file) &&
+ !nautilus_thumbnail_is_limited_by_zoom (size, scale))
+ {
+ icon = nautilus_file_get_thumbnail_icon (file, size, scale, flags);
+ }
+
+ if (icon == NULL)
+ {
+ gicon = nautilus_file_get_gicon (file, flags);
+ icon = nautilus_icon_info_lookup (gicon, size, scale);
+ g_object_unref (gicon);
+
+ if (nautilus_icon_info_is_fallback (icon))
+ {
+ g_object_unref (icon);
+ icon = nautilus_icon_info_lookup (get_default_file_icon (), size, scale);
+ }
+ }
- out:
- return icon;
+out:
+ return icon;
}
GdkPixbuf *
-nautilus_file_get_icon_pixbuf (NautilusFile *file,
- int size,
- gboolean force_size,
- int scale,
- NautilusFileIconFlags flags)
-{
- NautilusIconInfo *info;
- GdkPixbuf *pixbuf;
-
- info = nautilus_file_get_icon (file, size, scale, flags);
- if (force_size) {
- pixbuf = nautilus_icon_info_get_pixbuf_at_size (info, size);
- } else {
- pixbuf = nautilus_icon_info_get_pixbuf (info);
- }
- g_object_unref (info);
-
- return pixbuf;
-}
-
-gboolean
-nautilus_file_get_date (NautilusFile *file,
- NautilusDateType date_type,
- time_t *date)
+nautilus_file_get_icon_pixbuf (NautilusFile *file,
+ int size,
+ gboolean force_size,
+ int scale,
+ NautilusFileIconFlags flags)
{
- if (date != NULL) {
- *date = 0;
- }
+ NautilusIconInfo *info;
+ GdkPixbuf *pixbuf;
+
+ info = nautilus_file_get_icon (file, size, scale, flags);
+ if (force_size)
+ {
+ pixbuf = nautilus_icon_info_get_pixbuf_at_size (info, size);
+ }
+ else
+ {
+ pixbuf = nautilus_icon_info_get_pixbuf (info);
+ }
+ g_object_unref (info);
- g_return_val_if_fail (date_type == NAUTILUS_DATE_TYPE_ACCESSED
- || date_type == NAUTILUS_DATE_TYPE_MODIFIED
- || date_type == NAUTILUS_DATE_TYPE_TRASHED,
- FALSE);
+ return pixbuf;
+}
- if (file == NULL) {
- return FALSE;
- }
+gboolean
+nautilus_file_get_date (NautilusFile *file,
+ NautilusDateType date_type,
+ time_t *date)
+{
+ if (date != NULL)
+ {
+ *date = 0;
+ }
+
+ g_return_val_if_fail (date_type == NAUTILUS_DATE_TYPE_ACCESSED
+ || date_type == NAUTILUS_DATE_TYPE_MODIFIED
+ || date_type == NAUTILUS_DATE_TYPE_TRASHED,
+ FALSE);
+
+ if (file == NULL)
+ {
+ return FALSE;
+ }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_date (file, date_type, date);
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_date (file, date_type, date);
}
static char *
nautilus_file_get_where_string (NautilusFile *file)
{
- if (file == NULL) {
- return NULL;
- }
+ if (file == NULL)
+ {
+ return NULL;
+ }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_where_string (file);
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_where_string (file);
}
static char *
nautilus_file_get_trash_original_file_parent_as_string (NautilusFile *file)
{
- NautilusFile *orig_file, *parent;
- GFile *location;
- char *filename;
+ NautilusFile *orig_file, *parent;
+ GFile *location;
+ char *filename;
- if (file->details->trash_orig_path != NULL) {
- orig_file = nautilus_file_get_trash_original_file (file);
- parent = nautilus_file_get_parent (orig_file);
- location = nautilus_file_get_location (parent);
+ if (file->details->trash_orig_path != NULL)
+ {
+ orig_file = nautilus_file_get_trash_original_file (file);
+ parent = nautilus_file_get_parent (orig_file);
+ location = nautilus_file_get_location (parent);
- filename = g_file_get_basename (location);
+ filename = g_file_get_basename (location);
- g_object_unref (location);
- nautilus_file_unref (parent);
- nautilus_file_unref (orig_file);
+ g_object_unref (location);
+ nautilus_file_unref (parent);
+ nautilus_file_unref (orig_file);
- return filename;
- }
+ return filename;
+ }
- return NULL;
+ return NULL;
}
/**
* nautilus_file_get_date_as_string:
- *
- * Get a user-displayable string representing a file modification date.
+ *
+ * Get a user-displayable string representing a file modification date.
* The caller is responsible for g_free-ing this string.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_date_as_string (NautilusFile *file,
NautilusDateType date_type,
NautilusDateFormat date_format)
{
- time_t file_time_raw;
- GDateTime *file_date_time, *now;
- GDateTime *today_midnight;
- gint days_ago;
- gboolean use_24;
- const gchar *format;
- gchar *result;
- gchar *result_with_ratio;
-
- if (!nautilus_file_get_date (file, date_type, &file_time_raw))
- return NULL;
-
- file_date_time = g_date_time_new_from_unix_local (file_time_raw);
- if (date_format != NAUTILUS_DATE_FORMAT_FULL) {
- GDateTime *file_date;
-
- now = g_date_time_new_now_local ();
- today_midnight = g_date_time_new_local (g_date_time_get_year (now),
- g_date_time_get_month (now),
- g_date_time_get_day_of_month (now),
- 0, 0, 0);
-
- file_date = g_date_time_new_local (g_date_time_get_year (file_date_time),
- g_date_time_get_month (file_date_time),
- g_date_time_get_day_of_month (file_date_time),
- 0, 0, 0);
-
- days_ago = g_date_time_difference (today_midnight, file_date) / G_TIME_SPAN_DAY;
-
- use_24 = g_settings_get_enum (gnome_interface_preferences, "clock-format") ==
- G_DESKTOP_CLOCK_FORMAT_24H;
-
- // Show only the time if date is on today
- if (days_ago < 1) {
- if (use_24) {
- /* Translators: Time in 24h format */
- format = _("%H:%M");
- } else {
- /* Translators: Time in 12h format */
- format = _("%l:%M %p");
- }
- }
- // Show the word "Yesterday" and time if date is on yesterday
- else if (days_ago < 2) {
- if (date_format == NAUTILUS_DATE_FORMAT_REGULAR) {
- // xgettext:no-c-format
- format = _("Yesterday");
- } else {
- if (use_24) {
- /* Translators: this is the word Yesterday followed by
- * a time in 24h format. i.e. "Yesterday 23:04" */
- // xgettext:no-c-format
- format = _("Yesterday %H:%M");
- } else {
- /* Translators: this is the word Yesterday followed by
- * a time in 12h format. i.e. "Yesterday 9:04 PM" */
- // xgettext:no-c-format
- format = _("Yesterday %l:%M %p");
- }
- }
- }
- // Show a week day and time if date is in the last week
- else if (days_ago < 7) {
- if (date_format == NAUTILUS_DATE_FORMAT_REGULAR) {
- // xgettext:no-c-format
- format = _("%a");
- } else {
- if (use_24) {
- /* Translators: this is the name of the week day followed by
- * a time in 24h format. i.e. "Monday 23:04" */
- // xgettext:no-c-format
- format = _("%a %H:%M");
- } else {
- /* Translators: this is the week day name followed by
- * a time in 12h format. i.e. "Monday 9:04 PM" */
- // xgettext:no-c-format
- format = _("%a %l:%M %p");
- }
- }
- } else if (g_date_time_get_year (file_date) == g_date_time_get_year (now)) {
- if (date_format == NAUTILUS_DATE_FORMAT_REGULAR) {
- /* Translators: this is the day of the month followed
- * by the abbreviated month name i.e. "3 Feb" */
- // xgettext:no-c-format
- format = _("%-e %b");
- } else {
- if (use_24) {
- /* Translators: this is the day of the month followed
- * by the abbreviated month name followed by a time in
- * 24h format i.e. "3 Feb 23:04" */
- // xgettext:no-c-format
- format = _("%-e %b %H:%M");
- } else {
- /* Translators: this is the day of the month followed
- * by the abbreviated month name followed by a time in
- * 12h format i.e. "3 Feb 9:04" */
- // xgettext:no-c-format
- format = _("%-e %b %l:%M %p");
- }
- }
- } else {
- if (date_format == NAUTILUS_DATE_FORMAT_REGULAR) {
- /* Translators: this is the day of the month followed by the abbreviated
- * month name followed by the year i.e. "3 Feb 2015" */
- // xgettext:no-c-format
- format = _("%-e %b %Y");
- } else {
- if (use_24) {
- /* Translators: this is the day number followed
- * by the abbreviated month name followed by the year followed
- * by a time in 24h format i.e. "3 Feb 2015 23:04" */
- // xgettext:no-c-format
- format = _("%-e %b %Y %H:%M");
- } else {
- /* Translators: this is the day number followed
- * by the abbreviated month name followed by the year followed
- * by a time in 12h format i.e. "3 Feb 2015 9:04 PM" */
- // xgettext:no-c-format
- format = _("%-e %b %Y %l:%M %p");
- }
- }
- }
-
- g_date_time_unref (file_date);
- g_date_time_unref (now);
- g_date_time_unref (today_midnight);
- } else {
- // xgettext:no-c-format
- format = _("%c");
- }
-
- result = g_date_time_format (file_date_time, format);
- g_date_time_unref (file_date_time);
-
- /* Replace ":" with ratio. Replacement is done afterward because g_date_time_format
- * may fail with utf8 chars in some locales */
- result_with_ratio = eel_str_replace_substring (result, ":", "∶");
- g_free (result);
-
- return result_with_ratio;
+ time_t file_time_raw;
+ GDateTime *file_date_time, *now;
+ GDateTime *today_midnight;
+ gint days_ago;
+ gboolean use_24;
+ const gchar *format;
+ gchar *result;
+ gchar *result_with_ratio;
+
+ if (!nautilus_file_get_date (file, date_type, &file_time_raw))
+ {
+ return NULL;
+ }
+
+ file_date_time = g_date_time_new_from_unix_local (file_time_raw);
+ if (date_format != NAUTILUS_DATE_FORMAT_FULL)
+ {
+ GDateTime *file_date;
+
+ now = g_date_time_new_now_local ();
+ today_midnight = g_date_time_new_local (g_date_time_get_year (now),
+ g_date_time_get_month (now),
+ g_date_time_get_day_of_month (now),
+ 0, 0, 0);
+
+ file_date = g_date_time_new_local (g_date_time_get_year (file_date_time),
+ g_date_time_get_month (file_date_time),
+ g_date_time_get_day_of_month (file_date_time),
+ 0, 0, 0);
+
+ days_ago = g_date_time_difference (today_midnight, file_date) / G_TIME_SPAN_DAY;
+
+ use_24 = g_settings_get_enum (gnome_interface_preferences, "clock-format") ==
+ G_DESKTOP_CLOCK_FORMAT_24H;
+
+ /* Show only the time if date is on today */
+ if (days_ago < 1)
+ {
+ if (use_24)
+ {
+ /* Translators: Time in 24h format */
+ format = _("%H:%M");
+ }
+ else
+ {
+ /* Translators: Time in 12h format */
+ format = _("%l:%M %p");
+ }
+ }
+ /* Show the word "Yesterday" and time if date is on yesterday */
+ else if (days_ago < 2)
+ {
+ if (date_format == NAUTILUS_DATE_FORMAT_REGULAR)
+ {
+ /* xgettext:no-c-format */
+ format = _("Yesterday");
+ }
+ else
+ {
+ if (use_24)
+ {
+ /* Translators: this is the word Yesterday followed by
+ * a time in 24h format. i.e. "Yesterday 23:04" */
+ /* xgettext:no-c-format */
+ format = _("Yesterday %H:%M");
+ }
+ else
+ {
+ /* Translators: this is the word Yesterday followed by
+ * a time in 12h format. i.e. "Yesterday 9:04 PM" */
+ /* xgettext:no-c-format */
+ format = _("Yesterday %l:%M %p");
+ }
+ }
+ }
+ /* Show a week day and time if date is in the last week */
+ else if (days_ago < 7)
+ {
+ if (date_format == NAUTILUS_DATE_FORMAT_REGULAR)
+ {
+ /* xgettext:no-c-format */
+ format = _("%a");
+ }
+ else
+ {
+ if (use_24)
+ {
+ /* Translators: this is the name of the week day followed by
+ * a time in 24h format. i.e. "Monday 23:04" */
+ /* xgettext:no-c-format */
+ format = _("%a %H:%M");
+ }
+ else
+ {
+ /* Translators: this is the week day name followed by
+ * a time in 12h format. i.e. "Monday 9:04 PM" */
+ /* xgettext:no-c-format */
+ format = _("%a %l:%M %p");
+ }
+ }
+ }
+ else if (g_date_time_get_year (file_date) == g_date_time_get_year (now))
+ {
+ if (date_format == NAUTILUS_DATE_FORMAT_REGULAR)
+ {
+ /* Translators: this is the day of the month followed
+ * by the abbreviated month name i.e. "3 Feb" */
+ /* xgettext:no-c-format */
+ format = _("%-e %b");
+ }
+ else
+ {
+ if (use_24)
+ {
+ /* Translators: this is the day of the month followed
+ * by the abbreviated month name followed by a time in
+ * 24h format i.e. "3 Feb 23:04" */
+ /* xgettext:no-c-format */
+ format = _("%-e %b %H:%M");
+ }
+ else
+ {
+ /* Translators: this is the day of the month followed
+ * by the abbreviated month name followed by a time in
+ * 12h format i.e. "3 Feb 9:04" */
+ /* xgettext:no-c-format */
+ format = _("%-e %b %l:%M %p");
+ }
+ }
+ }
+ else
+ {
+ if (date_format == NAUTILUS_DATE_FORMAT_REGULAR)
+ {
+ /* Translators: this is the day of the month followed by the abbreviated
+ * month name followed by the year i.e. "3 Feb 2015" */
+ /* xgettext:no-c-format */
+ format = _("%-e %b %Y");
+ }
+ else
+ {
+ if (use_24)
+ {
+ /* Translators: this is the day number followed
+ * by the abbreviated month name followed by the year followed
+ * by a time in 24h format i.e. "3 Feb 2015 23:04" */
+ /* xgettext:no-c-format */
+ format = _("%-e %b %Y %H:%M");
+ }
+ else
+ {
+ /* Translators: this is the day number followed
+ * by the abbreviated month name followed by the year followed
+ * by a time in 12h format i.e. "3 Feb 2015 9:04 PM" */
+ /* xgettext:no-c-format */
+ format = _("%-e %b %Y %l:%M %p");
+ }
+ }
+ }
+
+ g_date_time_unref (file_date);
+ g_date_time_unref (now);
+ g_date_time_unref (today_midnight);
+ }
+ else
+ {
+ /* xgettext:no-c-format */
+ format = _("%c");
+ }
+
+ result = g_date_time_format (file_date_time, format);
+ g_date_time_unref (file_date_time);
+
+ /* Replace ":" with ratio. Replacement is done afterward because g_date_time_format
+ * may fail with utf8 chars in some locales */
+ result_with_ratio = eel_str_replace_substring (result, ":", "∶");
+ g_free (result);
+
+ return result_with_ratio;
}
static void
show_directory_item_count_changed_callback (gpointer callback_data)
{
- show_directory_item_count = g_settings_get_enum (nautilus_preferences, NAUTILUS_PREFERENCES_SHOW_DIRECTORY_ITEM_COUNTS);
+ show_directory_item_count = g_settings_get_enum (nautilus_preferences, NAUTILUS_PREFERENCES_SHOW_DIRECTORY_ITEM_COUNTS);
}
static gboolean
-get_speed_tradeoff_preference_for_file (NautilusFile *file, NautilusSpeedTradeoffValue value)
-{
- GFilesystemPreviewType use_preview;
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
-
- use_preview = nautilus_file_get_filesystem_use_preview (file);
-
- if (value == NAUTILUS_SPEED_TRADEOFF_ALWAYS) {
- if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
- return FALSE;
- } else {
- return TRUE;
- }
- }
-
- if (value == NAUTILUS_SPEED_TRADEOFF_NEVER) {
- return FALSE;
- }
-
- g_assert (value == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY);
-
- if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER) {
- /* file system says to never preview anything */
- return FALSE;
- } else if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL) {
- /* file system says we should treat file as if it's local */
- return TRUE;
- } else {
- /* only local files */
- return nautilus_file_is_local (file);
- }
+get_speed_tradeoff_preference_for_file (NautilusFile *file,
+ NautilusSpeedTradeoffValue value)
+{
+ GFilesystemPreviewType use_preview;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+
+ use_preview = nautilus_file_get_filesystem_use_preview (file);
+
+ if (value == NAUTILUS_SPEED_TRADEOFF_ALWAYS)
+ {
+ if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER)
+ {
+ return FALSE;
+ }
+ else
+ {
+ return TRUE;
+ }
+ }
+
+ if (value == NAUTILUS_SPEED_TRADEOFF_NEVER)
+ {
+ return FALSE;
+ }
+
+ g_assert (value == NAUTILUS_SPEED_TRADEOFF_LOCAL_ONLY);
+
+ if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_NEVER)
+ {
+ /* file system says to never preview anything */
+ return FALSE;
+ }
+ else if (use_preview == G_FILESYSTEM_PREVIEW_TYPE_IF_LOCAL)
+ {
+ /* file system says we should treat file as if it's local */
+ return TRUE;
+ }
+ else
+ {
+ /* only local files */
+ return nautilus_file_is_local (file);
+ }
}
gboolean
nautilus_file_should_show_directory_item_count (NautilusFile *file)
{
- static gboolean show_directory_item_count_callback_added = FALSE;
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
-
- if (file->details->mime_type &&
- strcmp (eel_ref_str_peek (file->details->mime_type), "x-directory/smb-share") == 0) {
- return FALSE;
- }
-
- /* Add the callback once for the life of our process */
- if (!show_directory_item_count_callback_added) {
- g_signal_connect_swapped (nautilus_preferences,
- "changed::" NAUTILUS_PREFERENCES_SHOW_DIRECTORY_ITEM_COUNTS,
- G_CALLBACK(show_directory_item_count_changed_callback),
- NULL);
- show_directory_item_count_callback_added = TRUE;
-
- /* Peek for the first time */
- show_directory_item_count_changed_callback (NULL);
- }
-
- return get_speed_tradeoff_preference_for_file (file, show_directory_item_count);
+ static gboolean show_directory_item_count_callback_added = FALSE;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+
+ if (file->details->mime_type &&
+ strcmp (eel_ref_str_peek (file->details->mime_type), "x-directory/smb-share") == 0)
+ {
+ return FALSE;
+ }
+
+ /* Add the callback once for the life of our process */
+ if (!show_directory_item_count_callback_added)
+ {
+ g_signal_connect_swapped (nautilus_preferences,
+ "changed::" NAUTILUS_PREFERENCES_SHOW_DIRECTORY_ITEM_COUNTS,
+ G_CALLBACK (show_directory_item_count_changed_callback),
+ NULL);
+ show_directory_item_count_callback_added = TRUE;
+
+ /* Peek for the first time */
+ show_directory_item_count_changed_callback (NULL);
+ }
+
+ return get_speed_tradeoff_preference_for_file (file, show_directory_item_count);
}
/**
* nautilus_file_get_directory_item_count
- *
+ *
* Get the number of items in a directory.
* @file: NautilusFile representing a directory.
* @count: Place to put count.
* @count_unreadable: Set to TRUE (if non-NULL) if permissions prevent
* the item count from being read on this directory. Otherwise set to FALSE.
- *
+ *
* Returns: TRUE if count is available.
- *
+ *
**/
gboolean
-nautilus_file_get_directory_item_count (NautilusFile *file,
- guint *count,
- gboolean *count_unreadable)
-{
- if (count != NULL) {
- *count = 0;
- }
- if (count_unreadable != NULL) {
- *count_unreadable = FALSE;
- }
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
-
- if (!nautilus_file_is_directory (file)) {
- return FALSE;
- }
+nautilus_file_get_directory_item_count (NautilusFile *file,
+ guint *count,
+ gboolean *count_unreadable)
+{
+ if (count != NULL)
+ {
+ *count = 0;
+ }
+ if (count_unreadable != NULL)
+ {
+ *count_unreadable = FALSE;
+ }
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+
+ if (!nautilus_file_is_directory (file))
+ {
+ return FALSE;
+ }
- if (!nautilus_file_should_show_directory_item_count (file)) {
- return FALSE;
- }
+ if (!nautilus_file_should_show_directory_item_count (file))
+ {
+ return FALSE;
+ }
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_item_count
- (file, count, count_unreadable);
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_item_count
+ (file, count, count_unreadable);
}
/**
* nautilus_file_get_deep_counts
- *
+ *
* Get the statistics about items inside a directory.
* @file: NautilusFile representing a directory or file.
* @directory_count: Place to put count of directories inside.
@@ -5215,205 +5888,220 @@ nautilus_file_get_directory_item_count (NautilusFile *file,
* @force: Whether the deep counts should even be collected if
* nautilus_file_should_show_directory_item_count returns FALSE
* for this file.
- *
+ *
* Returns: Status to indicate whether sizes are available.
- *
+ *
**/
NautilusRequestStatus
nautilus_file_get_deep_counts (NautilusFile *file,
- guint *directory_count,
- guint *file_count,
- guint *unreadable_directory_count,
- goffset *total_size,
- gboolean force)
-{
- if (directory_count != NULL) {
- *directory_count = 0;
- }
- if (file_count != NULL) {
- *file_count = 0;
- }
- if (unreadable_directory_count != NULL) {
- *unreadable_directory_count = 0;
- }
- if (total_size != NULL) {
- *total_size = 0;
- }
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NAUTILUS_REQUEST_DONE);
-
- if (!force && !nautilus_file_should_show_directory_item_count (file)) {
- /* Set field so an existing value isn't treated as up-to-date
- * when preference changes later.
- */
- file->details->deep_counts_status = NAUTILUS_REQUEST_NOT_STARTED;
- return file->details->deep_counts_status;
- }
-
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_deep_counts
- (file, directory_count, file_count,
- unreadable_directory_count, total_size);
+ guint *directory_count,
+ guint *file_count,
+ guint *unreadable_directory_count,
+ goffset *total_size,
+ gboolean force)
+{
+ if (directory_count != NULL)
+ {
+ *directory_count = 0;
+ }
+ if (file_count != NULL)
+ {
+ *file_count = 0;
+ }
+ if (unreadable_directory_count != NULL)
+ {
+ *unreadable_directory_count = 0;
+ }
+ if (total_size != NULL)
+ {
+ *total_size = 0;
+ }
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NAUTILUS_REQUEST_DONE);
+
+ if (!force && !nautilus_file_should_show_directory_item_count (file))
+ {
+ /* Set field so an existing value isn't treated as up-to-date
+ * when preference changes later.
+ */
+ file->details->deep_counts_status = NAUTILUS_REQUEST_NOT_STARTED;
+ return file->details->deep_counts_status;
+ }
+
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->get_deep_counts
+ (file, directory_count, file_count,
+ unreadable_directory_count, total_size);
}
void
nautilus_file_recompute_deep_counts (NautilusFile *file)
{
- if (file->details->deep_counts_status != NAUTILUS_REQUEST_IN_PROGRESS) {
- file->details->deep_counts_status = NAUTILUS_REQUEST_NOT_STARTED;
- if (file->details->directory != NULL) {
- nautilus_directory_add_file_to_work_queue (file->details->directory, file);
- nautilus_directory_async_state_changed (file->details->directory);
- }
- }
+ if (file->details->deep_counts_status != NAUTILUS_REQUEST_IN_PROGRESS)
+ {
+ file->details->deep_counts_status = NAUTILUS_REQUEST_NOT_STARTED;
+ if (file->details->directory != NULL)
+ {
+ nautilus_directory_add_file_to_work_queue (file->details->directory, file);
+ nautilus_directory_async_state_changed (file->details->directory);
+ }
+ }
}
gboolean
nautilus_file_can_get_size (NautilusFile *file)
{
- return file->details->size == -1;
+ return file->details->size == -1;
}
-
+
/**
* nautilus_file_get_size
- *
+ *
* Get the file size.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Size in bytes.
- *
+ *
**/
goffset
nautilus_file_get_size (NautilusFile *file)
{
- /* Before we have info on the file, we don't know the size. */
- if (file->details->size == -1)
- return 0;
- return file->details->size;
+ /* Before we have info on the file, we don't know the size. */
+ if (file->details->size == -1)
+ {
+ return 0;
+ }
+ return file->details->size;
}
time_t
nautilus_file_get_mtime (NautilusFile *file)
{
- return file->details->mtime;
+ return file->details->mtime;
}
time_t
nautilus_file_get_atime (NautilusFile *file)
{
- return file->details->atime;
+ return file->details->atime;
}
static void
-set_attributes_get_info_callback (GObject *source_object,
- GAsyncResult *res,
- gpointer callback_data)
-{
- NautilusFileOperation *op;
- GFileInfo *new_info;
- GError *error;
-
- op = callback_data;
-
- error = NULL;
- new_info = g_file_query_info_finish (G_FILE (source_object), res, &error);
- if (new_info != NULL) {
- if (nautilus_file_update_info (op->file, new_info)) {
- nautilus_file_changed (op->file);
- }
- g_object_unref (new_info);
- }
- nautilus_file_operation_complete (op, NULL, error);
- if (error) {
- g_error_free (error);
- }
+set_attributes_get_info_callback (GObject *source_object,
+ GAsyncResult *res,
+ gpointer callback_data)
+{
+ NautilusFileOperation *op;
+ GFileInfo *new_info;
+ GError *error;
+
+ op = callback_data;
+
+ error = NULL;
+ new_info = g_file_query_info_finish (G_FILE (source_object), res, &error);
+ if (new_info != NULL)
+ {
+ if (nautilus_file_update_info (op->file, new_info))
+ {
+ nautilus_file_changed (op->file);
+ }
+ g_object_unref (new_info);
+ }
+ nautilus_file_operation_complete (op, NULL, error);
+ if (error)
+ {
+ g_error_free (error);
+ }
}
static void
-set_attributes_callback (GObject *source_object,
- GAsyncResult *result,
- gpointer callback_data)
-{
- NautilusFileOperation *op;
- GError *error;
- gboolean res;
-
- op = callback_data;
-
- error = NULL;
- res = g_file_set_attributes_finish (G_FILE (source_object),
- result,
- NULL,
- &error);
-
- if (res) {
- g_file_query_info_async (G_FILE (source_object),
- NAUTILUS_FILE_DEFAULT_ATTRIBUTES,
- 0,
- G_PRIORITY_DEFAULT,
- op->cancellable,
- set_attributes_get_info_callback, op);
- } else {
- nautilus_file_operation_complete (op, NULL, error);
- g_error_free (error);
- }
+set_attributes_callback (GObject *source_object,
+ GAsyncResult *result,
+ gpointer callback_data)
+{
+ NautilusFileOperation *op;
+ GError *error;
+ gboolean res;
+
+ op = callback_data;
+
+ error = NULL;
+ res = g_file_set_attributes_finish (G_FILE (source_object),
+ result,
+ NULL,
+ &error);
+
+ if (res)
+ {
+ g_file_query_info_async (G_FILE (source_object),
+ NAUTILUS_FILE_DEFAULT_ATTRIBUTES,
+ 0,
+ G_PRIORITY_DEFAULT,
+ op->cancellable,
+ set_attributes_get_info_callback, op);
+ }
+ else
+ {
+ nautilus_file_operation_complete (op, NULL, error);
+ g_error_free (error);
+ }
}
void
-nautilus_file_set_attributes (NautilusFile *file,
- GFileInfo *attributes,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- NautilusFileOperation *op;
- GFile *location;
-
- op = nautilus_file_operation_new (file, callback, callback_data);
-
- location = nautilus_file_get_location (file);
- g_file_set_attributes_async (location,
- attributes,
- 0,
- G_PRIORITY_DEFAULT,
- op->cancellable,
- set_attributes_callback,
- op);
- g_object_unref (location);
+nautilus_file_set_attributes (NautilusFile *file,
+ GFileInfo *attributes,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ NautilusFileOperation *op;
+ GFile *location;
+
+ op = nautilus_file_operation_new (file, callback, callback_data);
+
+ location = nautilus_file_get_location (file);
+ g_file_set_attributes_async (location,
+ attributes,
+ 0,
+ G_PRIORITY_DEFAULT,
+ op->cancellable,
+ set_attributes_callback,
+ op);
+ g_object_unref (location);
}
void
nautilus_file_set_search_relevance (NautilusFile *file,
- gdouble relevance)
+ gdouble relevance)
{
- file->details->search_relevance = relevance;
+ file->details->search_relevance = relevance;
}
/**
* nautilus_file_can_get_permissions:
- *
+ *
* Check whether the permissions for a file are determinable.
* This might not be the case for files on non-UNIX file systems.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: TRUE if the permissions are valid.
*/
gboolean
nautilus_file_can_get_permissions (NautilusFile *file)
{
- return file->details->has_permissions;
+ return file->details->has_permissions;
}
/**
* nautilus_file_can_set_permissions:
- *
+ *
* Check whether the current user is allowed to change
* the permissions of a file.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: TRUE if the current user can change the
* permissions of @file, FALSE otherwise. It's always possible
* that when you actually try to do it, you will fail.
@@ -5421,310 +6109,340 @@ nautilus_file_can_get_permissions (NautilusFile *file)
gboolean
nautilus_file_can_set_permissions (NautilusFile *file)
{
- uid_t user_id;
+ uid_t user_id;
- if (file->details->uid != -1 &&
- nautilus_file_is_local (file)) {
- /* Check the user. */
- user_id = geteuid();
+ if (file->details->uid != -1 &&
+ nautilus_file_is_local (file))
+ {
+ /* Check the user. */
+ user_id = geteuid ();
- /* Owner is allowed to set permissions. */
- if (user_id == (uid_t) file->details->uid) {
- return TRUE;
- }
+ /* Owner is allowed to set permissions. */
+ if (user_id == (uid_t) file->details->uid)
+ {
+ return TRUE;
+ }
- /* Root is also allowed to set permissions. */
- if (user_id == 0) {
- return TRUE;
- }
+ /* Root is also allowed to set permissions. */
+ if (user_id == 0)
+ {
+ return TRUE;
+ }
- /* Nobody else is allowed. */
- return FALSE;
- }
+ /* Nobody else is allowed. */
+ return FALSE;
+ }
- /* pretend to have full chmod rights when no info is available, relevant when
- * the FS can't provide ownership info, for instance for FTP */
- return TRUE;
+ /* pretend to have full chmod rights when no info is available, relevant when
+ * the FS can't provide ownership info, for instance for FTP */
+ return TRUE;
}
guint
nautilus_file_get_permissions (NautilusFile *file)
{
- g_return_val_if_fail (nautilus_file_can_get_permissions (file), 0);
+ g_return_val_if_fail (nautilus_file_can_get_permissions (file), 0);
- return file->details->permissions;
+ return file->details->permissions;
}
/**
* nautilus_file_set_permissions:
- *
+ *
* Change a file's permissions. This should only be called if
* nautilus_file_can_set_permissions returned TRUE.
- *
+ *
* @file: NautilusFile representing the file in question.
* @new_permissions: New permissions value. This is the whole
* set of permissions, not a delta.
**/
void
-nautilus_file_set_permissions (NautilusFile *file,
- guint32 new_permissions,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- GFileInfo *info;
- GError *error;
-
- if (!nautilus_file_can_set_permissions (file)) {
- /* Claim that something changed even if the permission change failed.
- * This makes it easier for some clients who see the "reverting"
- * to the old permissions as "changing back".
- */
- nautilus_file_changed (file);
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Not allowed to set permissions"));
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
- return;
- }
-
- /* Test the permissions-haven't-changed case explicitly
- * because we don't want to send the file-changed signal if
- * nothing changed.
- */
- if (new_permissions == file->details->permissions) {
- (* callback) (file, NULL, NULL, callback_data);
- return;
- }
-
- if (!nautilus_file_undo_manager_is_operating ()) {
- NautilusFileUndoInfo *undo_info;
-
- undo_info = nautilus_file_undo_info_permissions_new (nautilus_file_get_location (file),
- file->details->permissions,
- new_permissions);
- nautilus_file_undo_manager_set_action (undo_info);
- }
-
- info = g_file_info_new ();
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE, new_permissions);
- nautilus_file_set_attributes (file, info, callback, callback_data);
-
- g_object_unref (info);
+nautilus_file_set_permissions (NautilusFile *file,
+ guint32 new_permissions,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GFileInfo *info;
+ GError *error;
+
+ if (!nautilus_file_can_set_permissions (file))
+ {
+ /* Claim that something changed even if the permission change failed.
+ * This makes it easier for some clients who see the "reverting"
+ * to the old permissions as "changing back".
+ */
+ nautilus_file_changed (file);
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
+ _("Not allowed to set permissions"));
+ (*callback)(file, NULL, error, callback_data);
+ g_error_free (error);
+ return;
+ }
+
+ /* Test the permissions-haven't-changed case explicitly
+ * because we don't want to send the file-changed signal if
+ * nothing changed.
+ */
+ if (new_permissions == file->details->permissions)
+ {
+ (*callback)(file, NULL, NULL, callback_data);
+ return;
+ }
+
+ if (!nautilus_file_undo_manager_is_operating ())
+ {
+ NautilusFileUndoInfo *undo_info;
+
+ undo_info = nautilus_file_undo_info_permissions_new (nautilus_file_get_location (file),
+ file->details->permissions,
+ new_permissions);
+ nautilus_file_undo_manager_set_action (undo_info);
+ }
+
+ info = g_file_info_new ();
+ g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_MODE, new_permissions);
+ nautilus_file_set_attributes (file, info, callback, callback_data);
+
+ g_object_unref (info);
}
/**
* nautilus_file_can_get_selinux_context:
- *
+ *
* Check whether the selinux context for a file are determinable.
* This might not be the case for files on non-UNIX file systems,
* files without a context or systems that don't support selinux.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: TRUE if the permissions are valid.
*/
gboolean
nautilus_file_can_get_selinux_context (NautilusFile *file)
{
- return file->details->selinux_context != NULL;
+ return file->details->selinux_context != NULL;
}
/**
* nautilus_file_get_selinux_context:
- *
+ *
* Get a user-displayable string representing a file's selinux
* context
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
char *
nautilus_file_get_selinux_context (NautilusFile *file)
{
- char *translated;
- char *raw;
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ char *translated;
+ char *raw;
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- if (!nautilus_file_can_get_selinux_context (file)) {
- return NULL;
- }
+ if (!nautilus_file_can_get_selinux_context (file))
+ {
+ return NULL;
+ }
- raw = file->details->selinux_context;
+ raw = file->details->selinux_context;
#ifdef HAVE_SELINUX
- if (selinux_raw_to_trans_context (raw, &translated) == 0) {
- char *tmp;
- tmp = g_strdup (translated);
- freecon (translated);
- translated = tmp;
- }
- else
+ if (selinux_raw_to_trans_context (raw, &translated) == 0)
+ {
+ char *tmp;
+ tmp = g_strdup (translated);
+ freecon (translated);
+ translated = tmp;
+ }
+ else
#endif
- {
- translated = g_strdup (raw);
- }
-
- return translated;
+ {
+ translated = g_strdup (raw);
+ }
+
+ return translated;
}
static char *
-get_real_name (const char *name, const char *gecos)
-{
- char *locale_string, *part_before_comma, *capitalized_login_name, *real_name;
-
- if (gecos == NULL) {
- return NULL;
- }
-
- locale_string = eel_str_strip_substring_and_after (gecos, ",");
- if (!g_utf8_validate (locale_string, -1, NULL)) {
- part_before_comma = g_locale_to_utf8 (locale_string, -1, NULL, NULL, NULL);
- g_free (locale_string);
- } else {
- part_before_comma = locale_string;
- }
-
- if (!g_utf8_validate (name, -1, NULL)) {
- locale_string = g_locale_to_utf8 (name, -1, NULL, NULL, NULL);
- } else {
- locale_string = g_strdup (name);
- }
-
- capitalized_login_name = eel_str_capitalize (locale_string);
- g_free (locale_string);
-
- if (capitalized_login_name == NULL) {
- real_name = part_before_comma;
- } else {
- real_name = eel_str_replace_substring
- (part_before_comma, "&", capitalized_login_name);
- g_free (part_before_comma);
- }
-
-
- if (g_strcmp0 (real_name, NULL) == 0
- || g_strcmp0 (name, real_name) == 0
- || g_strcmp0 (capitalized_login_name, real_name) == 0) {
- g_free (real_name);
- real_name = NULL;
- }
-
- g_free (capitalized_login_name);
-
- return real_name;
+get_real_name (const char *name,
+ const char *gecos)
+{
+ char *locale_string, *part_before_comma, *capitalized_login_name, *real_name;
+
+ if (gecos == NULL)
+ {
+ return NULL;
+ }
+
+ locale_string = eel_str_strip_substring_and_after (gecos, ",");
+ if (!g_utf8_validate (locale_string, -1, NULL))
+ {
+ part_before_comma = g_locale_to_utf8 (locale_string, -1, NULL, NULL, NULL);
+ g_free (locale_string);
+ }
+ else
+ {
+ part_before_comma = locale_string;
+ }
+
+ if (!g_utf8_validate (name, -1, NULL))
+ {
+ locale_string = g_locale_to_utf8 (name, -1, NULL, NULL, NULL);
+ }
+ else
+ {
+ locale_string = g_strdup (name);
+ }
+
+ capitalized_login_name = eel_str_capitalize (locale_string);
+ g_free (locale_string);
+
+ if (capitalized_login_name == NULL)
+ {
+ real_name = part_before_comma;
+ }
+ else
+ {
+ real_name = eel_str_replace_substring
+ (part_before_comma, "&", capitalized_login_name);
+ g_free (part_before_comma);
+ }
+
+
+ if (g_strcmp0 (real_name, NULL) == 0
+ || g_strcmp0 (name, real_name) == 0
+ || g_strcmp0 (capitalized_login_name, real_name) == 0)
+ {
+ g_free (real_name);
+ real_name = NULL;
+ }
+
+ g_free (capitalized_login_name);
+
+ return real_name;
}
static gboolean
-get_group_id_from_group_name (const char *group_name, uid_t *gid)
+get_group_id_from_group_name (const char *group_name,
+ uid_t *gid)
{
- struct group *group;
+ struct group *group;
- g_assert (gid != NULL);
+ g_assert (gid != NULL);
- group = getgrnam (group_name);
+ group = getgrnam (group_name);
- if (group == NULL) {
- return FALSE;
- }
+ if (group == NULL)
+ {
+ return FALSE;
+ }
- *gid = group->gr_gid;
+ *gid = group->gr_gid;
- return TRUE;
+ return TRUE;
}
static gboolean
-get_ids_from_user_name (const char *user_name, uid_t *uid, uid_t *gid)
+get_ids_from_user_name (const char *user_name,
+ uid_t *uid,
+ uid_t *gid)
{
- struct passwd *password_info;
+ struct passwd *password_info;
- g_assert (uid != NULL || gid != NULL);
+ g_assert (uid != NULL || gid != NULL);
- password_info = getpwnam (user_name);
+ password_info = getpwnam (user_name);
- if (password_info == NULL) {
- return FALSE;
- }
+ if (password_info == NULL)
+ {
+ return FALSE;
+ }
- if (uid != NULL) {
- *uid = password_info->pw_uid;
- }
+ if (uid != NULL)
+ {
+ *uid = password_info->pw_uid;
+ }
- if (gid != NULL) {
- *gid = password_info->pw_gid;
- }
+ if (gid != NULL)
+ {
+ *gid = password_info->pw_gid;
+ }
- return TRUE;
+ return TRUE;
}
static gboolean
-get_user_id_from_user_name (const char *user_name, uid_t *id)
+get_user_id_from_user_name (const char *user_name,
+ uid_t *id)
{
- return get_ids_from_user_name (user_name, id, NULL);
+ return get_ids_from_user_name (user_name, id, NULL);
}
static gboolean
-get_id_from_digit_string (const char *digit_string, uid_t *id)
+get_id_from_digit_string (const char *digit_string,
+ uid_t *id)
{
- long scanned_id;
- char c;
+ long scanned_id;
+ char c;
- g_assert (id != NULL);
+ g_assert (id != NULL);
- /* Only accept string if it has one integer with nothing
- * afterwards.
- */
- if (sscanf (digit_string, "%ld%c", &scanned_id, &c) != 1) {
- return FALSE;
- }
- *id = scanned_id;
- return TRUE;
+ /* Only accept string if it has one integer with nothing
+ * afterwards.
+ */
+ if (sscanf (digit_string, "%ld%c", &scanned_id, &c) != 1)
+ {
+ return FALSE;
+ }
+ *id = scanned_id;
+ return TRUE;
}
/**
* nautilus_file_can_get_owner:
- *
+ *
* Check whether the owner a file is determinable.
* This might not be the case for files on non-UNIX file systems.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: TRUE if the owner is valid.
*/
gboolean
nautilus_file_can_get_owner (NautilusFile *file)
{
- /* Before we have info on a file, the owner is unknown. */
- return file->details->uid != -1;
+ /* Before we have info on a file, the owner is unknown. */
+ return file->details->uid != -1;
}
/**
* nautilus_file_get_owner_name:
- *
+ *
* Get the user name of the file's owner. If the owner has no
* name, returns the userid as a string. The caller is responsible
* for g_free-ing this string.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: A newly-allocated string.
*/
char *
nautilus_file_get_owner_name (NautilusFile *file)
{
- return nautilus_file_get_owner_as_string (file, FALSE);
+ return nautilus_file_get_owner_as_string (file, FALSE);
}
/**
* nautilus_file_can_set_owner:
- *
+ *
* Check whether the current user is allowed to change
* the owner of a file.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: TRUE if the current user can change the
* owner of @file, FALSE otherwise. It's always possible
* that when you actually try to do it, you will fail.
@@ -5732,24 +6450,25 @@ nautilus_file_get_owner_name (NautilusFile *file)
gboolean
nautilus_file_can_set_owner (NautilusFile *file)
{
- /* Not allowed to set the owner if we can't
- * even read it. This can happen on non-UNIX file
- * systems.
- */
- if (!nautilus_file_can_get_owner (file)) {
- return FALSE;
- }
+ /* Not allowed to set the owner if we can't
+ * even read it. This can happen on non-UNIX file
+ * systems.
+ */
+ if (!nautilus_file_can_get_owner (file))
+ {
+ return FALSE;
+ }
- /* Only root is also allowed to set the owner. */
- return geteuid() == 0;
+ /* Only root is also allowed to set the owner. */
+ return geteuid () == 0;
}
/**
* nautilus_file_set_owner:
- *
+ *
* Set the owner of a file. This will only have any effect if
* nautilus_file_can_set_owner returns TRUE.
- *
+ *
* @file: The file in question.
* @user_name_or_id: The user name to set the owner to.
* If the string does not match any user name, and the
@@ -5759,154 +6478,162 @@ nautilus_file_can_set_owner (NautilusFile *file)
* @callback_data: Parameter passed back with callback function.
*/
void
-nautilus_file_set_owner (NautilusFile *file,
- const char *user_name_or_id,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- GError *error;
- GFileInfo *info;
- uid_t new_id;
-
- if (!nautilus_file_can_set_owner (file)) {
- /* Claim that something changed even if the permission
- * change failed. This makes it easier for some
- * clients who see the "reverting" to the old owner as
- * "changing back".
- */
- nautilus_file_changed (file);
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Not allowed to set owner"));
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
- return;
- }
-
- /* If no match treating user_name_or_id as name, try treating
- * it as id.
- */
- if (!get_user_id_from_user_name (user_name_or_id, &new_id)
- && !get_id_from_digit_string (user_name_or_id, &new_id)) {
- /* Claim that something changed even if the permission
- * change failed. This makes it easier for some
- * clients who see the "reverting" to the old owner as
- * "changing back".
- */
- nautilus_file_changed (file);
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Specified owner '%s' doesn't exist"), user_name_or_id);
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
- return;
- }
-
- /* Test the owner-hasn't-changed case explicitly because we
- * don't want to send the file-changed signal if nothing
- * changed.
- */
- if (new_id == (uid_t) file->details->uid) {
- (* callback) (file, NULL, NULL, callback_data);
- return;
- }
-
- if (!nautilus_file_undo_manager_is_operating ()) {
- NautilusFileUndoInfo *undo_info;
- char* current_owner;
-
- current_owner = nautilus_file_get_owner_as_string (file, FALSE);
-
- undo_info = nautilus_file_undo_info_ownership_new (NAUTILUS_FILE_UNDO_OP_CHANGE_OWNER,
- nautilus_file_get_location (file),
- current_owner,
- user_name_or_id);
- nautilus_file_undo_manager_set_action (undo_info);
-
- g_free (current_owner);
- }
-
- info = g_file_info_new ();
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_UID, new_id);
- nautilus_file_set_attributes (file, info, callback, callback_data);
- g_object_unref (info);
+nautilus_file_set_owner (NautilusFile *file,
+ const char *user_name_or_id,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GError *error;
+ GFileInfo *info;
+ uid_t new_id;
+
+ if (!nautilus_file_can_set_owner (file))
+ {
+ /* Claim that something changed even if the permission
+ * change failed. This makes it easier for some
+ * clients who see the "reverting" to the old owner as
+ * "changing back".
+ */
+ nautilus_file_changed (file);
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
+ _("Not allowed to set owner"));
+ (*callback)(file, NULL, error, callback_data);
+ g_error_free (error);
+ return;
+ }
+
+ /* If no match treating user_name_or_id as name, try treating
+ * it as id.
+ */
+ if (!get_user_id_from_user_name (user_name_or_id, &new_id)
+ && !get_id_from_digit_string (user_name_or_id, &new_id))
+ {
+ /* Claim that something changed even if the permission
+ * change failed. This makes it easier for some
+ * clients who see the "reverting" to the old owner as
+ * "changing back".
+ */
+ nautilus_file_changed (file);
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+ _("Specified owner '%s' doesn't exist"), user_name_or_id);
+ (*callback)(file, NULL, error, callback_data);
+ g_error_free (error);
+ return;
+ }
+
+ /* Test the owner-hasn't-changed case explicitly because we
+ * don't want to send the file-changed signal if nothing
+ * changed.
+ */
+ if (new_id == (uid_t) file->details->uid)
+ {
+ (*callback)(file, NULL, NULL, callback_data);
+ return;
+ }
+
+ if (!nautilus_file_undo_manager_is_operating ())
+ {
+ NautilusFileUndoInfo *undo_info;
+ char *current_owner;
+
+ current_owner = nautilus_file_get_owner_as_string (file, FALSE);
+
+ undo_info = nautilus_file_undo_info_ownership_new (NAUTILUS_FILE_UNDO_OP_CHANGE_OWNER,
+ nautilus_file_get_location (file),
+ current_owner,
+ user_name_or_id);
+ nautilus_file_undo_manager_set_action (undo_info);
+
+ g_free (current_owner);
+ }
+
+ info = g_file_info_new ();
+ g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_UID, new_id);
+ nautilus_file_set_attributes (file, info, callback, callback_data);
+ g_object_unref (info);
}
/**
* nautilus_get_user_names:
- *
- * Get a list of user names. For users with a different associated
- * "real name", the real name follows the standard user name, separated
- * by a carriage return. The caller is responsible for freeing this list
+ *
+ * Get a list of user names. For users with a different associated
+ * "real name", the real name follows the standard user name, separated
+ * by a carriage return. The caller is responsible for freeing this list
* and its contents.
*/
GList *
nautilus_get_user_names (void)
{
- GList *list;
- char *real_name, *name;
- struct passwd *user;
+ GList *list;
+ char *real_name, *name;
+ struct passwd *user;
+
+ list = NULL;
- list = NULL;
-
- setpwent ();
+ setpwent ();
- while ((user = getpwent ()) != NULL) {
- real_name = get_real_name (user->pw_name, user->pw_gecos);
- if (real_name != NULL) {
- name = g_strconcat (user->pw_name, "\n", real_name, NULL);
- } else {
- name = g_strdup (user->pw_name);
- }
- g_free (real_name);
- list = g_list_prepend (list, name);
- }
+ while ((user = getpwent ()) != NULL)
+ {
+ real_name = get_real_name (user->pw_name, user->pw_gecos);
+ if (real_name != NULL)
+ {
+ name = g_strconcat (user->pw_name, "\n", real_name, NULL);
+ }
+ else
+ {
+ name = g_strdup (user->pw_name);
+ }
+ g_free (real_name);
+ list = g_list_prepend (list, name);
+ }
- endpwent ();
+ endpwent ();
- return g_list_sort (list, (GCompareFunc) g_utf8_collate);
+ return g_list_sort (list, (GCompareFunc) g_utf8_collate);
}
/**
* nautilus_file_can_get_group:
- *
+ *
* Check whether the group a file is determinable.
* This might not be the case for files on non-UNIX file systems.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: TRUE if the group is valid.
*/
gboolean
nautilus_file_can_get_group (NautilusFile *file)
{
- /* Before we have info on a file, the group is unknown. */
- return file->details->gid != -1;
+ /* Before we have info on a file, the group is unknown. */
+ return file->details->gid != -1;
}
/**
* nautilus_file_get_group_name:
- *
+ *
* Get the name of the file's group. If the group has no
* name, returns the groupid as a string. The caller is responsible
* for g_free-ing this string.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: A newly-allocated string.
**/
char *
nautilus_file_get_group_name (NautilusFile *file)
{
- return g_strdup (eel_ref_str_peek (file->details->group));
+ return g_strdup (eel_ref_str_peek (file->details->group));
}
/**
* nautilus_file_can_set_group:
- *
+ *
* Check whether the current user is allowed to change
* the group of a file.
- *
+ *
* @file: The file in question.
- *
+ *
* Return value: TRUE if the current user can change the
* group of @file, FALSE otherwise. It's always possible
* that when you actually try to do it, you will fail.
@@ -5914,31 +6641,34 @@ nautilus_file_get_group_name (NautilusFile *file)
gboolean
nautilus_file_can_set_group (NautilusFile *file)
{
- uid_t user_id;
+ uid_t user_id;
- /* Not allowed to set the permissions if we can't
- * even read them. This can happen on non-UNIX file
- * systems.
- */
- if (!nautilus_file_can_get_group (file)) {
- return FALSE;
- }
+ /* Not allowed to set the permissions if we can't
+ * even read them. This can happen on non-UNIX file
+ * systems.
+ */
+ if (!nautilus_file_can_get_group (file))
+ {
+ return FALSE;
+ }
- /* Check the user. */
- user_id = geteuid();
+ /* Check the user. */
+ user_id = geteuid ();
- /* Owner is allowed to set group (with restrictions). */
- if (user_id == (uid_t) file->details->uid) {
- return TRUE;
- }
+ /* Owner is allowed to set group (with restrictions). */
+ if (user_id == (uid_t) file->details->uid)
+ {
+ return TRUE;
+ }
- /* Root is also allowed to set group. */
- if (user_id == 0) {
- return TRUE;
- }
+ /* Root is also allowed to set group. */
+ if (user_id == 0)
+ {
+ return TRUE;
+ }
- /* Nobody else is allowed. */
- return FALSE;
+ /* Nobody else is allowed. */
+ return FALSE;
}
/* Get a list of group names, filtered to only the ones
@@ -5948,90 +6678,101 @@ nautilus_file_can_set_group (NautilusFile *file)
static GList *
nautilus_get_group_names_for_user (void)
{
- GList *list;
- struct group *group;
- int count, i;
- gid_t gid_list[NGROUPS_MAX + 1];
-
+ GList *list;
+ struct group *group;
+ int count, i;
+ gid_t gid_list[NGROUPS_MAX + 1];
+
+
+ list = NULL;
- list = NULL;
+ count = getgroups (NGROUPS_MAX + 1, gid_list);
+ for (i = 0; i < count; i++)
+ {
+ group = getgrgid (gid_list[i]);
+ if (group == NULL)
+ {
+ break;
+ }
- count = getgroups (NGROUPS_MAX + 1, gid_list);
- for (i = 0; i < count; i++) {
- group = getgrgid (gid_list[i]);
- if (group == NULL)
- break;
-
- list = g_list_prepend (list, g_strdup (group->gr_name));
- }
+ list = g_list_prepend (list, g_strdup (group->gr_name));
+ }
- return g_list_sort (list, (GCompareFunc) g_utf8_collate);
+ return g_list_sort (list, (GCompareFunc) g_utf8_collate);
}
/**
* nautilus_get_group_names:
- *
+ *
* Get a list of all group names.
*/
GList *
nautilus_get_all_group_names (void)
{
- GList *list;
- struct group *group;
-
- list = NULL;
+ GList *list;
+ struct group *group;
+
+ list = NULL;
+
+ setgrent ();
+
+ while ((group = getgrent ()) != NULL)
+ {
+ list = g_list_prepend (list, g_strdup (group->gr_name));
+ }
+
+ endgrent ();
- setgrent ();
-
- while ((group = getgrent ()) != NULL)
- list = g_list_prepend (list, g_strdup (group->gr_name));
-
- endgrent ();
-
- return g_list_sort (list, (GCompareFunc) g_utf8_collate);
+ return g_list_sort (list, (GCompareFunc) g_utf8_collate);
}
/**
* nautilus_file_get_settable_group_names:
- *
+ *
* Get a list of all group names that the current user
* can set the group of a specific file to.
- *
+ *
* @file: The NautilusFile in question.
*/
GList *
nautilus_file_get_settable_group_names (NautilusFile *file)
{
- uid_t user_id;
- GList *result;
+ uid_t user_id;
+ GList *result;
- if (!nautilus_file_can_set_group (file)) {
- return NULL;
- }
+ if (!nautilus_file_can_set_group (file))
+ {
+ return NULL;
+ }
- /* Check the user. */
- user_id = geteuid();
+ /* Check the user. */
+ user_id = geteuid ();
- if (user_id == 0) {
- /* Root is allowed to set group to anything. */
- result = nautilus_get_all_group_names ();
- } else if (user_id == (uid_t) file->details->uid) {
- /* Owner is allowed to set group to any that owner is member of. */
- result = nautilus_get_group_names_for_user ();
- } else {
- g_warning ("unhandled case in nautilus_get_settable_group_names");
- result = NULL;
- }
+ if (user_id == 0)
+ {
+ /* Root is allowed to set group to anything. */
+ result = nautilus_get_all_group_names ();
+ }
+ else if (user_id == (uid_t) file->details->uid)
+ {
+ /* Owner is allowed to set group to any that owner is member of. */
+ result = nautilus_get_group_names_for_user ();
+ }
+ else
+ {
+ g_warning ("unhandled case in nautilus_get_settable_group_names");
+ result = NULL;
+ }
- return result;
+ return result;
}
/**
* nautilus_file_set_group:
- *
+ *
* Set the group of a file. This will only have any effect if
* nautilus_file_can_set_group returns TRUE.
- *
+ *
* @file: The file in question.
* @group_name_or_id: The group name to set the owner to.
* If the string does not match any group name, and the
@@ -6041,423 +6782,462 @@ nautilus_file_get_settable_group_names (NautilusFile *file)
* @callback_data: Parameter passed back with callback function.
*/
void
-nautilus_file_set_group (NautilusFile *file,
- const char *group_name_or_id,
- NautilusFileOperationCallback callback,
- gpointer callback_data)
-{
- GError *error;
- GFileInfo *info;
- uid_t new_id;
-
- if (!nautilus_file_can_set_group (file)) {
- /* Claim that something changed even if the group
- * change failed. This makes it easier for some
- * clients who see the "reverting" to the old group as
- * "changing back".
- */
- nautilus_file_changed (file);
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
- _("Not allowed to set group"));
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
- return;
- }
-
- /* If no match treating group_name_or_id as name, try treating
- * it as id.
- */
- if (!get_group_id_from_group_name (group_name_or_id, &new_id)
- && !get_id_from_digit_string (group_name_or_id, &new_id)) {
- /* Claim that something changed even if the group
- * change failed. This makes it easier for some
- * clients who see the "reverting" to the old group as
- * "changing back".
- */
- nautilus_file_changed (file);
- error = g_error_new (G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
- _("Specified group '%s' doesn't exist"), group_name_or_id);
- (* callback) (file, NULL, error, callback_data);
- g_error_free (error);
- return;
- }
-
- if (new_id == (gid_t) file->details->gid) {
- (* callback) (file, NULL, NULL, callback_data);
- return;
- }
-
- if (!nautilus_file_undo_manager_is_operating ()) {
- NautilusFileUndoInfo *undo_info;
- char *current_group;
-
- current_group = nautilus_file_get_group_name (file);
- undo_info = nautilus_file_undo_info_ownership_new (NAUTILUS_FILE_UNDO_OP_CHANGE_GROUP,
- nautilus_file_get_location (file),
- current_group,
- group_name_or_id);
- nautilus_file_undo_manager_set_action (undo_info);
-
- g_free (current_group);
- }
-
- info = g_file_info_new ();
- g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_GID, new_id);
- nautilus_file_set_attributes (file, info, callback, callback_data);
- g_object_unref (info);
+nautilus_file_set_group (NautilusFile *file,
+ const char *group_name_or_id,
+ NautilusFileOperationCallback callback,
+ gpointer callback_data)
+{
+ GError *error;
+ GFileInfo *info;
+ uid_t new_id;
+
+ if (!nautilus_file_can_set_group (file))
+ {
+ /* Claim that something changed even if the group
+ * change failed. This makes it easier for some
+ * clients who see the "reverting" to the old group as
+ * "changing back".
+ */
+ nautilus_file_changed (file);
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_PERMISSION_DENIED,
+ _("Not allowed to set group"));
+ (*callback)(file, NULL, error, callback_data);
+ g_error_free (error);
+ return;
+ }
+
+ /* If no match treating group_name_or_id as name, try treating
+ * it as id.
+ */
+ if (!get_group_id_from_group_name (group_name_or_id, &new_id)
+ && !get_id_from_digit_string (group_name_or_id, &new_id))
+ {
+ /* Claim that something changed even if the group
+ * change failed. This makes it easier for some
+ * clients who see the "reverting" to the old group as
+ * "changing back".
+ */
+ nautilus_file_changed (file);
+ error = g_error_new (G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
+ _("Specified group '%s' doesn't exist"), group_name_or_id);
+ (*callback)(file, NULL, error, callback_data);
+ g_error_free (error);
+ return;
+ }
+
+ if (new_id == (gid_t) file->details->gid)
+ {
+ (*callback)(file, NULL, NULL, callback_data);
+ return;
+ }
+
+ if (!nautilus_file_undo_manager_is_operating ())
+ {
+ NautilusFileUndoInfo *undo_info;
+ char *current_group;
+
+ current_group = nautilus_file_get_group_name (file);
+ undo_info = nautilus_file_undo_info_ownership_new (NAUTILUS_FILE_UNDO_OP_CHANGE_GROUP,
+ nautilus_file_get_location (file),
+ current_group,
+ group_name_or_id);
+ nautilus_file_undo_manager_set_action (undo_info);
+
+ g_free (current_group);
+ }
+
+ info = g_file_info_new ();
+ g_file_info_set_attribute_uint32 (info, G_FILE_ATTRIBUTE_UNIX_GID, new_id);
+ nautilus_file_set_attributes (file, info, callback, callback_data);
+ g_object_unref (info);
}
/**
* nautilus_file_get_octal_permissions_as_string:
- *
+ *
* Get a user-displayable string representing a file's permissions
* as an octal number. The caller
* is responsible for g_free-ing this string.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_octal_permissions_as_string (NautilusFile *file)
{
- guint32 permissions;
+ guint32 permissions;
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (NAUTILUS_IS_FILE (file));
- if (!nautilus_file_can_get_permissions (file)) {
- return NULL;
- }
+ if (!nautilus_file_can_get_permissions (file))
+ {
+ return NULL;
+ }
- permissions = file->details->permissions;
- return g_strdup_printf ("%03o", permissions);
+ permissions = file->details->permissions;
+ return g_strdup_printf ("%03o", permissions);
}
/**
* nautilus_file_get_permissions_as_string:
- *
+ *
* Get a user-displayable string representing a file's permissions. The caller
* is responsible for g_free-ing this string.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_permissions_as_string (NautilusFile *file)
{
- guint32 permissions;
- gboolean is_directory;
- gboolean is_link;
- gboolean suid, sgid, sticky;
-
- if (!nautilus_file_can_get_permissions (file)) {
- return NULL;
- }
-
- g_assert (NAUTILUS_IS_FILE (file));
-
- permissions = file->details->permissions;
- is_directory = nautilus_file_is_directory (file);
- is_link = nautilus_file_is_symbolic_link (file);
-
- /* We use ls conventions for displaying these three obscure flags */
- suid = permissions & S_ISUID;
- sgid = permissions & S_ISGID;
- sticky = permissions & S_ISVTX;
-
- return g_strdup_printf ("%c%c%c%c%c%c%c%c%c%c",
- is_link ? 'l' : is_directory ? 'd' : '-',
- permissions & S_IRUSR ? 'r' : '-',
- permissions & S_IWUSR ? 'w' : '-',
- permissions & S_IXUSR
- ? (suid ? 's' : 'x')
- : (suid ? 'S' : '-'),
- permissions & S_IRGRP ? 'r' : '-',
- permissions & S_IWGRP ? 'w' : '-',
- permissions & S_IXGRP
- ? (sgid ? 's' : 'x')
- : (sgid ? 'S' : '-'),
- permissions & S_IROTH ? 'r' : '-',
- permissions & S_IWOTH ? 'w' : '-',
- permissions & S_IXOTH
- ? (sticky ? 't' : 'x')
- : (sticky ? 'T' : '-'));
+ guint32 permissions;
+ gboolean is_directory;
+ gboolean is_link;
+ gboolean suid, sgid, sticky;
+
+ if (!nautilus_file_can_get_permissions (file))
+ {
+ return NULL;
+ }
+
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ permissions = file->details->permissions;
+ is_directory = nautilus_file_is_directory (file);
+ is_link = nautilus_file_is_symbolic_link (file);
+
+ /* We use ls conventions for displaying these three obscure flags */
+ suid = permissions & S_ISUID;
+ sgid = permissions & S_ISGID;
+ sticky = permissions & S_ISVTX;
+
+ return g_strdup_printf ("%c%c%c%c%c%c%c%c%c%c",
+ is_link ? 'l' : is_directory ? 'd' : '-',
+ permissions & S_IRUSR ? 'r' : '-',
+ permissions & S_IWUSR ? 'w' : '-',
+ permissions & S_IXUSR
+ ? (suid ? 's' : 'x')
+ : (suid ? 'S' : '-'),
+ permissions & S_IRGRP ? 'r' : '-',
+ permissions & S_IWGRP ? 'w' : '-',
+ permissions & S_IXGRP
+ ? (sgid ? 's' : 'x')
+ : (sgid ? 'S' : '-'),
+ permissions & S_IROTH ? 'r' : '-',
+ permissions & S_IWOTH ? 'w' : '-',
+ permissions & S_IXOTH
+ ? (sticky ? 't' : 'x')
+ : (sticky ? 'T' : '-'));
}
/**
* nautilus_file_get_owner_as_string:
- *
+ *
* Get a user-displayable string representing a file's owner. The caller
* is responsible for g_free-ing this string.
* @file: NautilusFile representing the file in question.
* @include_real_name: Whether or not to append the real name (if any)
* for this user after the user name.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
-nautilus_file_get_owner_as_string (NautilusFile *file, gboolean include_real_name)
-{
- char *user_name;
-
- /* Before we have info on a file, the owner is unknown. */
- if (file->details->owner == NULL &&
- file->details->owner_real == NULL) {
- return NULL;
- }
-
- if (include_real_name &&
- file->details->uid == getuid ()) {
- /* Translators: "Me" is used to indicate the file is owned by me (the current user) */
- user_name = g_strdup (_("Me"));
- } else if (file->details->owner_real == NULL) {
- user_name = g_strdup (eel_ref_str_peek (file->details->owner));
- } else if (file->details->owner == NULL) {
- user_name = g_strdup (eel_ref_str_peek (file->details->owner_real));
- } else if (include_real_name &&
- strcmp (eel_ref_str_peek (file->details->owner), eel_ref_str_peek (file->details->owner_real)) != 0) {
- user_name = g_strdup (eel_ref_str_peek (file->details->owner_real));
- } else {
- user_name = g_strdup (eel_ref_str_peek (file->details->owner));
- }
-
- return user_name;
+nautilus_file_get_owner_as_string (NautilusFile *file,
+ gboolean include_real_name)
+{
+ char *user_name;
+
+ /* Before we have info on a file, the owner is unknown. */
+ if (file->details->owner == NULL &&
+ file->details->owner_real == NULL)
+ {
+ return NULL;
+ }
+
+ if (include_real_name &&
+ file->details->uid == getuid ())
+ {
+ /* Translators: "Me" is used to indicate the file is owned by me (the current user) */
+ user_name = g_strdup (_("Me"));
+ }
+ else if (file->details->owner_real == NULL)
+ {
+ user_name = g_strdup (eel_ref_str_peek (file->details->owner));
+ }
+ else if (file->details->owner == NULL)
+ {
+ user_name = g_strdup (eel_ref_str_peek (file->details->owner_real));
+ }
+ else if (include_real_name &&
+ strcmp (eel_ref_str_peek (file->details->owner), eel_ref_str_peek (file->details->owner_real)) != 0)
+ {
+ user_name = g_strdup (eel_ref_str_peek (file->details->owner_real));
+ }
+ else
+ {
+ user_name = g_strdup (eel_ref_str_peek (file->details->owner));
+ }
+
+ return user_name;
}
static char *
-format_item_count_for_display (guint item_count,
- gboolean includes_directories,
- gboolean includes_files)
+format_item_count_for_display (guint item_count,
+ gboolean includes_directories,
+ gboolean includes_files)
{
- g_assert (includes_directories || includes_files);
+ g_assert (includes_directories || includes_files);
- return g_strdup_printf (includes_directories
- ? (includes_files
- ? ngettext ("%'u item", "%'u items", item_count)
- : ngettext ("%'u folder", "%'u folders", item_count))
- : ngettext ("%'u file", "%'u files", item_count), item_count);
+ return g_strdup_printf (includes_directories
+ ? (includes_files
+ ? ngettext ("%'u item", "%'u items", item_count)
+ : ngettext ("%'u folder", "%'u folders", item_count))
+ : ngettext ("%'u file", "%'u files", item_count), item_count);
}
/**
* nautilus_file_get_size_as_string:
- *
+ *
* Get a user-displayable string representing a file size. The caller
* is responsible for g_free-ing this string. The string is an item
* count for directories.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_size_as_string (NautilusFile *file)
{
- guint item_count;
- gboolean count_unreadable;
-
- if (file == NULL) {
- return NULL;
- }
-
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (nautilus_file_is_directory (file)) {
- if (!nautilus_file_get_directory_item_count (file, &item_count, &count_unreadable)) {
- return NULL;
- }
- return format_item_count_for_display (item_count, TRUE, TRUE);
- }
-
- if (file->details->size == -1) {
- return NULL;
- }
- return g_format_size (file->details->size);
+ guint item_count;
+ gboolean count_unreadable;
+
+ if (file == NULL)
+ {
+ return NULL;
+ }
+
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ if (nautilus_file_is_directory (file))
+ {
+ if (!nautilus_file_get_directory_item_count (file, &item_count, &count_unreadable))
+ {
+ return NULL;
+ }
+ return format_item_count_for_display (item_count, TRUE, TRUE);
+ }
+
+ if (file->details->size == -1)
+ {
+ return NULL;
+ }
+ return g_format_size (file->details->size);
}
/**
* nautilus_file_get_size_as_string_with_real_size:
- *
+ *
* Get a user-displayable string representing a file size. The caller
* is responsible for g_free-ing this string. The string is an item
* count for directories.
* This function adds the real size in the string.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_size_as_string_with_real_size (NautilusFile *file)
{
- guint item_count;
- gboolean count_unreadable;
+ guint item_count;
+ gboolean count_unreadable;
+
+ if (file == NULL)
+ {
+ return NULL;
+ }
+
+ g_assert (NAUTILUS_IS_FILE (file));
- if (file == NULL) {
- return NULL;
- }
-
- g_assert (NAUTILUS_IS_FILE (file));
-
- if (nautilus_file_is_directory (file)) {
- if (!nautilus_file_get_directory_item_count (file, &item_count, &count_unreadable)) {
- return NULL;
- }
- return format_item_count_for_display (item_count, TRUE, TRUE);
- }
-
- if (file->details->size == -1) {
- return NULL;
- }
+ if (nautilus_file_is_directory (file))
+ {
+ if (!nautilus_file_get_directory_item_count (file, &item_count, &count_unreadable))
+ {
+ return NULL;
+ }
+ return format_item_count_for_display (item_count, TRUE, TRUE);
+ }
+
+ if (file->details->size == -1)
+ {
+ return NULL;
+ }
- return g_format_size_full (file->details->size, G_FORMAT_SIZE_LONG_FORMAT);
+ return g_format_size_full (file->details->size, G_FORMAT_SIZE_LONG_FORMAT);
}
static char *
nautilus_file_get_deep_count_as_string_internal (NautilusFile *file,
- gboolean report_size,
- gboolean report_directory_count,
- gboolean report_file_count)
-{
- NautilusRequestStatus status;
- guint directory_count;
- guint file_count;
- guint unreadable_count;
- guint total_count;
- goffset total_size;
-
- /* Must ask for size or some kind of count, but not both. */
- g_assert (!report_size || (!report_directory_count && !report_file_count));
- g_assert (report_size || report_directory_count || report_file_count);
-
- if (file == NULL) {
- return NULL;
- }
-
- g_assert (NAUTILUS_IS_FILE (file));
- g_assert (nautilus_file_is_directory (file));
-
- status = nautilus_file_get_deep_counts
- (file, &directory_count, &file_count, &unreadable_count, &total_size, FALSE);
-
- /* Check whether any info is available. */
- if (status == NAUTILUS_REQUEST_NOT_STARTED) {
- return NULL;
- }
-
- total_count = file_count + directory_count;
-
- if (total_count == 0) {
- switch (status) {
- case NAUTILUS_REQUEST_IN_PROGRESS:
- /* Don't return confident "zero" until we're finished looking,
- * because of next case.
- */
- return NULL;
- case NAUTILUS_REQUEST_DONE:
- /* Don't return "zero" if we there were contents but we couldn't read them. */
- if (unreadable_count != 0) {
- return NULL;
- }
- default: break;
- }
- }
-
- /* Note that we don't distinguish the "everything was readable" case
- * from the "some things but not everything was readable" case here.
- * Callers can distinguish them using nautilus_file_get_deep_counts
- * directly if desired.
- */
- if (report_size) {
- return g_format_size (total_size);
- }
-
- return format_item_count_for_display (report_directory_count
- ? (report_file_count ? total_count : directory_count)
- : file_count,
- report_directory_count, report_file_count);
+ gboolean report_size,
+ gboolean report_directory_count,
+ gboolean report_file_count)
+{
+ NautilusRequestStatus status;
+ guint directory_count;
+ guint file_count;
+ guint unreadable_count;
+ guint total_count;
+ goffset total_size;
+
+ /* Must ask for size or some kind of count, but not both. */
+ g_assert (!report_size || (!report_directory_count && !report_file_count));
+ g_assert (report_size || report_directory_count || report_file_count);
+
+ if (file == NULL)
+ {
+ return NULL;
+ }
+
+ g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (nautilus_file_is_directory (file));
+
+ status = nautilus_file_get_deep_counts
+ (file, &directory_count, &file_count, &unreadable_count, &total_size, FALSE);
+
+ /* Check whether any info is available. */
+ if (status == NAUTILUS_REQUEST_NOT_STARTED)
+ {
+ return NULL;
+ }
+
+ total_count = file_count + directory_count;
+
+ if (total_count == 0)
+ {
+ switch (status)
+ {
+ case NAUTILUS_REQUEST_IN_PROGRESS:
+ {
+ /* Don't return confident "zero" until we're finished looking,
+ * because of next case.
+ */
+ return NULL;
+ }
+
+ case NAUTILUS_REQUEST_DONE:
+ {
+ /* Don't return "zero" if we there were contents but we couldn't read them. */
+ if (unreadable_count != 0)
+ {
+ return NULL;
+ }
+ }
+
+ default:
+ {}
+ break;
+ }
+ }
+
+ /* Note that we don't distinguish the "everything was readable" case
+ * from the "some things but not everything was readable" case here.
+ * Callers can distinguish them using nautilus_file_get_deep_counts
+ * directly if desired.
+ */
+ if (report_size)
+ {
+ return g_format_size (total_size);
+ }
+
+ return format_item_count_for_display (report_directory_count
+ ? (report_file_count ? total_count : directory_count)
+ : file_count,
+ report_directory_count, report_file_count);
}
/**
* nautilus_file_get_deep_size_as_string:
- *
+ *
* Get a user-displayable string representing the size of all contained
* items (only makes sense for directories). The caller
* is responsible for g_free-ing this string.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_deep_size_as_string (NautilusFile *file)
{
- return nautilus_file_get_deep_count_as_string_internal (file, TRUE, FALSE, FALSE);
+ return nautilus_file_get_deep_count_as_string_internal (file, TRUE, FALSE, FALSE);
}
/**
* nautilus_file_get_deep_total_count_as_string:
- *
+ *
* Get a user-displayable string representing the count of all contained
* items (only makes sense for directories). The caller
* is responsible for g_free-ing this string.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_deep_total_count_as_string (NautilusFile *file)
{
- return nautilus_file_get_deep_count_as_string_internal (file, FALSE, TRUE, TRUE);
+ return nautilus_file_get_deep_count_as_string_internal (file, FALSE, TRUE, TRUE);
}
/**
* nautilus_file_get_deep_file_count_as_string:
- *
+ *
* Get a user-displayable string representing the count of all contained
* items, not including directories. It only makes sense to call this
* function on a directory. The caller
* is responsible for g_free-ing this string.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_deep_file_count_as_string (NautilusFile *file)
{
- return nautilus_file_get_deep_count_as_string_internal (file, FALSE, FALSE, TRUE);
+ return nautilus_file_get_deep_count_as_string_internal (file, FALSE, FALSE, TRUE);
}
/**
* nautilus_file_get_deep_directory_count_as_string:
- *
+ *
* Get a user-displayable string representing the count of all contained
* directories. It only makes sense to call this
* function on a directory. The caller
* is responsible for g_free-ing this string.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: Newly allocated string ready to display to the user.
- *
+ *
**/
static char *
nautilus_file_get_deep_directory_count_as_string (NautilusFile *file)
{
- return nautilus_file_get_deep_count_as_string_internal (file, FALSE, TRUE, FALSE);
+ return nautilus_file_get_deep_count_as_string_internal (file, FALSE, TRUE, FALSE);
}
/**
* nautilus_file_get_string_attribute:
- *
+ *
* Get a user-displayable string from a named attribute. Use g_free to
* free this string. If the value is unknown, returns NULL. You can call
* nautilus_file_get_string_attribute_with_default if you want a non-NULL
* default.
- *
+ *
* @file: NautilusFile representing the file in question.
* @attribute_name: The name of the desired attribute. The currently supported
* set includes "name", "type", "detailed_type", "mime_type", "size", "deep_size", "deep_directory_count",
@@ -6465,584 +7245,666 @@ nautilus_file_get_deep_directory_count_as_string (NautilusFile *file)
* "date_modified_full", "date_accessed_full",
* "owner", "group", "permissions", "octal_permissions", "uri", "where",
* "link_target", "volume", "free_space", "selinux_context", "trashed_on", "trashed_on_full", "trashed_orig_path"
- *
+ *
* Returns: Newly allocated string ready to display to the user, or NULL
* if the value is unknown or @attribute_name is not supported.
- *
+ *
**/
char *
-nautilus_file_get_string_attribute_q (NautilusFile *file, GQuark attribute_q)
-{
- char *extension_attribute;
-
- if (attribute_q == attribute_name_q) {
- return nautilus_file_get_display_name (file);
- }
- if (attribute_q == attribute_type_q) {
- return nautilus_file_get_type_as_string (file);
- }
- if (attribute_q == attribute_detailed_type_q) {
- return nautilus_file_get_detailed_type_as_string (file);
- }
- if (attribute_q == attribute_mime_type_q) {
- return nautilus_file_get_mime_type (file);
- }
- if (attribute_q == attribute_size_q) {
- return nautilus_file_get_size_as_string (file);
- }
- if (attribute_q == attribute_size_detail_q) {
- return nautilus_file_get_size_as_string_with_real_size (file);
- }
- if (attribute_q == attribute_deep_size_q) {
- return nautilus_file_get_deep_size_as_string (file);
- }
- if (attribute_q == attribute_deep_file_count_q) {
- return nautilus_file_get_deep_file_count_as_string (file);
- }
- if (attribute_q == attribute_deep_directory_count_q) {
- return nautilus_file_get_deep_directory_count_as_string (file);
- }
- if (attribute_q == attribute_deep_total_count_q) {
- return nautilus_file_get_deep_total_count_as_string (file);
- }
- if (attribute_q == attribute_trash_orig_path_q) {
- return nautilus_file_get_trash_original_file_parent_as_string (file);
- }
- if (attribute_q == attribute_date_modified_q) {
- return nautilus_file_get_date_as_string (file,
- NAUTILUS_DATE_TYPE_MODIFIED,
- NAUTILUS_DATE_FORMAT_REGULAR);
- }
- if (attribute_q == attribute_date_modified_full_q) {
- return nautilus_file_get_date_as_string (file,
- NAUTILUS_DATE_TYPE_MODIFIED,
- NAUTILUS_DATE_FORMAT_FULL);
- }
- if (attribute_q == attribute_date_modified_with_time_q) {
- return nautilus_file_get_date_as_string (file,
- NAUTILUS_DATE_TYPE_MODIFIED,
- NAUTILUS_DATE_FORMAT_REGULAR_WITH_TIME);
- }
- if (attribute_q == attribute_date_accessed_q) {
- return nautilus_file_get_date_as_string (file,
- NAUTILUS_DATE_TYPE_ACCESSED,
- NAUTILUS_DATE_FORMAT_REGULAR);
- }
- if (attribute_q == attribute_date_accessed_full_q) {
- return nautilus_file_get_date_as_string (file,
- NAUTILUS_DATE_TYPE_ACCESSED,
- NAUTILUS_DATE_FORMAT_FULL);
- }
- if (attribute_q == attribute_trashed_on_q) {
- return nautilus_file_get_date_as_string (file,
- NAUTILUS_DATE_TYPE_TRASHED,
- NAUTILUS_DATE_FORMAT_REGULAR);
- }
- if (attribute_q == attribute_trashed_on_full_q) {
- return nautilus_file_get_date_as_string (file,
- NAUTILUS_DATE_TYPE_TRASHED,
- NAUTILUS_DATE_FORMAT_FULL);
- }
- if (attribute_q == attribute_permissions_q) {
- return nautilus_file_get_permissions_as_string (file);
- }
- if (attribute_q == attribute_selinux_context_q) {
- return nautilus_file_get_selinux_context (file);
- }
- if (attribute_q == attribute_octal_permissions_q) {
- return nautilus_file_get_octal_permissions_as_string (file);
- }
- if (attribute_q == attribute_owner_q) {
- return nautilus_file_get_owner_as_string (file, TRUE);
- }
- if (attribute_q == attribute_group_q) {
- return nautilus_file_get_group_name (file);
- }
- if (attribute_q == attribute_uri_q) {
- return nautilus_file_get_uri (file);
- }
- if (attribute_q == attribute_where_q) {
- return nautilus_file_get_where_string (file);
- }
- if (attribute_q == attribute_link_target_q) {
- return nautilus_file_get_symbolic_link_target_path (file);
- }
- if (attribute_q == attribute_volume_q) {
- return nautilus_file_get_volume_name (file);
- }
- if (attribute_q == attribute_free_space_q) {
- return nautilus_file_get_volume_free_space (file);
- }
-
- extension_attribute = NULL;
-
- if (file->details->pending_extension_attributes) {
- extension_attribute = g_hash_table_lookup (file->details->pending_extension_attributes,
- GINT_TO_POINTER (attribute_q));
- }
-
- if (extension_attribute == NULL && file->details->extension_attributes) {
- extension_attribute = g_hash_table_lookup (file->details->extension_attributes,
- GINT_TO_POINTER (attribute_q));
- }
-
- return g_strdup (extension_attribute);
+nautilus_file_get_string_attribute_q (NautilusFile *file,
+ GQuark attribute_q)
+{
+ char *extension_attribute;
+
+ if (attribute_q == attribute_name_q)
+ {
+ return nautilus_file_get_display_name (file);
+ }
+ if (attribute_q == attribute_type_q)
+ {
+ return nautilus_file_get_type_as_string (file);
+ }
+ if (attribute_q == attribute_detailed_type_q)
+ {
+ return nautilus_file_get_detailed_type_as_string (file);
+ }
+ if (attribute_q == attribute_mime_type_q)
+ {
+ return nautilus_file_get_mime_type (file);
+ }
+ if (attribute_q == attribute_size_q)
+ {
+ return nautilus_file_get_size_as_string (file);
+ }
+ if (attribute_q == attribute_size_detail_q)
+ {
+ return nautilus_file_get_size_as_string_with_real_size (file);
+ }
+ if (attribute_q == attribute_deep_size_q)
+ {
+ return nautilus_file_get_deep_size_as_string (file);
+ }
+ if (attribute_q == attribute_deep_file_count_q)
+ {
+ return nautilus_file_get_deep_file_count_as_string (file);
+ }
+ if (attribute_q == attribute_deep_directory_count_q)
+ {
+ return nautilus_file_get_deep_directory_count_as_string (file);
+ }
+ if (attribute_q == attribute_deep_total_count_q)
+ {
+ return nautilus_file_get_deep_total_count_as_string (file);
+ }
+ if (attribute_q == attribute_trash_orig_path_q)
+ {
+ return nautilus_file_get_trash_original_file_parent_as_string (file);
+ }
+ if (attribute_q == attribute_date_modified_q)
+ {
+ return nautilus_file_get_date_as_string (file,
+ NAUTILUS_DATE_TYPE_MODIFIED,
+ NAUTILUS_DATE_FORMAT_REGULAR);
+ }
+ if (attribute_q == attribute_date_modified_full_q)
+ {
+ return nautilus_file_get_date_as_string (file,
+ NAUTILUS_DATE_TYPE_MODIFIED,
+ NAUTILUS_DATE_FORMAT_FULL);
+ }
+ if (attribute_q == attribute_date_modified_with_time_q)
+ {
+ return nautilus_file_get_date_as_string (file,
+ NAUTILUS_DATE_TYPE_MODIFIED,
+ NAUTILUS_DATE_FORMAT_REGULAR_WITH_TIME);
+ }
+ if (attribute_q == attribute_date_accessed_q)
+ {
+ return nautilus_file_get_date_as_string (file,
+ NAUTILUS_DATE_TYPE_ACCESSED,
+ NAUTILUS_DATE_FORMAT_REGULAR);
+ }
+ if (attribute_q == attribute_date_accessed_full_q)
+ {
+ return nautilus_file_get_date_as_string (file,
+ NAUTILUS_DATE_TYPE_ACCESSED,
+ NAUTILUS_DATE_FORMAT_FULL);
+ }
+ if (attribute_q == attribute_trashed_on_q)
+ {
+ return nautilus_file_get_date_as_string (file,
+ NAUTILUS_DATE_TYPE_TRASHED,
+ NAUTILUS_DATE_FORMAT_REGULAR);
+ }
+ if (attribute_q == attribute_trashed_on_full_q)
+ {
+ return nautilus_file_get_date_as_string (file,
+ NAUTILUS_DATE_TYPE_TRASHED,
+ NAUTILUS_DATE_FORMAT_FULL);
+ }
+ if (attribute_q == attribute_permissions_q)
+ {
+ return nautilus_file_get_permissions_as_string (file);
+ }
+ if (attribute_q == attribute_selinux_context_q)
+ {
+ return nautilus_file_get_selinux_context (file);
+ }
+ if (attribute_q == attribute_octal_permissions_q)
+ {
+ return nautilus_file_get_octal_permissions_as_string (file);
+ }
+ if (attribute_q == attribute_owner_q)
+ {
+ return nautilus_file_get_owner_as_string (file, TRUE);
+ }
+ if (attribute_q == attribute_group_q)
+ {
+ return nautilus_file_get_group_name (file);
+ }
+ if (attribute_q == attribute_uri_q)
+ {
+ return nautilus_file_get_uri (file);
+ }
+ if (attribute_q == attribute_where_q)
+ {
+ return nautilus_file_get_where_string (file);
+ }
+ if (attribute_q == attribute_link_target_q)
+ {
+ return nautilus_file_get_symbolic_link_target_path (file);
+ }
+ if (attribute_q == attribute_volume_q)
+ {
+ return nautilus_file_get_volume_name (file);
+ }
+ if (attribute_q == attribute_free_space_q)
+ {
+ return nautilus_file_get_volume_free_space (file);
+ }
+
+ extension_attribute = NULL;
+
+ if (file->details->pending_extension_attributes)
+ {
+ extension_attribute = g_hash_table_lookup (file->details->pending_extension_attributes,
+ GINT_TO_POINTER (attribute_q));
+ }
+
+ if (extension_attribute == NULL && file->details->extension_attributes)
+ {
+ extension_attribute = g_hash_table_lookup (file->details->extension_attributes,
+ GINT_TO_POINTER (attribute_q));
+ }
+
+ return g_strdup (extension_attribute);
}
char *
-nautilus_file_get_string_attribute (NautilusFile *file, const char *attribute_name)
+nautilus_file_get_string_attribute (NautilusFile *file,
+ const char *attribute_name)
{
- return nautilus_file_get_string_attribute_q (file, g_quark_from_string (attribute_name));
+ return nautilus_file_get_string_attribute_q (file, g_quark_from_string (attribute_name));
}
/**
* nautilus_file_get_string_attribute_with_default:
- *
+ *
* Get a user-displayable string from a named attribute. Use g_free to
* free this string. If the value is unknown, returns a string representing
* the unknown value, which varies with attribute. You can call
* nautilus_file_get_string_attribute if you want NULL instead of a default
* result.
- *
+ *
* @file: NautilusFile representing the file in question.
* @attribute_name: The name of the desired attribute. See the description of
* nautilus_file_get_string for the set of available attributes.
- *
+ *
* Returns: Newly allocated string ready to display to the user, or a string
* such as "unknown" if the value is unknown or @attribute_name is not supported.
- *
+ *
**/
char *
-nautilus_file_get_string_attribute_with_default_q (NautilusFile *file, GQuark attribute_q)
-{
- char *result;
- guint item_count;
- gboolean count_unreadable;
- NautilusRequestStatus status;
-
- result = nautilus_file_get_string_attribute_q (file, attribute_q);
- if (result != NULL) {
- return result;
- }
-
- /* Supply default values for the ones we know about. */
- /* FIXME bugzilla.gnome.org 40646:
- * Use hash table and switch statement or function pointers for speed?
- */
- if (attribute_q == attribute_size_q) {
- if (!nautilus_file_should_show_directory_item_count (file)) {
- return g_strdup ("--");
- }
- count_unreadable = FALSE;
- if (nautilus_file_is_directory (file)) {
- nautilus_file_get_directory_item_count (file, &item_count, &count_unreadable);
- }
- return g_strdup (count_unreadable ? _("? items") : "...");
- }
- if (attribute_q == attribute_deep_size_q) {
- status = nautilus_file_get_deep_counts (file, NULL, NULL, NULL, NULL, FALSE);
- if (status == NAUTILUS_REQUEST_DONE) {
- /* This means no contents at all were readable */
- return g_strdup (_("? bytes"));
- }
- return g_strdup ("...");
- }
- if (attribute_q == attribute_deep_file_count_q
- || attribute_q == attribute_deep_directory_count_q
- || attribute_q == attribute_deep_total_count_q) {
- status = nautilus_file_get_deep_counts (file, NULL, NULL, NULL, NULL, FALSE);
- if (status == NAUTILUS_REQUEST_DONE) {
- /* This means no contents at all were readable */
- return g_strdup (_("? items"));
- }
- return g_strdup ("...");
- }
- if (attribute_q == attribute_type_q
- || attribute_q == attribute_detailed_type_q
- || attribute_q == attribute_mime_type_q) {
- return g_strdup (_("Unknown"));
- }
- if (attribute_q == attribute_trashed_on_q) {
- /* If n/a */
- return g_strdup ("");
- }
- if (attribute_q == attribute_trash_orig_path_q) {
- /* If n/a */
- return g_strdup ("");
- }
-
- /* Fallback, use for both unknown attributes and attributes
- * for which we have no more appropriate default.
- */
- return g_strdup (_("unknown"));
+nautilus_file_get_string_attribute_with_default_q (NautilusFile *file,
+ GQuark attribute_q)
+{
+ char *result;
+ guint item_count;
+ gboolean count_unreadable;
+ NautilusRequestStatus status;
+
+ result = nautilus_file_get_string_attribute_q (file, attribute_q);
+ if (result != NULL)
+ {
+ return result;
+ }
+
+ /* Supply default values for the ones we know about. */
+ /* FIXME bugzilla.gnome.org 40646:
+ * Use hash table and switch statement or function pointers for speed?
+ */
+ if (attribute_q == attribute_size_q)
+ {
+ if (!nautilus_file_should_show_directory_item_count (file))
+ {
+ return g_strdup ("--");
+ }
+ count_unreadable = FALSE;
+ if (nautilus_file_is_directory (file))
+ {
+ nautilus_file_get_directory_item_count (file, &item_count, &count_unreadable);
+ }
+ return g_strdup (count_unreadable ? _("? items") : "...");
+ }
+ if (attribute_q == attribute_deep_size_q)
+ {
+ status = nautilus_file_get_deep_counts (file, NULL, NULL, NULL, NULL, FALSE);
+ if (status == NAUTILUS_REQUEST_DONE)
+ {
+ /* This means no contents at all were readable */
+ return g_strdup (_("? bytes"));
+ }
+ return g_strdup ("...");
+ }
+ if (attribute_q == attribute_deep_file_count_q
+ || attribute_q == attribute_deep_directory_count_q
+ || attribute_q == attribute_deep_total_count_q)
+ {
+ status = nautilus_file_get_deep_counts (file, NULL, NULL, NULL, NULL, FALSE);
+ if (status == NAUTILUS_REQUEST_DONE)
+ {
+ /* This means no contents at all were readable */
+ return g_strdup (_("? items"));
+ }
+ return g_strdup ("...");
+ }
+ if (attribute_q == attribute_type_q
+ || attribute_q == attribute_detailed_type_q
+ || attribute_q == attribute_mime_type_q)
+ {
+ return g_strdup (_("Unknown"));
+ }
+ if (attribute_q == attribute_trashed_on_q)
+ {
+ /* If n/a */
+ return g_strdup ("");
+ }
+ if (attribute_q == attribute_trash_orig_path_q)
+ {
+ /* If n/a */
+ return g_strdup ("");
+ }
+
+ /* Fallback, use for both unknown attributes and attributes
+ * for which we have no more appropriate default.
+ */
+ return g_strdup (_("unknown"));
}
char *
-nautilus_file_get_string_attribute_with_default (NautilusFile *file, const char *attribute_name)
+nautilus_file_get_string_attribute_with_default (NautilusFile *file,
+ const char *attribute_name)
{
- return nautilus_file_get_string_attribute_with_default_q (file, g_quark_from_string (attribute_name));
+ return nautilus_file_get_string_attribute_with_default_q (file, g_quark_from_string (attribute_name));
}
gboolean
nautilus_file_is_date_sort_attribute_q (GQuark attribute_q)
{
- if (attribute_q == attribute_modification_date_q ||
- attribute_q == attribute_date_modified_q ||
- attribute_q == attribute_date_modified_full_q ||
- attribute_q == attribute_date_modified_with_time_q ||
- attribute_q == attribute_accessed_date_q ||
- attribute_q == attribute_date_accessed_q ||
- attribute_q == attribute_date_accessed_full_q ||
- attribute_q == attribute_trashed_on_q ||
- attribute_q == attribute_trashed_on_full_q) {
- return TRUE;
- }
-
- return FALSE;
-}
-
-struct {
- const char *icon_name;
- const char *display_name;
-} mime_type_map[] = {
- { "application-x-executable", N_("Program") },
- { "audio-x-generic", N_("Audio") },
- { "font-x-generic", N_("Font") },
- { "image-x-generic", N_("Image") },
- { "package-x-generic", N_("Archive") },
- { "text-html", N_("Markup") },
- { "text-x-generic", N_("Text") },
- { "text-x-generic-template", N_("Text") },
- { "text-x-script", N_("Program") },
- { "video-x-generic", N_("Video") },
- { "x-office-address-book", N_("Contacts") },
- { "x-office-calendar", N_("Calendar") },
- { "x-office-document", N_("Document") },
- { "x-office-presentation", N_("Presentation") },
- { "x-office-spreadsheet", N_("Spreadsheet") },
+ if (attribute_q == attribute_modification_date_q ||
+ attribute_q == attribute_date_modified_q ||
+ attribute_q == attribute_date_modified_full_q ||
+ attribute_q == attribute_date_modified_with_time_q ||
+ attribute_q == attribute_accessed_date_q ||
+ attribute_q == attribute_date_accessed_q ||
+ attribute_q == attribute_date_accessed_full_q ||
+ attribute_q == attribute_trashed_on_q ||
+ attribute_q == attribute_trashed_on_full_q)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+struct
+{
+ const char *icon_name;
+ const char *display_name;
+} mime_type_map[] =
+{
+ { "application-x-executable", N_("Program") },
+ { "audio-x-generic", N_("Audio") },
+ { "font-x-generic", N_("Font") },
+ { "image-x-generic", N_("Image") },
+ { "package-x-generic", N_("Archive") },
+ { "text-html", N_("Markup") },
+ { "text-x-generic", N_("Text") },
+ { "text-x-generic-template", N_("Text") },
+ { "text-x-script", N_("Program") },
+ { "video-x-generic", N_("Video") },
+ { "x-office-address-book", N_("Contacts") },
+ { "x-office-calendar", N_("Calendar") },
+ { "x-office-document", N_("Document") },
+ { "x-office-presentation", N_("Presentation") },
+ { "x-office-spreadsheet", N_("Spreadsheet") },
};
static char *
get_basic_type_for_mime_type (const char *mime_type)
{
- char *icon_name;
- char *basic_type = NULL;
-
- icon_name = g_content_type_get_generic_icon_name (mime_type);
- if (icon_name != NULL) {
- int i;
-
- for (i = 0; i < G_N_ELEMENTS (mime_type_map); i++) {
- if (strcmp (mime_type_map[i].icon_name, icon_name) == 0) {
- basic_type = g_strdup (gettext (mime_type_map[i].display_name));
- break;
- }
- }
+ char *icon_name;
+ char *basic_type = NULL;
+
+ icon_name = g_content_type_get_generic_icon_name (mime_type);
+ if (icon_name != NULL)
+ {
+ int i;
+
+ for (i = 0; i < G_N_ELEMENTS (mime_type_map); i++)
+ {
+ if (strcmp (mime_type_map[i].icon_name, icon_name) == 0)
+ {
+ basic_type = g_strdup (gettext (mime_type_map[i].display_name));
+ break;
+ }
}
+ }
- if (basic_type == NULL) {
- basic_type = g_strdup (_("Unknown"));
- }
+ if (basic_type == NULL)
+ {
+ basic_type = g_strdup (_("Unknown"));
+ }
- g_free (icon_name);
+ g_free (icon_name);
- return basic_type;
+ return basic_type;
}
static char *
get_description (NautilusFile *file,
- gboolean detailed)
+ gboolean detailed)
{
- const char *mime_type;
-
- g_assert (NAUTILUS_IS_FILE (file));
-
- mime_type = eel_ref_str_peek (file->details->mime_type);
- if (mime_type == NULL) {
- return NULL;
- }
-
- if (g_content_type_is_unknown (mime_type)) {
- if (nautilus_file_is_executable (file)) {
- return g_strdup (_("Program"));
- }
- return g_strdup (_("Binary"));
- }
+ const char *mime_type;
- if (strcmp (mime_type, "inode/directory") == 0) {
- return g_strdup (_("Folder"));
- }
+ g_assert (NAUTILUS_IS_FILE (file));
- if (detailed) {
- char *description;
+ mime_type = eel_ref_str_peek (file->details->mime_type);
+ if (mime_type == NULL)
+ {
+ return NULL;
+ }
- description = g_content_type_get_description (mime_type);
- if (description != NULL) {
- return description;
- }
- } else {
- char *category;
-
- category = get_basic_type_for_mime_type (mime_type);
- if (category != NULL) {
- return category;
- }
- }
+ if (g_content_type_is_unknown (mime_type))
+ {
+ if (nautilus_file_is_executable (file))
+ {
+ return g_strdup (_("Program"));
+ }
+ return g_strdup (_("Binary"));
+ }
+
+ if (strcmp (mime_type, "inode/directory") == 0)
+ {
+ return g_strdup (_("Folder"));
+ }
+
+ if (detailed)
+ {
+ char *description;
+
+ description = g_content_type_get_description (mime_type);
+ if (description != NULL)
+ {
+ return description;
+ }
+ }
+ else
+ {
+ char *category;
+
+ category = get_basic_type_for_mime_type (mime_type);
+ if (category != NULL)
+ {
+ return category;
+ }
+ }
- return g_strdup (mime_type);
+ return g_strdup (mime_type);
}
/* Takes ownership of string */
static char *
-update_description_for_link (NautilusFile *file, char *string)
-{
- char *res;
-
- if (nautilus_file_is_symbolic_link (file)) {
- g_assert (!nautilus_file_is_broken_symbolic_link (file));
- if (string == NULL) {
- return g_strdup (_("Link"));
- }
- /* Note to localizers: convert file type string for file
- * (e.g. "folder", "plain text") to file type for symbolic link
- * to that kind of file (e.g. "link to folder").
- */
- res = g_strdup_printf (_("Link to %s"), string);
- g_free (string);
- return res;
- }
-
- return string;
+update_description_for_link (NautilusFile *file,
+ char *string)
+{
+ char *res;
+
+ if (nautilus_file_is_symbolic_link (file))
+ {
+ g_assert (!nautilus_file_is_broken_symbolic_link (file));
+ if (string == NULL)
+ {
+ return g_strdup (_("Link"));
+ }
+ /* Note to localizers: convert file type string for file
+ * (e.g. "folder", "plain text") to file type for symbolic link
+ * to that kind of file (e.g. "link to folder").
+ */
+ res = g_strdup_printf (_("Link to %s"), string);
+ g_free (string);
+ return res;
+ }
+
+ return string;
}
static char *
nautilus_file_get_type_as_string (NautilusFile *file)
{
- if (file == NULL) {
- return NULL;
- }
+ if (file == NULL)
+ {
+ return NULL;
+ }
- if (nautilus_file_is_broken_symbolic_link (file)) {
- return g_strdup (_("Link (broken)"));
- }
-
- return update_description_for_link (file, get_description (file, FALSE));
+ if (nautilus_file_is_broken_symbolic_link (file))
+ {
+ return g_strdup (_("Link (broken)"));
+ }
+
+ return update_description_for_link (file, get_description (file, FALSE));
}
static char *
nautilus_file_get_detailed_type_as_string (NautilusFile *file)
{
- if (file == NULL) {
- return NULL;
- }
+ if (file == NULL)
+ {
+ return NULL;
+ }
+
+ if (nautilus_file_is_broken_symbolic_link (file))
+ {
+ return g_strdup (_("Link (broken)"));
+ }
- if (nautilus_file_is_broken_symbolic_link (file)) {
- return g_strdup (_("Link (broken)"));
- }
-
- return update_description_for_link (file, get_description (file, TRUE));
+ return update_description_for_link (file, get_description (file, TRUE));
}
/**
* nautilus_file_get_file_type
- *
+ *
* Return this file's type.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: The type.
- *
+ *
**/
GFileType
nautilus_file_get_file_type (NautilusFile *file)
{
- if (file == NULL) {
- return G_FILE_TYPE_UNKNOWN;
- }
-
- return file->details->type;
+ if (file == NULL)
+ {
+ return G_FILE_TYPE_UNKNOWN;
+ }
+
+ return file->details->type;
}
/**
* nautilus_file_get_mime_type
- *
+ *
* Return this file's default mime type.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: The mime type.
- *
+ *
**/
char *
nautilus_file_get_mime_type (NautilusFile *file)
{
- if (file != NULL) {
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
- if (file->details->mime_type != NULL) {
- return g_strdup (eel_ref_str_peek (file->details->mime_type));
- }
- }
- return g_strdup ("application/octet-stream");
+ if (file != NULL)
+ {
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), NULL);
+ if (file->details->mime_type != NULL)
+ {
+ return g_strdup (eel_ref_str_peek (file->details->mime_type));
+ }
+ }
+ return g_strdup ("application/octet-stream");
}
/**
* nautilus_file_is_mime_type
- *
+ *
* Check whether a file is of a particular MIME type, or inherited
* from it.
* @file: NautilusFile representing the file in question.
* @mime_type: The MIME-type string to test (e.g. "text/plain")
- *
+ *
* Return value: TRUE if @mime_type exactly matches the
* file's MIME type.
- *
+ *
**/
gboolean
-nautilus_file_is_mime_type (NautilusFile *file, const char *mime_type)
+nautilus_file_is_mime_type (NautilusFile *file,
+ const char *mime_type)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- g_return_val_if_fail (mime_type != NULL, FALSE);
-
- if (file->details->mime_type == NULL) {
- return FALSE;
- }
- return g_content_type_is_a (eel_ref_str_peek (file->details->mime_type),
- mime_type);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (mime_type != NULL, FALSE);
+
+ if (file->details->mime_type == NULL)
+ {
+ return FALSE;
+ }
+ return g_content_type_is_a (eel_ref_str_peek (file->details->mime_type),
+ mime_type);
}
char *
nautilus_file_get_extension (NautilusFile *file)
{
- char *name;
- char *extension = NULL;
+ char *name;
+ char *extension = NULL;
- name = nautilus_file_get_name (file);
- if (name != NULL) {
- extension = g_strdup (eel_filename_get_extension_offset (name));
- g_free (name);
- }
+ name = nautilus_file_get_name (file);
+ if (name != NULL)
+ {
+ extension = g_strdup (eel_filename_get_extension_offset (name));
+ g_free (name);
+ }
- return extension;
+ return extension;
}
gboolean
nautilus_file_is_launchable (NautilusFile *file)
{
- gboolean type_can_be_executable;
+ gboolean type_can_be_executable;
- type_can_be_executable = FALSE;
- if (file->details->mime_type != NULL) {
- type_can_be_executable =
- g_content_type_can_be_executable (eel_ref_str_peek (file->details->mime_type));
- }
-
- return type_can_be_executable &&
- nautilus_file_can_get_permissions (file) &&
- nautilus_file_can_execute (file) &&
- nautilus_file_is_executable (file) &&
- !nautilus_file_is_directory (file);
+ type_can_be_executable = FALSE;
+ if (file->details->mime_type != NULL)
+ {
+ type_can_be_executable =
+ g_content_type_can_be_executable (eel_ref_str_peek (file->details->mime_type));
+ }
+
+ return type_can_be_executable &&
+ nautilus_file_can_get_permissions (file) &&
+ nautilus_file_can_execute (file) &&
+ nautilus_file_is_executable (file) &&
+ !nautilus_file_is_directory (file);
}
/**
* nautilus_file_is_symbolic_link
- *
+ *
* Check if this file is a symbolic link.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: True if the file is a symbolic link.
- *
+ *
**/
gboolean
nautilus_file_is_symbolic_link (NautilusFile *file)
{
- return file->details->is_symlink;
+ return file->details->is_symlink;
}
GMount *
nautilus_file_get_mount (NautilusFile *file)
{
- if (file->details->mount) {
- return g_object_ref (file->details->mount);
- }
- return NULL;
+ if (file->details->mount)
+ {
+ return g_object_ref (file->details->mount);
+ }
+ return NULL;
}
static void
-file_mount_unmounted (GMount *mount,
- gpointer data)
+file_mount_unmounted (GMount *mount,
+ gpointer data)
{
- NautilusFile *file;
+ NautilusFile *file;
- file = NAUTILUS_FILE (data);
+ file = NAUTILUS_FILE (data);
- nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_MOUNT);
+ nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_MOUNT);
}
void
nautilus_file_set_mount (NautilusFile *file,
- GMount *mount)
+ GMount *mount)
{
- if (file->details->mount) {
- g_signal_handlers_disconnect_by_func (file->details->mount, file_mount_unmounted, file);
- g_object_unref (file->details->mount);
- file->details->mount = NULL;
- }
+ if (file->details->mount)
+ {
+ g_signal_handlers_disconnect_by_func (file->details->mount, file_mount_unmounted, file);
+ g_object_unref (file->details->mount);
+ file->details->mount = NULL;
+ }
- if (mount) {
- file->details->mount = g_object_ref (mount);
- g_signal_connect (mount, "unmounted",
- G_CALLBACK (file_mount_unmounted), file);
- }
+ if (mount)
+ {
+ file->details->mount = g_object_ref (mount);
+ g_signal_connect (mount, "unmounted",
+ G_CALLBACK (file_mount_unmounted), file);
+ }
}
/**
* nautilus_file_is_broken_symbolic_link
- *
+ *
* Check if this file is a symbolic link with a missing target.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: True if the file is a symbolic link with a missing target.
- *
+ *
**/
gboolean
nautilus_file_is_broken_symbolic_link (NautilusFile *file)
{
- if (file == NULL) {
- return FALSE;
- }
-
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ if (file == NULL)
+ {
+ return FALSE;
+ }
+
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- /* Non-broken symbolic links return the target's type for get_file_type. */
- return nautilus_file_get_file_type (file) == G_FILE_TYPE_SYMBOLIC_LINK;
+ /* Non-broken symbolic links return the target's type for get_file_type. */
+ return nautilus_file_get_file_type (file) == G_FILE_TYPE_SYMBOLIC_LINK;
}
static void
-get_fs_free_cb (GObject *source_object,
- GAsyncResult *res,
- gpointer user_data)
-{
- NautilusFile *file;
- guint64 free_space;
- GFileInfo *info;
-
- file = NAUTILUS_FILE (user_data);
-
- free_space = (guint64)-1;
- info = g_file_query_filesystem_info_finish (G_FILE (source_object),
- res, NULL);
- if (info) {
- if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE)) {
- free_space = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
- }
- g_object_unref (info);
- }
-
- if (file->details->free_space != free_space) {
- file->details->free_space = free_space;
- nautilus_file_emit_changed (file);
- }
-
- nautilus_file_unref (file);
+get_fs_free_cb (GObject *source_object,
+ GAsyncResult *res,
+ gpointer user_data)
+{
+ NautilusFile *file;
+ guint64 free_space;
+ GFileInfo *info;
+
+ file = NAUTILUS_FILE (user_data);
+
+ free_space = (guint64) - 1;
+ info = g_file_query_filesystem_info_finish (G_FILE (source_object),
+ res, NULL);
+ if (info)
+ {
+ if (g_file_info_has_attribute (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE))
+ {
+ free_space = g_file_info_get_attribute_uint64 (info, G_FILE_ATTRIBUTE_FILESYSTEM_FREE);
+ }
+ g_object_unref (info);
+ }
+
+ if (file->details->free_space != free_space)
+ {
+ file->details->free_space = free_space;
+ nautilus_file_emit_changed (file);
+ }
+
+ nautilus_file_unref (file);
}
/**
@@ -7055,153 +7917,164 @@ get_fs_free_cb (GObject *source_object,
char *
nautilus_file_get_volume_free_space (NautilusFile *file)
{
- GFile *location;
- char *res;
- time_t now;
-
- now = time (NULL);
- /* Update first time and then every 2 seconds */
- if (file->details->free_space_read == 0 ||
- (now - file->details->free_space_read) > 2) {
- file->details->free_space_read = now;
- location = nautilus_file_get_location (file);
- g_file_query_filesystem_info_async (location,
- G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
- 0, NULL,
- get_fs_free_cb,
- nautilus_file_ref (file));
- g_object_unref (location);
- }
-
- res = NULL;
- if (file->details->free_space != (guint64)-1) {
- res = g_format_size (file->details->free_space);
- }
-
- return res;
+ GFile *location;
+ char *res;
+ time_t now;
+
+ now = time (NULL);
+ /* Update first time and then every 2 seconds */
+ if (file->details->free_space_read == 0 ||
+ (now - file->details->free_space_read) > 2)
+ {
+ file->details->free_space_read = now;
+ location = nautilus_file_get_location (file);
+ g_file_query_filesystem_info_async (location,
+ G_FILE_ATTRIBUTE_FILESYSTEM_FREE,
+ 0, NULL,
+ get_fs_free_cb,
+ nautilus_file_ref (file));
+ g_object_unref (location);
+ }
+
+ res = NULL;
+ if (file->details->free_space != (guint64) - 1)
+ {
+ res = g_format_size (file->details->free_space);
+ }
+
+ return res;
}
/**
* nautilus_file_get_volume_name
* Get the path of the volume the file resides on
* @file: NautilusFile representing the file in question.
- *
- * Returns: newly-allocated copy of the volume name of the target file,
+ *
+ * Returns: newly-allocated copy of the volume name of the target file,
* if the volume name isn't set, it returns the mount path of the volume
- */
+ */
char *
nautilus_file_get_volume_name (NautilusFile *file)
{
- GFile *location;
- char *res;
- GMount *mount;
+ GFile *location;
+ char *res;
+ GMount *mount;
+
+ res = NULL;
- res = NULL;
-
- location = nautilus_file_get_location (file);
- mount = g_file_find_enclosing_mount (location, NULL, NULL);
- if (mount) {
- res = g_strdup (g_mount_get_name (mount));
- g_object_unref (mount);
- }
- g_object_unref (location);
+ location = nautilus_file_get_location (file);
+ mount = g_file_find_enclosing_mount (location, NULL, NULL);
+ if (mount)
+ {
+ res = g_strdup (g_mount_get_name (mount));
+ g_object_unref (mount);
+ }
+ g_object_unref (location);
- return res;
+ return res;
}
/**
* nautilus_file_get_symbolic_link_target_path
- *
- * Get the file path of the target of a symbolic link. It is an error
+ *
+ * Get the file path of the target of a symbolic link. It is an error
* to call this function on a file that isn't a symbolic link.
* @file: NautilusFile representing the symbolic link in question.
- *
+ *
* Returns: newly-allocated copy of the file path of the target of the symbolic link.
*/
char *
nautilus_file_get_symbolic_link_target_path (NautilusFile *file)
{
- if (!nautilus_file_is_symbolic_link (file)) {
- g_warning ("File has symlink target, but is not marked as symlink");
- }
+ if (!nautilus_file_is_symbolic_link (file))
+ {
+ g_warning ("File has symlink target, but is not marked as symlink");
+ }
- return g_strdup (file->details->symlink_name);
+ return g_strdup (file->details->symlink_name);
}
/**
* nautilus_file_get_symbolic_link_target_uri
- *
- * Get the uri of the target of a symbolic link. It is an error
+ *
+ * Get the uri of the target of a symbolic link. It is an error
* to call this function on a file that isn't a symbolic link.
* @file: NautilusFile representing the symbolic link in question.
- *
+ *
* Returns: newly-allocated copy of the uri of the target of the symbolic link.
*/
char *
nautilus_file_get_symbolic_link_target_uri (NautilusFile *file)
{
- GFile *location, *parent, *target;
- char *target_uri;
-
- if (!nautilus_file_is_symbolic_link (file)) {
- g_warning ("File has symlink target, but is not marked as symlink");
- }
-
- if (file->details->symlink_name == NULL) {
- return NULL;
- } else {
- target = NULL;
-
- location = nautilus_file_get_location (file);
- parent = g_file_get_parent (location);
- g_object_unref (location);
- if (parent) {
- target = g_file_resolve_relative_path (parent, file->details->symlink_name);
- g_object_unref (parent);
- }
-
- target_uri = NULL;
- if (target) {
- target_uri = g_file_get_uri (target);
- g_object_unref (target);
- }
- return target_uri;
- }
+ GFile *location, *parent, *target;
+ char *target_uri;
+
+ if (!nautilus_file_is_symbolic_link (file))
+ {
+ g_warning ("File has symlink target, but is not marked as symlink");
+ }
+
+ if (file->details->symlink_name == NULL)
+ {
+ return NULL;
+ }
+ else
+ {
+ target = NULL;
+
+ location = nautilus_file_get_location (file);
+ parent = g_file_get_parent (location);
+ g_object_unref (location);
+ if (parent)
+ {
+ target = g_file_resolve_relative_path (parent, file->details->symlink_name);
+ g_object_unref (parent);
+ }
+
+ target_uri = NULL;
+ if (target)
+ {
+ target_uri = g_file_get_uri (target);
+ g_object_unref (target);
+ }
+ return target_uri;
+ }
}
/**
* nautilus_file_is_nautilus_link
- *
+ *
* Check if this file is a "nautilus link", meaning a historical
* nautilus xml link file or a desktop file.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: True if the file is a nautilus link.
- *
+ *
**/
gboolean
nautilus_file_is_nautilus_link (NautilusFile *file)
{
- if (file->details->mime_type == NULL) {
- return FALSE;
- }
- return g_content_type_equals (eel_ref_str_peek (file->details->mime_type),
- "application/x-desktop");
+ if (file->details->mime_type == NULL)
+ {
+ return FALSE;
+ }
+ return g_content_type_equals (eel_ref_str_peek (file->details->mime_type),
+ "application/x-desktop");
}
/**
* nautilus_file_is_directory
- *
+ *
* Check if this file is a directory.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: TRUE if @file is a directory.
- *
+ *
**/
gboolean
nautilus_file_is_directory (NautilusFile *file)
{
- return nautilus_file_get_file_type (file) == G_FILE_TYPE_DIRECTORY;
+ return nautilus_file_get_file_type (file) == G_FILE_TYPE_DIRECTORY;
}
/**
@@ -7210,99 +8083,101 @@ nautilus_file_is_directory (NautilusFile *file)
* Check if this file is a special platform directory.
* @file: NautilusFile representing the file in question.
* @special_directory: GUserDirectory representing the type to test for
- *
+ *
* Returns: TRUE if @file is a special directory of the given kind.
*/
gboolean
-nautilus_file_is_user_special_directory (NautilusFile *file,
- GUserDirectory special_directory)
+nautilus_file_is_user_special_directory (NautilusFile *file,
+ GUserDirectory special_directory)
{
- gboolean is_special_dir;
- const gchar *special_dir;
+ gboolean is_special_dir;
+ const gchar *special_dir;
- special_dir = g_get_user_special_dir (special_directory);
- is_special_dir = FALSE;
+ special_dir = g_get_user_special_dir (special_directory);
+ is_special_dir = FALSE;
- if (special_dir) {
- GFile *loc;
- GFile *special_gfile;
+ if (special_dir)
+ {
+ GFile *loc;
+ GFile *special_gfile;
- loc = nautilus_file_get_location (file);
- special_gfile = g_file_new_for_path (special_dir);
- is_special_dir = g_file_equal (loc, special_gfile);
- g_object_unref (special_gfile);
- g_object_unref (loc);
- }
+ loc = nautilus_file_get_location (file);
+ special_gfile = g_file_new_for_path (special_dir);
+ is_special_dir = g_file_equal (loc, special_gfile);
+ g_object_unref (special_gfile);
+ g_object_unref (loc);
+ }
- return is_special_dir;
+ return is_special_dir;
}
gboolean
nautilus_file_is_special_link (NautilusFile *file)
{
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->is_special_link (file);
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->is_special_link (file);
}
static gboolean
real_is_special_link (NautilusFile *file)
{
- return FALSE;
+ return FALSE;
}
gboolean
nautilus_file_is_archive (NautilusFile *file)
{
- g_autofree char *mime_type;
+ g_autofree char *mime_type;
- mime_type = nautilus_file_get_mime_type (file);
+ mime_type = nautilus_file_get_mime_type (file);
- return autoar_check_mime_type_supported (mime_type);
+ return autoar_check_mime_type_supported (mime_type);
}
/**
* nautilus_file_is_in_trash
- *
+ *
* Check if this file is a file in trash.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: TRUE if @file is in a trash.
- *
+ *
**/
gboolean
nautilus_file_is_in_trash (NautilusFile *file)
{
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (NAUTILUS_IS_FILE (file));
- return nautilus_directory_is_in_trash (file->details->directory);
+ return nautilus_directory_is_in_trash (file->details->directory);
}
/**
* nautilus_file_is_in_recent
- *
+ *
* Check if this file is a file in Recent.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: TRUE if @file is in Recent.
- *
+ *
**/
gboolean
nautilus_file_is_in_recent (NautilusFile *file)
{
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (NAUTILUS_IS_FILE (file));
- return nautilus_directory_is_in_recent (file->details->directory);
+ return nautilus_directory_is_in_recent (file->details->directory);
}
-static const gchar * const remote_types[] = {
- "afp",
- "google-drive",
- "sftp",
- "webdav",
- "ftp",
- "nfs",
- "cifs",
- NULL
+static const gchar * const remote_types[] =
+{
+ "afp",
+ "google-drive",
+ "sftp",
+ "webdav",
+ "ftp",
+ "nfs",
+ "cifs",
+ NULL
};
/**
@@ -7312,18 +8187,18 @@ static const gchar * const remote_types[] = {
* @file: NautilusFile representing the file in question.
*
* Returns: TRUE if @file is in a remote filesystem.
- *
+ *
**/
gboolean
nautilus_file_is_remote (NautilusFile *file)
{
- char *filesystem_type;
+ char *filesystem_type;
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (NAUTILUS_IS_FILE (file));
- filesystem_type = nautilus_file_get_filesystem_type (file);
+ filesystem_type = nautilus_file_get_filesystem_type (file);
- return filesystem_type != NULL && g_strv_contains (remote_types, filesystem_type);
+ return filesystem_type != NULL && g_strv_contains (remote_types, filesystem_type);
}
/**
@@ -7338,179 +8213,190 @@ nautilus_file_is_remote (NautilusFile *file)
gboolean
nautilus_file_is_other_locations (NautilusFile *file)
{
- gboolean is_other_locations;
- gchar *uri;
+ gboolean is_other_locations;
+ gchar *uri;
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (NAUTILUS_IS_FILE (file));
- uri = nautilus_file_get_uri (file);
- is_other_locations = g_strcmp0 (uri, "other-locations:///") == 0;
+ uri = nautilus_file_get_uri (file);
+ is_other_locations = g_strcmp0 (uri, "other-locations:///") == 0;
- g_free (uri);
+ g_free (uri);
- return is_other_locations;
+ return is_other_locations;
}
GError *
nautilus_file_get_file_info_error (NautilusFile *file)
{
- if (!file->details->get_info_failed) {
- return NULL;
- }
+ if (!file->details->get_info_failed)
+ {
+ return NULL;
+ }
- return file->details->get_info_error;
+ return file->details->get_info_error;
}
/**
* nautilus_file_contains_text
- *
+ *
* Check if this file contains text.
* This is private and is used to decide whether or not to read the top left text.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: TRUE if @file has a text MIME type.
- *
+ *
**/
gboolean
nautilus_file_contains_text (NautilusFile *file)
{
- if (file == NULL) {
- return FALSE;
- }
+ if (file == NULL)
+ {
+ return FALSE;
+ }
- /* All text files inherit from text/plain */
- return nautilus_file_is_mime_type (file, "text/plain");
+ /* All text files inherit from text/plain */
+ return nautilus_file_is_mime_type (file, "text/plain");
}
/**
* nautilus_file_is_executable
- *
+ *
* Check if this file is executable at all.
* @file: NautilusFile representing the file in question.
- *
+ *
* Returns: TRUE if any of the execute bits are set. FALSE if
* not, or if the permissions are unknown.
- *
+ *
**/
gboolean
nautilus_file_is_executable (NautilusFile *file)
{
- if (!file->details->has_permissions) {
- /* File's permissions field is not valid.
- * Can't access specific permissions, so return FALSE.
- */
- return FALSE;
- }
+ if (!file->details->has_permissions)
+ {
+ /* File's permissions field is not valid.
+ * Can't access specific permissions, so return FALSE.
+ */
+ return FALSE;
+ }
- return file->details->can_execute;
+ return file->details->can_execute;
}
char *
nautilus_file_get_filesystem_id (NautilusFile *file)
{
- return g_strdup (eel_ref_str_peek (file->details->filesystem_id));
+ return g_strdup (eel_ref_str_peek (file->details->filesystem_id));
}
NautilusFile *
nautilus_file_get_trash_original_file (NautilusFile *file)
{
- GFile *location;
- NautilusFile *original_file;
+ GFile *location;
+ NautilusFile *original_file;
- original_file = NULL;
+ original_file = NULL;
- if (file->details->trash_orig_path != NULL) {
- location = g_file_new_for_path (file->details->trash_orig_path);
- original_file = nautilus_file_get (location);
- g_object_unref (location);
- }
-
- return original_file;
+ if (file->details->trash_orig_path != NULL)
+ {
+ location = g_file_new_for_path (file->details->trash_orig_path);
+ original_file = nautilus_file_get (location);
+ g_object_unref (location);
+ }
+ return original_file;
}
void
nautilus_file_mark_gone (NautilusFile *file)
{
- NautilusDirectory *directory;
+ NautilusDirectory *directory;
- if (file->details->is_gone)
- return;
+ if (file->details->is_gone)
+ {
+ return;
+ }
- file->details->is_gone = TRUE;
+ file->details->is_gone = TRUE;
- update_links_if_target (file);
+ update_links_if_target (file);
- /* Drop it from the symlink hash ! */
- remove_from_link_hash_table (file);
+ /* Drop it from the symlink hash ! */
+ remove_from_link_hash_table (file);
- /* Let the directory know it's gone. */
- directory = file->details->directory;
- if (!nautilus_file_is_self_owned (file)) {
- nautilus_directory_remove_file (directory, file);
- }
+ /* Let the directory know it's gone. */
+ directory = file->details->directory;
+ if (!nautilus_file_is_self_owned (file))
+ {
+ nautilus_directory_remove_file (directory, file);
+ }
- nautilus_file_clear_info (file);
+ nautilus_file_clear_info (file);
- /* FIXME bugzilla.gnome.org 42429:
- * Maybe we can get rid of the name too eventually, but
- * for now that would probably require too many if statements
- * everywhere anyone deals with the name. Maybe we can give it
- * a hard-coded "<deleted>" name or something.
- */
+ /* FIXME bugzilla.gnome.org 42429:
+ * Maybe we can get rid of the name too eventually, but
+ * for now that would probably require too many if statements
+ * everywhere anyone deals with the name. Maybe we can give it
+ * a hard-coded "<deleted>" name or something.
+ */
}
/**
* nautilus_file_changed
- *
+ *
* Notify the user that this file has changed.
* @file: NautilusFile representing the file in question.
**/
void
nautilus_file_changed (NautilusFile *file)
{
- GList fake_list;
+ GList fake_list;
- g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
- if (nautilus_file_is_self_owned (file)) {
- nautilus_file_emit_changed (file);
- } else {
- fake_list.data = file;
- fake_list.next = NULL;
- fake_list.prev = NULL;
- nautilus_directory_emit_change_signals
- (file->details->directory, &fake_list);
- }
+ if (nautilus_file_is_self_owned (file))
+ {
+ nautilus_file_emit_changed (file);
+ }
+ else
+ {
+ fake_list.data = file;
+ fake_list.next = NULL;
+ fake_list.prev = NULL;
+ nautilus_directory_emit_change_signals
+ (file->details->directory, &fake_list);
+ }
}
/**
* nautilus_file_updated_deep_count_in_progress
- *
+ *
* Notify clients that a newer deep count is available for
* the directory in question.
*/
void
-nautilus_file_updated_deep_count_in_progress (NautilusFile *file) {
- GList *link_files, *node;
+nautilus_file_updated_deep_count_in_progress (NautilusFile *file)
+{
+ GList *link_files, *node;
- g_assert (NAUTILUS_IS_FILE (file));
- g_assert (nautilus_file_is_directory (file));
+ g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (nautilus_file_is_directory (file));
- /* Send out a signal. */
- g_signal_emit (file, signals[UPDATED_DEEP_COUNT_IN_PROGRESS], 0, file);
+ /* Send out a signal. */
+ g_signal_emit (file, signals[UPDATED_DEEP_COUNT_IN_PROGRESS], 0, file);
- /* Tell link files pointing to this object about the change. */
- link_files = get_link_files (file);
- for (node = link_files; node != NULL; node = node->next) {
- nautilus_file_updated_deep_count_in_progress (NAUTILUS_FILE (node->data));
- }
- nautilus_file_list_free (link_files);
+ /* Tell link files pointing to this object about the change. */
+ link_files = get_link_files (file);
+ for (node = link_files; node != NULL; node = node->next)
+ {
+ nautilus_file_updated_deep_count_in_progress (NAUTILUS_FILE (node->data));
+ }
+ nautilus_file_list_free (link_files);
}
/**
* nautilus_file_emit_changed
- *
+ *
* Emit a file changed signal.
* This can only be called by the directory, since the directory
* also has to emit a files_changed signal.
@@ -7520,26 +8406,28 @@ nautilus_file_updated_deep_count_in_progress (NautilusFile *file) {
void
nautilus_file_emit_changed (NautilusFile *file)
{
- GList *link_files, *p;
+ GList *link_files, *p;
- g_assert (NAUTILUS_IS_FILE (file));
+ g_assert (NAUTILUS_IS_FILE (file));
- /* Send out a signal. */
- g_signal_emit (file, signals[CHANGED], 0, file);
+ /* Send out a signal. */
+ g_signal_emit (file, signals[CHANGED], 0, file);
- /* Tell link files pointing to this object about the change. */
- link_files = get_link_files (file);
- for (p = link_files; p != NULL; p = p->next) {
- if (p->data != file) {
- nautilus_file_changed (NAUTILUS_FILE (p->data));
- }
- }
- nautilus_file_list_free (link_files);
+ /* Tell link files pointing to this object about the change. */
+ link_files = get_link_files (file);
+ for (p = link_files; p != NULL; p = p->next)
+ {
+ if (p->data != file)
+ {
+ nautilus_file_changed (NAUTILUS_FILE (p->data));
+ }
+ }
+ nautilus_file_list_free (link_files);
}
/**
* nautilus_file_is_gone
- *
+ *
* Check if a file has already been deleted.
* @file: NautilusFile representing the file in question.
*
@@ -7548,14 +8436,14 @@ nautilus_file_emit_changed (NautilusFile *file)
gboolean
nautilus_file_is_gone (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return file->details->is_gone;
+ return file->details->is_gone;
}
/**
* nautilus_file_is_not_yet_confirmed
- *
+ *
* Check if we're in a state where we don't know if a file really
* exists or not, before the initial I/O is complete.
* @file: NautilusFile representing the file in question.
@@ -7565,9 +8453,9 @@ nautilus_file_is_gone (NautilusFile *file)
gboolean
nautilus_file_is_not_yet_confirmed (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return !file->details->got_file_info;
+ return !file->details->got_file_info;
}
/**
@@ -7581,223 +8469,236 @@ nautilus_file_is_not_yet_confirmed (NautilusFile *file)
*
* @file: The file being queried.
* @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,
- NautilusFileAttributes file_attributes)
+nautilus_file_check_if_ready (NautilusFile *file,
+ NautilusFileAttributes file_attributes)
{
- /* To be parallel with call_when_ready, return
- * TRUE for NULL file.
- */
- if (file == NULL) {
- return TRUE;
- }
+ /* To be parallel with call_when_ready, return
+ * TRUE for NULL file.
+ */
+ if (file == NULL)
+ {
+ return TRUE;
+ }
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->check_if_ready (file, file_attributes);
-}
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->check_if_ready (file, file_attributes);
+}
void
-nautilus_file_call_when_ready (NautilusFile *file,
- NautilusFileAttributes file_attributes,
- NautilusFileCallback callback,
- gpointer callback_data)
-
+nautilus_file_call_when_ready (NautilusFile *file,
+ NautilusFileAttributes file_attributes,
+ NautilusFileCallback callback,
+ gpointer callback_data)
{
- if (file == NULL) {
- (* callback) (file, callback_data);
- return;
- }
+ if (file == NULL)
+ {
+ (*callback)(file, callback_data);
+ return;
+ }
- g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->call_when_ready
- (file, file_attributes, callback, callback_data);
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->call_when_ready
+ (file, file_attributes, callback, callback_data);
}
void
-nautilus_file_cancel_call_when_ready (NautilusFile *file,
- NautilusFileCallback callback,
- gpointer callback_data)
+nautilus_file_cancel_call_when_ready (NautilusFile *file,
+ NautilusFileCallback callback,
+ gpointer callback_data)
{
- g_return_if_fail (callback != NULL);
+ g_return_if_fail (callback != NULL);
- if (file == NULL) {
- return;
- }
+ if (file == NULL)
+ {
+ return;
+ }
- g_return_if_fail (NAUTILUS_IS_FILE (file));
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->cancel_call_when_ready
- (file, callback, callback_data);
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->cancel_call_when_ready
+ (file, callback, callback_data);
}
static void
invalidate_directory_count (NautilusFile *file)
{
- file->details->directory_count_is_up_to_date = FALSE;
+ file->details->directory_count_is_up_to_date = FALSE;
}
static void
invalidate_deep_counts (NautilusFile *file)
{
- file->details->deep_counts_status = NAUTILUS_REQUEST_NOT_STARTED;
+ file->details->deep_counts_status = NAUTILUS_REQUEST_NOT_STARTED;
}
static void
invalidate_mime_list (NautilusFile *file)
{
- file->details->mime_list_is_up_to_date = FALSE;
+ file->details->mime_list_is_up_to_date = FALSE;
}
static void
invalidate_file_info (NautilusFile *file)
{
- file->details->file_info_is_up_to_date = FALSE;
+ file->details->file_info_is_up_to_date = FALSE;
}
static void
invalidate_link_info (NautilusFile *file)
{
- file->details->link_info_is_up_to_date = FALSE;
+ file->details->link_info_is_up_to_date = FALSE;
}
static void
invalidate_thumbnail (NautilusFile *file)
{
- file->details->thumbnail_is_up_to_date = FALSE;
+ file->details->thumbnail_is_up_to_date = FALSE;
}
static void
invalidate_mount (NautilusFile *file)
{
- file->details->mount_is_up_to_date = FALSE;
+ file->details->mount_is_up_to_date = FALSE;
}
void
nautilus_file_invalidate_extension_info_internal (NautilusFile *file)
{
- if (file->details->pending_info_providers)
- g_list_free_full (file->details->pending_info_providers, g_object_unref);
+ if (file->details->pending_info_providers)
+ {
+ g_list_free_full (file->details->pending_info_providers, g_object_unref);
+ }
- file->details->pending_info_providers =
- nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_INFO_PROVIDER);
+ file->details->pending_info_providers =
+ nautilus_module_get_extensions_for_type (NAUTILUS_TYPE_INFO_PROVIDER);
}
void
nautilus_file_invalidate_attributes_internal (NautilusFile *file,
NautilusFileAttributes file_attributes)
{
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->invalidate_attributes_internal (file, file_attributes);
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->invalidate_attributes_internal (file, file_attributes);
}
static void
real_invalidate_attributes_internal (NautilusFile *file,
NautilusFileAttributes file_attributes)
{
- Request request;
-
- if (file == NULL) {
- return;
- }
-
- request = nautilus_directory_set_up_request (file_attributes);
-
- if (REQUEST_WANTS_TYPE (request, REQUEST_DIRECTORY_COUNT)) {
- invalidate_directory_count (file);
- }
- if (REQUEST_WANTS_TYPE (request, REQUEST_DEEP_COUNT)) {
- invalidate_deep_counts (file);
- }
- if (REQUEST_WANTS_TYPE (request, REQUEST_MIME_LIST)) {
- invalidate_mime_list (file);
- }
- if (REQUEST_WANTS_TYPE (request, REQUEST_FILE_INFO)) {
- invalidate_file_info (file);
- }
- if (REQUEST_WANTS_TYPE (request, REQUEST_LINK_INFO)) {
- invalidate_link_info (file);
- }
- if (REQUEST_WANTS_TYPE (request, REQUEST_EXTENSION_INFO)) {
- nautilus_file_invalidate_extension_info_internal (file);
- }
- if (REQUEST_WANTS_TYPE (request, REQUEST_THUMBNAIL)) {
- invalidate_thumbnail (file);
- }
- if (REQUEST_WANTS_TYPE (request, REQUEST_MOUNT)) {
- invalidate_mount (file);
- }
-
- /* FIXME bugzilla.gnome.org 45075: implement invalidating metadata */
+ Request request;
+
+ if (file == NULL)
+ {
+ return;
+ }
+
+ request = nautilus_directory_set_up_request (file_attributes);
+
+ if (REQUEST_WANTS_TYPE (request, REQUEST_DIRECTORY_COUNT))
+ {
+ invalidate_directory_count (file);
+ }
+ if (REQUEST_WANTS_TYPE (request, REQUEST_DEEP_COUNT))
+ {
+ invalidate_deep_counts (file);
+ }
+ if (REQUEST_WANTS_TYPE (request, REQUEST_MIME_LIST))
+ {
+ invalidate_mime_list (file);
+ }
+ if (REQUEST_WANTS_TYPE (request, REQUEST_FILE_INFO))
+ {
+ invalidate_file_info (file);
+ }
+ if (REQUEST_WANTS_TYPE (request, REQUEST_LINK_INFO))
+ {
+ invalidate_link_info (file);
+ }
+ if (REQUEST_WANTS_TYPE (request, REQUEST_EXTENSION_INFO))
+ {
+ nautilus_file_invalidate_extension_info_internal (file);
+ }
+ if (REQUEST_WANTS_TYPE (request, REQUEST_THUMBNAIL))
+ {
+ invalidate_thumbnail (file);
+ }
+ if (REQUEST_WANTS_TYPE (request, REQUEST_MOUNT))
+ {
+ invalidate_mount (file);
+ }
+
+ /* FIXME bugzilla.gnome.org 45075: implement invalidating metadata */
}
gboolean
nautilus_file_is_thumbnailing (NautilusFile *file)
{
- g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
-
- return file->details->is_thumbnailing;
+ g_return_val_if_fail (NAUTILUS_IS_FILE (file), FALSE);
+
+ return file->details->is_thumbnailing;
}
void
nautilus_file_set_is_thumbnailing (NautilusFile *file,
- gboolean is_thumbnailing)
+ gboolean is_thumbnailing)
{
- g_return_if_fail (NAUTILUS_IS_FILE (file));
-
- file->details->is_thumbnailing = is_thumbnailing;
+ g_return_if_fail (NAUTILUS_IS_FILE (file));
+
+ file->details->is_thumbnailing = is_thumbnailing;
}
/**
* nautilus_file_invalidate_attributes
- *
+ *
* Invalidate the specified attributes and force a reload.
* @file: NautilusFile representing the file in question.
* @file_attributes: attributes to froget.
**/
void
-nautilus_file_invalidate_attributes (NautilusFile *file,
- NautilusFileAttributes file_attributes)
+nautilus_file_invalidate_attributes (NautilusFile *file,
+ NautilusFileAttributes file_attributes)
{
- /* Cancel possible in-progress loads of any of these attributes */
- nautilus_directory_cancel_loading_file_attributes (file->details->directory,
- file,
- file_attributes);
-
- /* Actually invalidate the values */
- nautilus_file_invalidate_attributes_internal (file, file_attributes);
+ /* Cancel possible in-progress loads of any of these attributes */
+ nautilus_directory_cancel_loading_file_attributes (file->details->directory,
+ file,
+ file_attributes);
- nautilus_directory_add_file_to_work_queue (file->details->directory, file);
-
- /* Kick off I/O if necessary */
- nautilus_directory_async_state_changed (file->details->directory);
+ /* Actually invalidate the values */
+ nautilus_file_invalidate_attributes_internal (file, file_attributes);
+
+ nautilus_directory_add_file_to_work_queue (file->details->directory, file);
+
+ /* Kick off I/O if necessary */
+ nautilus_directory_async_state_changed (file->details->directory);
}
-NautilusFileAttributes
+NautilusFileAttributes
nautilus_file_get_all_attributes (void)
{
- return NAUTILUS_FILE_ATTRIBUTE_INFO |
- NAUTILUS_FILE_ATTRIBUTE_LINK_INFO |
- NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS |
- NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT |
- NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES |
- NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO |
- NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL |
- NAUTILUS_FILE_ATTRIBUTE_MOUNT;
+ return NAUTILUS_FILE_ATTRIBUTE_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_LINK_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_DEEP_COUNTS |
+ NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_COUNT |
+ NAUTILUS_FILE_ATTRIBUTE_DIRECTORY_ITEM_MIME_TYPES |
+ NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO |
+ NAUTILUS_FILE_ATTRIBUTE_THUMBNAIL |
+ NAUTILUS_FILE_ATTRIBUTE_MOUNT;
}
void
nautilus_file_invalidate_all_attributes (NautilusFile *file)
{
- NautilusFileAttributes all_attributes;
+ NautilusFileAttributes all_attributes;
- all_attributes = nautilus_file_get_all_attributes ();
- nautilus_file_invalidate_attributes (file, all_attributes);
+ all_attributes = nautilus_file_get_all_attributes ();
+ nautilus_file_invalidate_attributes (file, all_attributes);
}
@@ -7812,44 +8713,65 @@ nautilus_file_invalidate_all_attributes (NautilusFile *file)
void
nautilus_file_dump (NautilusFile *file)
{
- long size = file->details->deep_size;
- char *uri;
- const char *file_kind;
-
- uri = nautilus_file_get_uri (file);
- g_print ("uri: %s \n", uri);
- if (!file->details->got_file_info) {
- g_print ("no file info \n");
- } else if (file->details->get_info_failed) {
- g_print ("failed to get file info \n");
- } else {
- g_print ("size: %ld \n", size);
- switch (file->details->type) {
- case G_FILE_TYPE_REGULAR:
- file_kind = "regular file";
- break;
- case G_FILE_TYPE_DIRECTORY:
- file_kind = "folder";
- break;
- case G_FILE_TYPE_SPECIAL:
- file_kind = "special";
- break;
- case G_FILE_TYPE_SYMBOLIC_LINK:
- file_kind = "symbolic link";
- break;
- case G_FILE_TYPE_UNKNOWN:
- default:
- file_kind = "unknown";
- break;
- }
- g_print ("kind: %s \n", file_kind);
- if (file->details->type == G_FILE_TYPE_SYMBOLIC_LINK) {
- g_print ("link to %s \n", file->details->symlink_name);
- /* FIXME bugzilla.gnome.org 42430: add following of symlinks here */
- }
- /* FIXME bugzilla.gnome.org 42431: add permissions and other useful stuff here */
- }
- g_free (uri);
+ long size = file->details->deep_size;
+ char *uri;
+ const char *file_kind;
+
+ uri = nautilus_file_get_uri (file);
+ g_print ("uri: %s \n", uri);
+ if (!file->details->got_file_info)
+ {
+ g_print ("no file info \n");
+ }
+ else if (file->details->get_info_failed)
+ {
+ g_print ("failed to get file info \n");
+ }
+ else
+ {
+ g_print ("size: %ld \n", size);
+ switch (file->details->type)
+ {
+ case G_FILE_TYPE_REGULAR:
+ {
+ file_kind = "regular file";
+ }
+ break;
+
+ case G_FILE_TYPE_DIRECTORY:
+ {
+ file_kind = "folder";
+ }
+ break;
+
+ case G_FILE_TYPE_SPECIAL:
+ {
+ file_kind = "special";
+ }
+ break;
+
+ case G_FILE_TYPE_SYMBOLIC_LINK:
+ {
+ file_kind = "symbolic link";
+ }
+ break;
+
+ case G_FILE_TYPE_UNKNOWN:
+ default:
+ {
+ file_kind = "unknown";
+ }
+ break;
+ }
+ g_print ("kind: %s \n", file_kind);
+ if (file->details->type == G_FILE_TYPE_SYMBOLIC_LINK)
+ {
+ g_print ("link to %s \n", file->details->symlink_name);
+ /* FIXME bugzilla.gnome.org 42430: add following of symlinks here */
+ }
+ /* FIXME bugzilla.gnome.org 42431: add permissions and other useful stuff here */
+ }
+ g_free (uri);
}
/**
@@ -7861,8 +8783,8 @@ nautilus_file_dump (NautilusFile *file)
GList *
nautilus_file_list_ref (GList *list)
{
- g_list_foreach (list, (GFunc) nautilus_file_ref, NULL);
- return list;
+ g_list_foreach (list, (GFunc) nautilus_file_ref, NULL);
+ return list;
}
/**
@@ -7874,7 +8796,7 @@ nautilus_file_list_ref (GList *list)
void
nautilus_file_list_unref (GList *list)
{
- g_list_foreach (list, (GFunc) nautilus_file_unref, NULL);
+ g_list_foreach (list, (GFunc) nautilus_file_unref, NULL);
}
/**
@@ -7886,8 +8808,8 @@ nautilus_file_list_unref (GList *list)
void
nautilus_file_list_free (GList *list)
{
- nautilus_file_list_unref (list);
- g_list_free (list);
+ nautilus_file_list_unref (list);
+ g_list_free (list);
}
/**
@@ -7899,495 +8821,537 @@ nautilus_file_list_free (GList *list)
GList *
nautilus_file_list_copy (GList *list)
{
- return g_list_copy (nautilus_file_list_ref (list));
+ return g_list_copy (nautilus_file_list_ref (list));
}
static gboolean
get_attributes_for_default_sort_type (NautilusFile *file,
- gboolean *is_recent,
- gboolean *is_download,
- gboolean *is_trash,
- gboolean *is_search)
-{
- gboolean is_recent_dir, is_download_dir, is_desktop_dir, is_trash_dir, is_search_dir, retval;
-
- *is_recent = FALSE;
- *is_download = FALSE;
- *is_trash = FALSE;
- *is_search = FALSE;
- retval = FALSE;
-
- /* special handling for certain directories */
- if (file && nautilus_file_is_directory (file)) {
- is_recent_dir =
- nautilus_file_is_in_recent (file);
- is_download_dir =
- nautilus_file_is_user_special_directory (file, G_USER_DIRECTORY_DOWNLOAD);
- is_desktop_dir =
- nautilus_file_is_user_special_directory (file, G_USER_DIRECTORY_DESKTOP);
- is_trash_dir =
- nautilus_file_is_in_trash (file);
- is_search_dir =
- nautilus_file_is_in_search (file);
-
- if (is_download_dir && !is_desktop_dir) {
- *is_download = TRUE;
- retval = TRUE;
- } else if (is_trash_dir) {
- *is_trash = TRUE;
- retval = TRUE;
- } else if (is_recent_dir) {
- *is_recent = TRUE;
- retval = TRUE;
- } else if (is_search_dir) {
- *is_search = TRUE;
- retval = TRUE;
- }
- }
-
- return retval;
+ gboolean *is_recent,
+ gboolean *is_download,
+ gboolean *is_trash,
+ gboolean *is_search)
+{
+ gboolean is_recent_dir, is_download_dir, is_desktop_dir, is_trash_dir, is_search_dir, retval;
+
+ *is_recent = FALSE;
+ *is_download = FALSE;
+ *is_trash = FALSE;
+ *is_search = FALSE;
+ retval = FALSE;
+
+ /* special handling for certain directories */
+ if (file && nautilus_file_is_directory (file))
+ {
+ is_recent_dir =
+ nautilus_file_is_in_recent (file);
+ is_download_dir =
+ nautilus_file_is_user_special_directory (file, G_USER_DIRECTORY_DOWNLOAD);
+ is_desktop_dir =
+ nautilus_file_is_user_special_directory (file, G_USER_DIRECTORY_DESKTOP);
+ is_trash_dir =
+ nautilus_file_is_in_trash (file);
+ is_search_dir =
+ nautilus_file_is_in_search (file);
+
+ if (is_download_dir && !is_desktop_dir)
+ {
+ *is_download = TRUE;
+ retval = TRUE;
+ }
+ else if (is_trash_dir)
+ {
+ *is_trash = TRUE;
+ retval = TRUE;
+ }
+ else if (is_recent_dir)
+ {
+ *is_recent = TRUE;
+ retval = TRUE;
+ }
+ else if (is_search_dir)
+ {
+ *is_search = TRUE;
+ retval = TRUE;
+ }
+ }
+
+ return retval;
}
NautilusFileSortType
nautilus_file_get_default_sort_type (NautilusFile *file,
- gboolean *reversed)
+ gboolean *reversed)
{
- NautilusFileSortType retval;
- gboolean is_recent, is_download, is_trash, is_search, res;
+ NautilusFileSortType retval;
+ gboolean is_recent, is_download, is_trash, is_search, res;
- retval = NAUTILUS_FILE_SORT_NONE;
- is_recent = is_download = is_trash = is_search = FALSE;
- res = get_attributes_for_default_sort_type (file, &is_recent, &is_download, &is_trash, &is_search);
+ retval = NAUTILUS_FILE_SORT_NONE;
+ is_recent = is_download = is_trash = is_search = FALSE;
+ res = get_attributes_for_default_sort_type (file, &is_recent, &is_download, &is_trash, &is_search);
- if (res) {
- if (is_recent) {
- retval = NAUTILUS_FILE_SORT_BY_ATIME;
- } else if (is_download) {
- retval = NAUTILUS_FILE_SORT_BY_MTIME;
- } else if (is_trash) {
- retval = NAUTILUS_FILE_SORT_BY_TRASHED_TIME;
- } else if (is_search) {
- retval = NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE;
- }
+ if (res)
+ {
+ if (is_recent)
+ {
+ retval = NAUTILUS_FILE_SORT_BY_ATIME;
+ }
+ else if (is_download)
+ {
+ retval = NAUTILUS_FILE_SORT_BY_MTIME;
+ }
+ else if (is_trash)
+ {
+ retval = NAUTILUS_FILE_SORT_BY_TRASHED_TIME;
+ }
+ else if (is_search)
+ {
+ retval = NAUTILUS_FILE_SORT_BY_SEARCH_RELEVANCE;
+ }
- if (reversed != NULL) {
- *reversed = res;
- }
- }
+ if (reversed != NULL)
+ {
+ *reversed = res;
+ }
+ }
- return retval;
+ return retval;
}
const gchar *
nautilus_file_get_default_sort_attribute (NautilusFile *file,
- gboolean *reversed)
+ gboolean *reversed)
{
- const gchar *retval;
- gboolean is_recent, is_download, is_trash, is_search, res;
+ const gchar *retval;
+ gboolean is_recent, is_download, is_trash, is_search, res;
- retval = NULL;
- is_download = is_trash = is_search = FALSE;
- res = get_attributes_for_default_sort_type (file, &is_recent, &is_download, &is_trash, &is_search);
+ retval = NULL;
+ is_download = is_trash = is_search = FALSE;
+ res = get_attributes_for_default_sort_type (file, &is_recent, &is_download, &is_trash, &is_search);
- if (res) {
- if (is_recent || is_download) {
- retval = g_quark_to_string (attribute_date_modified_q);
- } else if (is_trash) {
- retval = g_quark_to_string (attribute_trashed_on_q);
- } else if (is_search) {
- retval = g_quark_to_string (attribute_search_relevance_q);
- }
+ if (res)
+ {
+ if (is_recent || is_download)
+ {
+ retval = g_quark_to_string (attribute_date_modified_q);
+ }
+ else if (is_trash)
+ {
+ retval = g_quark_to_string (attribute_trashed_on_q);
+ }
+ else if (is_search)
+ {
+ retval = g_quark_to_string (attribute_search_relevance_q);
+ }
- if (reversed != NULL) {
- *reversed = res;
- }
- }
+ if (reversed != NULL)
+ {
+ *reversed = res;
+ }
+ }
- return retval;
+ return retval;
}
static int
-compare_by_display_name_cover (gconstpointer a, gconstpointer b)
+compare_by_display_name_cover (gconstpointer a,
+ gconstpointer b)
{
- return compare_by_display_name (NAUTILUS_FILE (a), NAUTILUS_FILE (b));
+ return compare_by_display_name (NAUTILUS_FILE (a), NAUTILUS_FILE (b));
}
/**
* nautilus_file_list_sort_by_display_name
- *
+ *
* Sort the list of files by file name.
* @list: GList of files.
**/
GList *
nautilus_file_list_sort_by_display_name (GList *list)
{
- return g_list_sort (list, compare_by_display_name_cover);
+ return g_list_sort (list, compare_by_display_name_cover);
}
static GList *ready_data_list = NULL;
-typedef struct
+typedef struct
{
- GList *file_list;
- GList *remaining_files;
- NautilusFileListCallback callback;
- gpointer callback_data;
+ GList *file_list;
+ GList *remaining_files;
+ NautilusFileListCallback callback;
+ gpointer callback_data;
} FileListReadyData;
static void
file_list_ready_data_free (FileListReadyData *data)
{
- GList *l;
+ GList *l;
- l = g_list_find (ready_data_list, data);
- if (l != NULL) {
- ready_data_list = g_list_delete_link (ready_data_list, l);
+ l = g_list_find (ready_data_list, data);
+ if (l != NULL)
+ {
+ ready_data_list = g_list_delete_link (ready_data_list, l);
- nautilus_file_list_free (data->file_list);
- g_list_free (data->remaining_files);
- g_free (data);
- }
+ nautilus_file_list_free (data->file_list);
+ g_list_free (data->remaining_files);
+ g_free (data);
+ }
}
static FileListReadyData *
-file_list_ready_data_new (GList *file_list,
- NautilusFileListCallback callback,
- gpointer callback_data)
+file_list_ready_data_new (GList *file_list,
+ NautilusFileListCallback callback,
+ gpointer callback_data)
{
- FileListReadyData *data;
+ FileListReadyData *data;
- data = g_new0 (FileListReadyData, 1);
- data->file_list = nautilus_file_list_copy (file_list);
- data->remaining_files = g_list_copy (file_list);
- data->callback = callback;
- data->callback_data = callback_data;
+ data = g_new0 (FileListReadyData, 1);
+ data->file_list = nautilus_file_list_copy (file_list);
+ data->remaining_files = g_list_copy (file_list);
+ data->callback = callback;
+ data->callback_data = callback_data;
- ready_data_list = g_list_prepend (ready_data_list, data);
+ ready_data_list = g_list_prepend (ready_data_list, data);
- return data;
+ return data;
}
static void
file_list_file_ready_callback (NautilusFile *file,
- gpointer user_data)
+ gpointer user_data)
{
- FileListReadyData *data;
+ FileListReadyData *data;
+
+ data = user_data;
+ data->remaining_files = g_list_remove (data->remaining_files, file);
- data = user_data;
- data->remaining_files = g_list_remove (data->remaining_files, file);
-
- if (data->remaining_files == NULL) {
- if (data->callback) {
- (*data->callback) (data->file_list, data->callback_data);
- }
+ if (data->remaining_files == NULL)
+ {
+ if (data->callback)
+ {
+ (*data->callback)(data->file_list, data->callback_data);
+ }
- file_list_ready_data_free (data);
- }
+ file_list_ready_data_free (data);
+ }
}
-void
-nautilus_file_list_call_when_ready (GList *file_list,
- NautilusFileAttributes attributes,
- NautilusFileListHandle **handle,
- NautilusFileListCallback callback,
- gpointer callback_data)
+void
+nautilus_file_list_call_when_ready (GList *file_list,
+ NautilusFileAttributes attributes,
+ NautilusFileListHandle **handle,
+ NautilusFileListCallback callback,
+ gpointer callback_data)
{
- GList *l;
- FileListReadyData *data;
- NautilusFile *file;
-
- g_return_if_fail (file_list != NULL);
+ GList *l;
+ FileListReadyData *data;
+ NautilusFile *file;
+
+ g_return_if_fail (file_list != NULL);
- data = file_list_ready_data_new
- (file_list, callback, callback_data);
+ data = file_list_ready_data_new
+ (file_list, callback, callback_data);
- if (handle) {
- *handle = (NautilusFileListHandle *) data;
- }
+ if (handle)
+ {
+ *handle = (NautilusFileListHandle *) data;
+ }
- l = file_list;
- while (l != NULL) {
- file = NAUTILUS_FILE (l->data);
- /* Need to do this here, as the list can be modified by this call */
- l = l->next;
- nautilus_file_call_when_ready (file,
- attributes,
- file_list_file_ready_callback,
- data);
- }
+ l = file_list;
+ while (l != NULL)
+ {
+ file = NAUTILUS_FILE (l->data);
+ /* Need to do this here, as the list can be modified by this call */
+ l = l->next;
+ nautilus_file_call_when_ready (file,
+ attributes,
+ file_list_file_ready_callback,
+ data);
+ }
}
void
nautilus_file_list_cancel_call_when_ready (NautilusFileListHandle *handle)
{
- GList *l;
- NautilusFile *file;
- FileListReadyData *data;
+ GList *l;
+ NautilusFile *file;
+ FileListReadyData *data;
- g_return_if_fail (handle != NULL);
+ g_return_if_fail (handle != NULL);
- data = (FileListReadyData *) handle;
+ data = (FileListReadyData *) handle;
- l = g_list_find (ready_data_list, data);
- if (l != NULL) {
- for (l = data->remaining_files; l != NULL; l = l->next) {
- file = NAUTILUS_FILE (l->data);
+ l = g_list_find (ready_data_list, data);
+ if (l != NULL)
+ {
+ for (l = data->remaining_files; l != NULL; l = l->next)
+ {
+ file = NAUTILUS_FILE (l->data);
- NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->cancel_call_when_ready
- (file, file_list_file_ready_callback, data);
- }
+ NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (file))->cancel_call_when_ready
+ (file, file_list_file_ready_callback, data);
+ }
- file_list_ready_data_free (data);
- }
+ file_list_ready_data_free (data);
+ }
}
static void
thumbnail_limit_changed_callback (gpointer user_data)
{
- g_settings_get (nautilus_preferences,
- NAUTILUS_PREFERENCES_FILE_THUMBNAIL_LIMIT,
- "t", &cached_thumbnail_limit);
+ g_settings_get (nautilus_preferences,
+ NAUTILUS_PREFERENCES_FILE_THUMBNAIL_LIMIT,
+ "t", &cached_thumbnail_limit);
- /* Tell the world that icons might have changed. We could invent a narrower-scope
- * signal to mean only "thumbnails might have changed" if this ends up being slow
- * for some reason.
- */
- emit_change_signals_for_all_files_in_all_directories ();
+ /* Tell the world that icons might have changed. We could invent a narrower-scope
+ * signal to mean only "thumbnails might have changed" if this ends up being slow
+ * for some reason.
+ */
+ emit_change_signals_for_all_files_in_all_directories ();
}
static void
thumbnail_size_changed_callback (gpointer user_data)
{
- cached_thumbnail_size = g_settings_get_int (nautilus_icon_view_preferences,
- NAUTILUS_PREFERENCES_ICON_VIEW_THUMBNAIL_SIZE);
+ cached_thumbnail_size = g_settings_get_int (nautilus_icon_view_preferences,
+ NAUTILUS_PREFERENCES_ICON_VIEW_THUMBNAIL_SIZE);
- /* Tell the world that icons might have changed. We could invent a narrower-scope
- * signal to mean only "thumbnails might have changed" if this ends up being slow
- * for some reason.
- */
- emit_change_signals_for_all_files_in_all_directories ();
+ /* Tell the world that icons might have changed. We could invent a narrower-scope
+ * signal to mean only "thumbnails might have changed" if this ends up being slow
+ * for some reason.
+ */
+ emit_change_signals_for_all_files_in_all_directories ();
}
static void
show_thumbnails_changed_callback (gpointer user_data)
{
- show_file_thumbs = g_settings_get_enum (nautilus_preferences, NAUTILUS_PREFERENCES_SHOW_FILE_THUMBNAILS);
+ show_file_thumbs = g_settings_get_enum (nautilus_preferences, NAUTILUS_PREFERENCES_SHOW_FILE_THUMBNAILS);
- /* Tell the world that icons might have changed. We could invent a narrower-scope
- * signal to mean only "thumbnails might have changed" if this ends up being slow
- * for some reason.
- */
- emit_change_signals_for_all_files_in_all_directories ();
+ /* Tell the world that icons might have changed. We could invent a narrower-scope
+ * signal to mean only "thumbnails might have changed" if this ends up being slow
+ * for some reason.
+ */
+ emit_change_signals_for_all_files_in_all_directories ();
}
static void
-mime_type_data_changed_callback (GObject *signaller, gpointer user_data)
+mime_type_data_changed_callback (GObject *signaller,
+ gpointer user_data)
{
- /* Tell the world that icons might have changed. We could invent a narrower-scope
- * signal to mean only "thumbnails might have changed" if this ends up being slow
- * for some reason.
- */
- emit_change_signals_for_all_files_in_all_directories ();
+ /* Tell the world that icons might have changed. We could invent a narrower-scope
+ * signal to mean only "thumbnails might have changed" if this ends up being slow
+ * for some reason.
+ */
+ emit_change_signals_for_all_files_in_all_directories ();
}
static void
icon_theme_changed_callback (GtkIconTheme *icon_theme,
- gpointer user_data)
+ gpointer user_data)
{
- /* Clear all pixmap caches as the icon => pixmap lookup changed */
- nautilus_icon_info_clear_caches ();
+ /* Clear all pixmap caches as the icon => pixmap lookup changed */
+ nautilus_icon_info_clear_caches ();
- /* Tell the world that icons might have changed. We could invent a narrower-scope
- * signal to mean only "thumbnails might have changed" if this ends up being slow
- * for some reason.
- */
- emit_change_signals_for_all_files_in_all_directories ();
+ /* Tell the world that icons might have changed. We could invent a narrower-scope
+ * signal to mean only "thumbnails might have changed" if this ends up being slow
+ * for some reason.
+ */
+ emit_change_signals_for_all_files_in_all_directories ();
}
static void
-real_set_metadata (NautilusFile *file,
- const char *key,
- const char *value)
+real_set_metadata (NautilusFile *file,
+ const char *key,
+ const char *value)
{
- /* Dummy default impl */
+ /* Dummy default impl */
}
static void
-real_set_metadata_as_list (NautilusFile *file,
- const char *key,
- char **value)
+real_set_metadata_as_list (NautilusFile *file,
+ const char *key,
+ char **value)
{
- /* Dummy default impl */
+ /* Dummy default impl */
}
static void
nautilus_file_class_init (NautilusFileClass *class)
{
- GtkIconTheme *icon_theme;
-
- nautilus_file_info_getter = nautilus_file_get_internal;
-
- attribute_name_q = g_quark_from_static_string ("name");
- attribute_size_q = g_quark_from_static_string ("size");
- attribute_type_q = g_quark_from_static_string ("type");
- attribute_detailed_type_q = g_quark_from_static_string ("detailed_type");
- attribute_modification_date_q = g_quark_from_static_string ("modification_date");
- attribute_date_modified_q = g_quark_from_static_string ("date_modified");
- attribute_date_modified_full_q = g_quark_from_static_string ("date_modified_full");
- attribute_date_modified_with_time_q = g_quark_from_static_string ("date_modified_with_time");
- attribute_accessed_date_q = g_quark_from_static_string ("accessed_date");
- attribute_date_accessed_q = g_quark_from_static_string ("date_accessed");
- attribute_date_accessed_full_q = g_quark_from_static_string ("date_accessed_full");
- attribute_mime_type_q = g_quark_from_static_string ("mime_type");
- attribute_size_detail_q = g_quark_from_static_string ("size_detail");
- attribute_deep_size_q = g_quark_from_static_string ("deep_size");
- attribute_deep_file_count_q = g_quark_from_static_string ("deep_file_count");
- attribute_deep_directory_count_q = g_quark_from_static_string ("deep_directory_count");
- attribute_deep_total_count_q = g_quark_from_static_string ("deep_total_count");
- attribute_search_relevance_q = g_quark_from_static_string ("search_relevance");
- attribute_trashed_on_q = g_quark_from_static_string ("trashed_on");
- attribute_trashed_on_full_q = g_quark_from_static_string ("trashed_on_full");
- attribute_trash_orig_path_q = g_quark_from_static_string ("trash_orig_path");
- attribute_permissions_q = g_quark_from_static_string ("permissions");
- attribute_selinux_context_q = g_quark_from_static_string ("selinux_context");
- attribute_octal_permissions_q = g_quark_from_static_string ("octal_permissions");
- attribute_owner_q = g_quark_from_static_string ("owner");
- attribute_group_q = g_quark_from_static_string ("group");
- attribute_uri_q = g_quark_from_static_string ("uri");
- attribute_where_q = g_quark_from_static_string ("where");
- attribute_link_target_q = g_quark_from_static_string ("link_target");
- attribute_volume_q = g_quark_from_static_string ("volume");
- attribute_free_space_q = g_quark_from_static_string ("free_space");
-
- G_OBJECT_CLASS (class)->finalize = finalize;
- G_OBJECT_CLASS (class)->constructor = nautilus_file_constructor;
-
- class->set_metadata = real_set_metadata;
- class->set_metadata_as_list = real_set_metadata_as_list;
- class->can_rename = real_can_rename;
- class->rename = real_rename;
- class->get_target_uri = real_get_target_uri;
- class->drag_can_accept_files = real_drag_can_accept_files;
- class->invalidate_attributes_internal = real_invalidate_attributes_internal;
- class->opens_in_view = real_opens_in_view;
- class->is_special_link = real_is_special_link;
-
- signals[CHANGED] =
- g_signal_new ("changed",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NautilusFileClass, changed),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- signals[UPDATED_DEEP_COUNT_IN_PROGRESS] =
- g_signal_new ("updated-deep-count-in-progress",
- G_TYPE_FROM_CLASS (class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (NautilusFileClass, updated_deep_count_in_progress),
- NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE, 0);
-
- g_type_class_add_private (class, sizeof (NautilusFileDetails));
-
- thumbnail_limit_changed_callback (NULL);
- g_signal_connect_swapped (nautilus_preferences,
- "changed::" NAUTILUS_PREFERENCES_FILE_THUMBNAIL_LIMIT,
- G_CALLBACK (thumbnail_limit_changed_callback),
- NULL);
- thumbnail_size_changed_callback (NULL);
- g_signal_connect_swapped (nautilus_preferences,
- "changed::" NAUTILUS_PREFERENCES_ICON_VIEW_THUMBNAIL_SIZE,
- G_CALLBACK (thumbnail_size_changed_callback),
- NULL);
- show_thumbnails_changed_callback (NULL);
- g_signal_connect_swapped (nautilus_preferences,
- "changed::" NAUTILUS_PREFERENCES_SHOW_FILE_THUMBNAILS,
- G_CALLBACK (show_thumbnails_changed_callback),
- NULL);
-
- icon_theme = gtk_icon_theme_get_default ();
- g_signal_connect_object (icon_theme,
- "changed",
- G_CALLBACK (icon_theme_changed_callback),
- NULL, 0);
-
- g_signal_connect (nautilus_signaller_get_current (),
- "mime-data-changed",
- G_CALLBACK (mime_type_data_changed_callback),
- NULL);
+ GtkIconTheme *icon_theme;
+
+ nautilus_file_info_getter = nautilus_file_get_internal;
+
+ attribute_name_q = g_quark_from_static_string ("name");
+ attribute_size_q = g_quark_from_static_string ("size");
+ attribute_type_q = g_quark_from_static_string ("type");
+ attribute_detailed_type_q = g_quark_from_static_string ("detailed_type");
+ attribute_modification_date_q = g_quark_from_static_string ("modification_date");
+ attribute_date_modified_q = g_quark_from_static_string ("date_modified");
+ attribute_date_modified_full_q = g_quark_from_static_string ("date_modified_full");
+ attribute_date_modified_with_time_q = g_quark_from_static_string ("date_modified_with_time");
+ attribute_accessed_date_q = g_quark_from_static_string ("accessed_date");
+ attribute_date_accessed_q = g_quark_from_static_string ("date_accessed");
+ attribute_date_accessed_full_q = g_quark_from_static_string ("date_accessed_full");
+ attribute_mime_type_q = g_quark_from_static_string ("mime_type");
+ attribute_size_detail_q = g_quark_from_static_string ("size_detail");
+ attribute_deep_size_q = g_quark_from_static_string ("deep_size");
+ attribute_deep_file_count_q = g_quark_from_static_string ("deep_file_count");
+ attribute_deep_directory_count_q = g_quark_from_static_string ("deep_directory_count");
+ attribute_deep_total_count_q = g_quark_from_static_string ("deep_total_count");
+ attribute_search_relevance_q = g_quark_from_static_string ("search_relevance");
+ attribute_trashed_on_q = g_quark_from_static_string ("trashed_on");
+ attribute_trashed_on_full_q = g_quark_from_static_string ("trashed_on_full");
+ attribute_trash_orig_path_q = g_quark_from_static_string ("trash_orig_path");
+ attribute_permissions_q = g_quark_from_static_string ("permissions");
+ attribute_selinux_context_q = g_quark_from_static_string ("selinux_context");
+ attribute_octal_permissions_q = g_quark_from_static_string ("octal_permissions");
+ attribute_owner_q = g_quark_from_static_string ("owner");
+ attribute_group_q = g_quark_from_static_string ("group");
+ attribute_uri_q = g_quark_from_static_string ("uri");
+ attribute_where_q = g_quark_from_static_string ("where");
+ attribute_link_target_q = g_quark_from_static_string ("link_target");
+ attribute_volume_q = g_quark_from_static_string ("volume");
+ attribute_free_space_q = g_quark_from_static_string ("free_space");
+
+ G_OBJECT_CLASS (class)->finalize = finalize;
+ G_OBJECT_CLASS (class)->constructor = nautilus_file_constructor;
+
+ class->set_metadata = real_set_metadata;
+ class->set_metadata_as_list = real_set_metadata_as_list;
+ class->can_rename = real_can_rename;
+ class->rename = real_rename;
+ class->get_target_uri = real_get_target_uri;
+ class->drag_can_accept_files = real_drag_can_accept_files;
+ class->invalidate_attributes_internal = real_invalidate_attributes_internal;
+ class->opens_in_view = real_opens_in_view;
+ class->is_special_link = real_is_special_link;
+
+ signals[CHANGED] =
+ g_signal_new ("changed",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NautilusFileClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ signals[UPDATED_DEEP_COUNT_IN_PROGRESS] =
+ g_signal_new ("updated-deep-count-in-progress",
+ G_TYPE_FROM_CLASS (class),
+ G_SIGNAL_RUN_LAST,
+ G_STRUCT_OFFSET (NautilusFileClass, updated_deep_count_in_progress),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE, 0);
+
+ g_type_class_add_private (class, sizeof (NautilusFileDetails));
+
+ thumbnail_limit_changed_callback (NULL);
+ g_signal_connect_swapped (nautilus_preferences,
+ "changed::" NAUTILUS_PREFERENCES_FILE_THUMBNAIL_LIMIT,
+ G_CALLBACK (thumbnail_limit_changed_callback),
+ NULL);
+ thumbnail_size_changed_callback (NULL);
+ g_signal_connect_swapped (nautilus_preferences,
+ "changed::" NAUTILUS_PREFERENCES_ICON_VIEW_THUMBNAIL_SIZE,
+ G_CALLBACK (thumbnail_size_changed_callback),
+ NULL);
+ show_thumbnails_changed_callback (NULL);
+ g_signal_connect_swapped (nautilus_preferences,
+ "changed::" NAUTILUS_PREFERENCES_SHOW_FILE_THUMBNAILS,
+ G_CALLBACK (show_thumbnails_changed_callback),
+ NULL);
+
+ icon_theme = gtk_icon_theme_get_default ();
+ g_signal_connect_object (icon_theme,
+ "changed",
+ G_CALLBACK (icon_theme_changed_callback),
+ NULL, 0);
+
+ g_signal_connect (nautilus_signaller_get_current (),
+ "mime-data-changed",
+ G_CALLBACK (mime_type_data_changed_callback),
+ NULL);
}
static void
nautilus_file_add_emblem (NautilusFile *file,
- const char *emblem_name)
+ const char *emblem_name)
{
- if (file->details->pending_info_providers) {
- file->details->pending_extension_emblems = g_list_prepend (file->details->pending_extension_emblems,
- g_strdup (emblem_name));
- } else {
- file->details->extension_emblems = g_list_prepend (file->details->extension_emblems,
- g_strdup (emblem_name));
- }
+ if (file->details->pending_info_providers)
+ {
+ file->details->pending_extension_emblems = g_list_prepend (file->details->pending_extension_emblems,
+ g_strdup (emblem_name));
+ }
+ else
+ {
+ file->details->extension_emblems = g_list_prepend (file->details->extension_emblems,
+ g_strdup (emblem_name));
+ }
- nautilus_file_changed (file);
+ nautilus_file_changed (file);
}
static void
nautilus_file_add_string_attribute (NautilusFile *file,
- const char *attribute_name,
- const char *value)
-{
- if (file->details->pending_info_providers) {
- /* Lazily create hashtable */
- if (!file->details->pending_extension_attributes) {
- file->details->pending_extension_attributes =
- g_hash_table_new_full (g_direct_hash, g_direct_equal,
- NULL,
- (GDestroyNotify)g_free);
- }
- g_hash_table_insert (file->details->pending_extension_attributes,
- GINT_TO_POINTER (g_quark_from_string (attribute_name)),
- g_strdup (value));
- } else {
- if (!file->details->extension_attributes) {
- file->details->extension_attributes =
- g_hash_table_new_full (g_direct_hash, g_direct_equal,
- NULL,
- (GDestroyNotify)g_free);
- }
- g_hash_table_insert (file->details->extension_attributes,
- GINT_TO_POINTER (g_quark_from_string (attribute_name)),
- g_strdup (value));
- }
-
- nautilus_file_changed (file);
+ const char *attribute_name,
+ const char *value)
+{
+ if (file->details->pending_info_providers)
+ {
+ /* Lazily create hashtable */
+ if (!file->details->pending_extension_attributes)
+ {
+ file->details->pending_extension_attributes =
+ g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ NULL,
+ (GDestroyNotify) g_free);
+ }
+ g_hash_table_insert (file->details->pending_extension_attributes,
+ GINT_TO_POINTER (g_quark_from_string (attribute_name)),
+ g_strdup (value));
+ }
+ else
+ {
+ if (!file->details->extension_attributes)
+ {
+ file->details->extension_attributes =
+ g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ NULL,
+ (GDestroyNotify) g_free);
+ }
+ g_hash_table_insert (file->details->extension_attributes,
+ GINT_TO_POINTER (g_quark_from_string (attribute_name)),
+ g_strdup (value));
+ }
+
+ nautilus_file_changed (file);
}
static void
nautilus_file_invalidate_extension_info (NautilusFile *file)
{
- nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO);
+ nautilus_file_invalidate_attributes (file, NAUTILUS_FILE_ATTRIBUTE_EXTENSION_INFO);
}
void
nautilus_file_info_providers_done (NautilusFile *file)
{
- g_list_free_full (file->details->extension_emblems, g_free);
- file->details->extension_emblems = file->details->pending_extension_emblems;
- file->details->pending_extension_emblems = NULL;
+ g_list_free_full (file->details->extension_emblems, g_free);
+ file->details->extension_emblems = file->details->pending_extension_emblems;
+ file->details->pending_extension_emblems = NULL;
- if (file->details->extension_attributes) {
- g_hash_table_destroy (file->details->extension_attributes);
- }
-
- file->details->extension_attributes = file->details->pending_extension_attributes;
- file->details->pending_extension_attributes = NULL;
+ if (file->details->extension_attributes)
+ {
+ g_hash_table_destroy (file->details->extension_attributes);
+ }
- nautilus_file_changed (file);
+ file->details->extension_attributes = file->details->pending_extension_attributes;
+ file->details->pending_extension_attributes = NULL;
+
+ nautilus_file_changed (file);
}
/* DND */
@@ -8395,72 +9359,80 @@ nautilus_file_info_providers_done (NautilusFile *file)
static gboolean
nautilus_drag_can_accept_files (NautilusFile *drop_target_item)
{
- return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (drop_target_item))->drag_can_accept_files (drop_target_item);
+ return NAUTILUS_FILE_CLASS (G_OBJECT_GET_CLASS (drop_target_item))->drag_can_accept_files (drop_target_item);
}
static gboolean
real_drag_can_accept_files (NautilusFile *drop_target_item)
{
- if (nautilus_file_is_directory (drop_target_item)) {
- NautilusDirectory *directory;
- gboolean res;
+ if (nautilus_file_is_directory (drop_target_item))
+ {
+ NautilusDirectory *directory;
+ gboolean res;
- /* target is a directory, accept if editable */
- directory = nautilus_directory_get_for_file (drop_target_item);
- res = nautilus_directory_is_editable (directory) &&
- nautilus_file_can_write (drop_target_item);
- nautilus_directory_unref (directory);
- return res;
- }
+ /* target is a directory, accept if editable */
+ directory = nautilus_directory_get_for_file (drop_target_item);
+ res = nautilus_directory_is_editable (directory) &&
+ nautilus_file_can_write (drop_target_item);
+ nautilus_directory_unref (directory);
+ return res;
+ }
- /* Launchers are an acceptable drop target */
- if (nautilus_file_is_launcher (drop_target_item)) {
- return TRUE;
- }
+ /* Launchers are an acceptable drop target */
+ if (nautilus_file_is_launcher (drop_target_item))
+ {
+ return TRUE;
+ }
- if (nautilus_is_file_roller_installed () &&
- nautilus_file_is_archive (drop_target_item)) {
- return TRUE;
- }
+ if (nautilus_is_file_roller_installed () &&
+ nautilus_file_is_archive (drop_target_item))
+ {
+ return TRUE;
+ }
- return FALSE;
+ return FALSE;
}
gboolean
nautilus_drag_can_accept_item (NautilusFile *drop_target_item,
const char *item_uri)
{
- if (nautilus_file_matches_uri (drop_target_item, item_uri)) {
- /* can't accept itself */
- return FALSE;
- }
+ if (nautilus_file_matches_uri (drop_target_item, item_uri))
+ {
+ /* can't accept itself */
+ return FALSE;
+ }
- return nautilus_drag_can_accept_files (drop_target_item);
+ return nautilus_drag_can_accept_files (drop_target_item);
}
gboolean
nautilus_drag_can_accept_items (NautilusFile *drop_target_item,
const GList *items)
{
- int max;
+ int max;
- if (drop_target_item == NULL)
- return FALSE;
-
- g_assert (NAUTILUS_IS_FILE (drop_target_item));
-
- /* Iterate through selection checking if item will get accepted by the
- * drop target. If more than 100 items selected, return an over-optimisic
- * result
- */
- for (max = 100; items != NULL && max >= 0; items = items->next, max--) {
- if (!nautilus_drag_can_accept_item (drop_target_item,
- ((NautilusDragSelectionItem *)items->data)->uri)) {
- return FALSE;
- }
- }
+ if (drop_target_item == NULL)
+ {
+ return FALSE;
+ }
+
+ g_assert (NAUTILUS_IS_FILE (drop_target_item));
+
+ /* Iterate through selection checking if item will get accepted by the
+ * drop target. If more than 100 items selected, return an over-optimisic
+ * result
+ */
+ for (max = 100; items != NULL && max >= 0; items = items->next, max--)
+ {
+ if (!nautilus_drag_can_accept_item (drop_target_item,
+ ((NautilusDragSelectionItem *) items->data)->uri))
+ {
+ return FALSE;
+ }
+ }
- return TRUE;
+ return TRUE;
}
gboolean
@@ -8468,50 +9440,59 @@ nautilus_drag_can_accept_info (NautilusFile *drop_target_item,
NautilusIconDndTargetType drag_type,
const GList *items)
{
- switch (drag_type) {
- case NAUTILUS_ICON_DND_GNOME_ICON_LIST:
- return nautilus_drag_can_accept_items (drop_target_item, items);
-
- case NAUTILUS_ICON_DND_URI_LIST:
- case NAUTILUS_ICON_DND_NETSCAPE_URL:
- case NAUTILUS_ICON_DND_TEXT:
- return nautilus_drag_can_accept_files (drop_target_item);
-
- case NAUTILUS_ICON_DND_XDNDDIRECTSAVE:
- case NAUTILUS_ICON_DND_RAW:
- return nautilus_drag_can_accept_files (drop_target_item); /* Check if we can accept files at this location */
-
- case NAUTILUS_ICON_DND_ROOTWINDOW_DROP:
- return FALSE;
-
- default:
- g_assert_not_reached ();
- return FALSE;
- }
+ switch (drag_type)
+ {
+ case NAUTILUS_ICON_DND_GNOME_ICON_LIST:
+ {
+ return nautilus_drag_can_accept_items (drop_target_item, items);
+ }
+
+ case NAUTILUS_ICON_DND_URI_LIST:
+ case NAUTILUS_ICON_DND_NETSCAPE_URL:
+ case NAUTILUS_ICON_DND_TEXT:
+ {
+ return nautilus_drag_can_accept_files (drop_target_item);
+ }
+
+ case NAUTILUS_ICON_DND_XDNDDIRECTSAVE:
+ case NAUTILUS_ICON_DND_RAW:
+ {
+ return nautilus_drag_can_accept_files (drop_target_item); /* Check if we can accept files at this location */
+ }
+
+ case NAUTILUS_ICON_DND_ROOTWINDOW_DROP:
+ {
+ return FALSE;
+ }
+
+ default:
+ g_assert_not_reached ();
+ return FALSE;
+ }
}
static void
nautilus_file_info_iface_init (NautilusFileInfoIface *iface)
{
- iface->is_gone = nautilus_file_is_gone;
- iface->get_name = nautilus_file_get_name;
- iface->get_file_type = nautilus_file_get_file_type;
- iface->get_location = nautilus_file_get_location;
- iface->get_uri = nautilus_file_get_uri;
- iface->get_parent_location = nautilus_file_get_parent_location;
- iface->get_parent_uri = nautilus_file_get_parent_uri;
- iface->get_parent_info = nautilus_file_get_parent;
- iface->get_mount = nautilus_file_get_mount;
- iface->get_uri_scheme = nautilus_file_get_uri_scheme;
- iface->get_activation_uri = nautilus_file_get_activation_uri;
- iface->get_mime_type = nautilus_file_get_mime_type;
- iface->is_mime_type = nautilus_file_is_mime_type;
- iface->is_directory = nautilus_file_is_directory;
- iface->can_write = nautilus_file_can_write;
- iface->add_emblem = nautilus_file_add_emblem;
- iface->get_string_attribute = nautilus_file_get_string_attribute;
- iface->add_string_attribute = nautilus_file_add_string_attribute;
- iface->invalidate_extension_info = nautilus_file_invalidate_extension_info;
+ iface->is_gone = nautilus_file_is_gone;
+ iface->get_name = nautilus_file_get_name;
+ iface->get_file_type = nautilus_file_get_file_type;
+ iface->get_location = nautilus_file_get_location;
+ iface->get_uri = nautilus_file_get_uri;
+ iface->get_parent_location = nautilus_file_get_parent_location;
+ iface->get_parent_uri = nautilus_file_get_parent_uri;
+ iface->get_parent_info = nautilus_file_get_parent;
+ iface->get_mount = nautilus_file_get_mount;
+ iface->get_uri_scheme = nautilus_file_get_uri_scheme;
+ iface->get_activation_uri = nautilus_file_get_activation_uri;
+ iface->get_mime_type = nautilus_file_get_mime_type;
+ iface->is_mime_type = nautilus_file_is_mime_type;
+ iface->is_directory = nautilus_file_is_directory;
+ iface->can_write = nautilus_file_can_write;
+ iface->add_emblem = nautilus_file_add_emblem;
+ iface->get_string_attribute = nautilus_file_get_string_attribute;
+ iface->add_string_attribute = nautilus_file_add_string_attribute;
+ iface->invalidate_extension_info = nautilus_file_invalidate_extension_info;
}
#if !defined (NAUTILUS_OMIT_SELF_CHECK)
@@ -8519,91 +9500,91 @@ nautilus_file_info_iface_init (NautilusFileInfoIface *iface)
void
nautilus_self_check_file (void)
{
- NautilusFile *file_1;
- NautilusFile *file_2;
- GList *list;
+ NautilusFile *file_1;
+ NautilusFile *file_2;
+ GList *list;
+
+ /* refcount checks */
+
+ EEL_CHECK_INTEGER_RESULT (nautilus_directory_number_outstanding (), 0);
+
+ file_1 = nautilus_file_get_by_uri ("file:///home/");
+
+ EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1)->ref_count, 1);
+ EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1->details->directory)->ref_count, 1);
+ EEL_CHECK_INTEGER_RESULT (nautilus_directory_number_outstanding (), 1);
- /* refcount checks */
+ nautilus_file_unref (file_1);
- EEL_CHECK_INTEGER_RESULT (nautilus_directory_number_outstanding (), 0);
+ EEL_CHECK_INTEGER_RESULT (nautilus_directory_number_outstanding (), 0);
- file_1 = nautilus_file_get_by_uri ("file:///home/");
+ file_1 = nautilus_file_get_by_uri ("file:///etc");
+ file_2 = nautilus_file_get_by_uri ("file:///usr");
- EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1)->ref_count, 1);
- EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1->details->directory)->ref_count, 1);
- EEL_CHECK_INTEGER_RESULT (nautilus_directory_number_outstanding (), 1);
+ list = NULL;
+ list = g_list_prepend (list, file_1);
+ list = g_list_prepend (list, file_2);
- nautilus_file_unref (file_1);
+ nautilus_file_list_ref (list);
- EEL_CHECK_INTEGER_RESULT (nautilus_directory_number_outstanding (), 0);
-
- file_1 = nautilus_file_get_by_uri ("file:///etc");
- file_2 = nautilus_file_get_by_uri ("file:///usr");
+ EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1)->ref_count, 2);
+ EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_2)->ref_count, 2);
- list = NULL;
- list = g_list_prepend (list, file_1);
- list = g_list_prepend (list, file_2);
+ nautilus_file_list_unref (list);
- nautilus_file_list_ref (list);
-
- EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1)->ref_count, 2);
- EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_2)->ref_count, 2);
+ EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1)->ref_count, 1);
+ EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_2)->ref_count, 1);
- nautilus_file_list_unref (list);
-
- EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1)->ref_count, 1);
- EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_2)->ref_count, 1);
+ nautilus_file_list_free (list);
- nautilus_file_list_free (list);
+ EEL_CHECK_INTEGER_RESULT (nautilus_directory_number_outstanding (), 0);
- EEL_CHECK_INTEGER_RESULT (nautilus_directory_number_outstanding (), 0);
-
- /* name checks */
- file_1 = nautilus_file_get_by_uri ("file:///home/");
+ /* name checks */
+ file_1 = nautilus_file_get_by_uri ("file:///home/");
- EEL_CHECK_STRING_RESULT (nautilus_file_get_name (file_1), "home");
+ EEL_CHECK_STRING_RESULT (nautilus_file_get_name (file_1), "home");
- EEL_CHECK_BOOLEAN_RESULT (nautilus_file_get_by_uri ("file:///home/") == file_1, TRUE);
- nautilus_file_unref (file_1);
+ EEL_CHECK_BOOLEAN_RESULT (nautilus_file_get_by_uri ("file:///home/") == file_1, TRUE);
+ nautilus_file_unref (file_1);
- EEL_CHECK_BOOLEAN_RESULT (nautilus_file_get_by_uri ("file:///home") == file_1, TRUE);
- nautilus_file_unref (file_1);
+ EEL_CHECK_BOOLEAN_RESULT (nautilus_file_get_by_uri ("file:///home") == file_1, TRUE);
+ nautilus_file_unref (file_1);
- nautilus_file_unref (file_1);
+ nautilus_file_unref (file_1);
- file_1 = nautilus_file_get_by_uri ("file:///home");
- EEL_CHECK_STRING_RESULT (nautilus_file_get_name (file_1), "home");
- nautilus_file_unref (file_1);
+ file_1 = nautilus_file_get_by_uri ("file:///home");
+ EEL_CHECK_STRING_RESULT (nautilus_file_get_name (file_1), "home");
+ nautilus_file_unref (file_1);
- /* ALEX: I removed this, because it was breaking distchecks.
- * It used to work, but when canonical uris changed from
- * foo: to foo:/// it broke. I don't expect it to matter
- * in real life */
- file_1 = nautilus_file_get_by_uri (":");
- EEL_CHECK_STRING_RESULT (nautilus_file_get_name (file_1), ":");
- nautilus_file_unref (file_1);
+ /* ALEX: I removed this, because it was breaking distchecks.
+ * It used to work, but when canonical uris changed from
+ * foo: to foo:/// it broke. I don't expect it to matter
+ * in real life */
+ file_1 = nautilus_file_get_by_uri (":");
+ EEL_CHECK_STRING_RESULT (nautilus_file_get_name (file_1), ":");
+ nautilus_file_unref (file_1);
- file_1 = nautilus_file_get_by_uri ("eazel:");
- EEL_CHECK_STRING_RESULT (nautilus_file_get_name (file_1), "eazel:///");
- nautilus_file_unref (file_1);
+ file_1 = nautilus_file_get_by_uri ("eazel:");
+ EEL_CHECK_STRING_RESULT (nautilus_file_get_name (file_1), "eazel:///");
+ nautilus_file_unref (file_1);
- /* sorting */
- file_1 = nautilus_file_get_by_uri ("file:///etc");
- file_2 = nautilus_file_get_by_uri ("file:///usr");
+ /* sorting */
+ file_1 = nautilus_file_get_by_uri ("file:///etc");
+ file_2 = nautilus_file_get_by_uri ("file:///usr");
- EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1)->ref_count, 1);
- EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_2)->ref_count, 1);
+ EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_1)->ref_count, 1);
+ EEL_CHECK_INTEGER_RESULT (G_OBJECT (file_2)->ref_count, 1);
- EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_2, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, FALSE, FALSE) < 0, TRUE);
- EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_2, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, FALSE, TRUE) > 0, TRUE);
- EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_1, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, FALSE, FALSE) == 0, TRUE);
- EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_1, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, TRUE, FALSE) == 0, TRUE);
- EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_1, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, FALSE, TRUE) == 0, TRUE);
- EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_1, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, TRUE, TRUE) == 0, TRUE);
+ EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_2, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, FALSE, FALSE) < 0, TRUE);
+ EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_2, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, FALSE, TRUE) > 0, TRUE);
+ EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_1, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, FALSE, FALSE) == 0, TRUE);
+ EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_1, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, TRUE, FALSE) == 0, TRUE);
+ EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_1, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, FALSE, TRUE) == 0, TRUE);
+ EEL_CHECK_BOOLEAN_RESULT (nautilus_file_compare_for_sort (file_1, file_1, NAUTILUS_FILE_SORT_BY_DISPLAY_NAME, TRUE, TRUE) == 0, TRUE);
- nautilus_file_unref (file_1);
- nautilus_file_unref (file_2);
+ nautilus_file_unref (file_1);
+ nautilus_file_unref (file_2);
}
#endif /* !NAUTILUS_OMIT_SELF_CHECK */