[nautilus/gnome-2-32: 128/283] Add methods to get per-file default sort type/attribute.



commit 041821d55fe0dda71a7bad80cd6b0d6253456245
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Mon Jun 7 14:56:26 2010 +0200

    Add methods to get per-file default sort type/attribute.

 libnautilus-private/nautilus-file.c |   84 +++++++++++++++++++++++++++++++++++
 libnautilus-private/nautilus-file.h |    5 ++
 2 files changed, 89 insertions(+), 0 deletions(-)
---
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 39f8a09..89bbb98 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -7690,6 +7690,90 @@ nautilus_file_list_from_uris (GList *uri_list)
 	return g_list_reverse (file_list);
 }
 
+static gboolean
+get_attributes_for_default_sort_type (NautilusFile *file,
+				      gboolean *is_download,
+				      gboolean *is_trash)
+{
+	gboolean is_download_dir, is_desktop_dir, is_trash_dir, retval;
+
+	*is_download = FALSE;
+	*is_trash = FALSE;
+	retval = FALSE;
+
+	/* special handling for certain directories */
+	if (file && nautilus_file_is_directory (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);
+
+		if (is_download_dir && !is_desktop_dir) {
+			*is_download = TRUE;
+			retval = TRUE;
+		} else if (is_trash_dir) {
+			*is_trash = TRUE;
+			retval = TRUE;
+		}
+	}
+
+	return retval;
+}
+
+NautilusFileSortType
+nautilus_file_get_default_sort_type (NautilusFile *file,
+				     gboolean *reversed)
+{
+	NautilusFileSortType retval;
+	gboolean is_download, is_trash, res;
+
+	retval = NAUTILUS_FILE_SORT_NONE;
+	is_download = is_trash = FALSE;
+	res = get_attributes_for_default_sort_type (file, &is_download, &is_trash);
+
+	if (res) {
+		if (is_download) {
+			retval = NAUTILUS_FILE_SORT_BY_MTIME;
+		} else if (is_trash) {
+			retval = NAUTILUS_FILE_SORT_BY_TRASHED_TIME;
+		}
+
+		if (reversed != NULL) {
+			*reversed = res;
+		}
+	}
+
+	return retval;
+}
+
+const gchar *
+nautilus_file_get_default_sort_attribute (NautilusFile *file,
+					  gboolean *reversed)
+{
+	const gchar *retval;
+	gboolean is_download, is_trash, res;
+
+	retval = NULL;
+	is_download = is_trash = FALSE;
+	res = get_attributes_for_default_sort_type (file, &is_download, &is_trash);
+
+	if (res) {
+		if (is_download) {
+			retval = g_quark_to_string (attribute_date_modified_q);
+		} else if (is_trash) {
+			retval = g_quark_to_string (attribute_trashed_on_q);
+		}
+
+		if (reversed != NULL) {
+			*reversed = res;
+		}
+	}
+
+	return retval;
+}
+
 static int
 compare_by_display_name_cover (gconstpointer a, gconstpointer b)
 {
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index 098df2f..011f215 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -392,6 +392,11 @@ gboolean                nautilus_file_matches_uri                       (Nautilu
 gboolean                nautilus_file_is_local                          (NautilusFile                   *file);
 
 /* Comparing two file objects for sorting */
+NautilusFileSortType    nautilus_file_get_default_sort_type             (NautilusFile                   *file,
+									 gboolean                       *reversed);
+const gchar *           nautilus_file_get_default_sort_attribute        (NautilusFile                   *file,
+									 gboolean                       *reversed);
+
 int                     nautilus_file_compare_for_sort                  (NautilusFile                   *file_1,
 									 NautilusFile                   *file_2,
 									 NautilusFileSortType            sort_type,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]