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.c103
1 files changed, 102 insertions, 1 deletions
diff --git a/src/nautilus-file.c b/src/nautilus-file.c
index 2d668c1ce..e8a631423 100644
--- a/src/nautilus-file.c
+++ b/src/nautilus-file.c
@@ -40,6 +40,7 @@
#include "nautilus-vfs-file.h"
#include "nautilus-file-undo-operations.h"
#include "nautilus-file-undo-manager.h"
+#include "nautilus-tag-manager.h"
#include <eel/eel-debug.h>
#include <eel/eel-glib-extensions.h>
#include <eel/eel-gtk-extensions.h>
@@ -159,7 +160,8 @@ static GQuark attribute_name_q,
attribute_where_q,
attribute_link_target_q,
attribute_volume_q,
- attribute_free_space_q;
+ attribute_free_space_q,
+ attribute_favorite_q;
static void nautilus_file_info_iface_init (NautilusFileInfoIface *iface);
static char *nautilus_file_get_owner_as_string (NautilusFile *file,
@@ -3658,6 +3660,39 @@ compare_by_type (NautilusFile *file_1,
return result;
}
+static int
+compare_by_favorite (NautilusFile *file_1,
+ NautilusFile *file_2)
+{
+ NautilusTagManager *tag_manager;
+ g_autofree gchar *uri_1 = NULL;
+ g_autofree gchar *uri_2 = NULL;
+ gboolean file_1_is_favorite;
+ gboolean file_2_is_favorite;
+
+ tag_manager = nautilus_tag_manager_get ();
+
+ uri_1 = nautilus_file_get_uri (file_1);
+ uri_2 = nautilus_file_get_uri (file_2);
+
+ file_1_is_favorite = nautilus_tag_manager_file_is_favorite (tag_manager,
+ uri_1);
+ file_2_is_favorite = nautilus_tag_manager_file_is_favorite (tag_manager,
+ uri_2);
+ if (!!file_1_is_favorite == !!file_2_is_favorite)
+ {
+ return 0;
+ }
+ else if (file_1_is_favorite && !file_2_is_favorite)
+ {
+ return -1;
+ }
+ else
+ {
+ return 1;
+ }
+}
+
static Knowledge
get_search_relevance (NautilusFile *file,
gdouble *relevance_out)
@@ -3861,6 +3896,16 @@ nautilus_file_compare_for_sort (NautilusFile *file_1,
}
break;
+ case NAUTILUS_FILE_SORT_BY_FAVORITE:
+ {
+ result = compare_by_favorite (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);
@@ -3965,6 +4010,13 @@ nautilus_file_compare_for_sort_by_attribute_q (NautilusFile *file_1,
directories_first,
reversed);
}
+ else if (attribute == attribute_favorite_q)
+ {
+ return nautilus_file_compare_for_sort (file_1, file_2,
+ NAUTILUS_FILE_SORT_BY_FAVORITE,
+ 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,
@@ -4572,6 +4624,11 @@ nautilus_file_peek_display_name (NautilusFile *file)
char *
nautilus_file_get_display_name (NautilusFile *file)
{
+ if (nautilus_file_is_other_locations (file))
+ return g_strdup (_("Other Locations"));
+ if (nautilus_file_is_favorite_location (file))
+ return g_strdup (_("Starred"));
+
return g_strdup (nautilus_file_peek_display_name (file));
}
@@ -7604,6 +7661,11 @@ nautilus_file_get_string_attribute_with_default_q (NautilusFile *file,
/* If n/a */
return g_strdup ("");
}
+ if (attribute_q == attribute_favorite_q)
+ {
+ /* If n/a */
+ return g_strdup ("");
+ }
/* Fallback, use for both unknown attributes and attributes
* for which we have no more appropriate default.
@@ -8293,6 +8355,23 @@ nautilus_file_is_in_recent (NautilusFile *file)
return nautilus_directory_is_in_recent (file->details->directory);
}
+/**
+ * nautilus_file_is_in_starred
+ *
+ * Check if this file is a file in Starred.
+ * @file: NautilusFile representing the file in question.
+ *
+ * Returns: TRUE if @file is in Starred.
+ *
+ **/
+gboolean
+nautilus_file_is_in_starred (NautilusFile *file)
+{
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ return nautilus_directory_is_in_starred (file->details->directory);
+}
+
static const gchar * const remote_types[] =
{
"afp",
@@ -8352,6 +8431,27 @@ nautilus_file_is_other_locations (NautilusFile *file)
}
/**
+ * nautilus_file_is_favorite_location
+ *
+ * Check if this file is the Favorite location.
+ * @file: NautilusFile representing the file in question.
+ *
+ * Returns: TRUE if @file is the Favorite location.
+ *
+ **/
+gboolean
+nautilus_file_is_favorite_location (NautilusFile *file)
+{
+ g_autofree gchar *uri = NULL;
+
+ g_assert (NAUTILUS_IS_FILE (file));
+
+ uri = nautilus_file_get_uri (file);
+
+ return eel_uri_is_favorites (uri);
+}
+
+/**
* nautilus_file_is_in_admin
*
* Check if this file is using admin backend.
@@ -9366,6 +9466,7 @@ nautilus_file_class_init (NautilusFileClass *class)
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");
+ attribute_favorite_q = g_quark_from_static_string ("favorite");
G_OBJECT_CLASS (class)->finalize = finalize;
G_OBJECT_CLASS (class)->constructor = nautilus_file_constructor;