Am Sonntag, den 31.07.2005, 01:22 +0200 schrieb Christian Neumair: > From bug 168561 [1]: > > "When I open "Computer" in the File Browser, the Information sidebar > shows "x-directory/normal, 11 items". This is very silly considering > that my computer is not a directory." > > The proposed patches introduce a concept of "abstract" files which don't > map to actual inodes, i.e. "computer:///", "network:///", > "x-nautilus-desktop:///" etc.. All of them should not expose their file > type to the user, since the information is generally crap. I've just > noticed that I didn't add "fonts:///" and "burn:///", but this would be > trivial to add. Maybe you remember any other URIs that are abstract? > For now I'm just interested in architectural feedback :). > > Note that we can later adapt [2] to this API where appropriate, although > this is not yet a priority. > > [1] http://bugzilla.gnome.org/show_bug.cgi?id=168561 > [2] http://mail.gnome.org/archives/nautilus-list/2005-July/msg00331.html Attaching patches is fun. Forgetting to do so not. -- Christian Neumair <chris gnome-de org>
Index: libnautilus-private/nautilus-desktop-directory-file.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-desktop-directory-file.c,v
retrieving revision 1.1
diff -u -p -r1.1 nautilus-desktop-directory-file.c
--- libnautilus-private/nautilus-desktop-directory-file.c 15 May 2003 17:18:42 -0000 1.1
+++ libnautilus-private/nautilus-desktop-directory-file.c 30 Jul 2005 23:10:32 -0000
@@ -442,6 +442,11 @@ desktop_directory_file_get_where_string
return g_strdup (_("on the desktop"));
}
+static gboolean
+desktop_directory_file_is_abstract (NautilusFile *file)
+{
+ return TRUE;
+}
static void
monitor_destroy (gpointer data)
@@ -546,4 +551,5 @@ nautilus_desktop_directory_file_class_in
file_class->get_deep_counts = desktop_directory_file_get_deep_counts;
file_class->get_date = desktop_directory_file_get_date;
file_class->get_where_string = desktop_directory_file_get_where_string;
+ file_class->is_abstract = desktop_directory_file_is_abstract;
}
Index: libnautilus-private/nautilus-desktop-icon-file.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-desktop-icon-file.c,v
retrieving revision 1.6
diff -u -p -r1.6 nautilus-desktop-icon-file.c
--- libnautilus-private/nautilus-desktop-icon-file.c 22 Feb 2005 10:41:46 -0000 1.6
+++ libnautilus-private/nautilus-desktop-icon-file.c 30 Jul 2005 23:10:32 -0000
@@ -163,6 +163,12 @@ desktop_icon_file_get_where_string (Naut
return g_strdup (_("on the desktop"));
}
+static gboolean
+desktop_icon_file_is_abstract (NautilusFile *file)
+{
+ return TRUE;
+}
+
static void
nautilus_desktop_icon_file_init (gpointer object, gpointer klass)
{
@@ -354,4 +360,5 @@ nautilus_desktop_icon_file_class_init (g
file_class->get_deep_counts = desktop_icon_file_get_deep_counts;
file_class->get_date = desktop_icon_file_get_date;
file_class->get_where_string = desktop_icon_file_get_where_string;
+ file_class->is_abstract = desktop_icon_file_is_abstract;
}
Index: libnautilus-private/nautilus-file.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-file.c,v
retrieving revision 1.367
diff -u -p -r1.367 nautilus-file.c
--- libnautilus-private/nautilus-file.c 16 Jun 2005 15:18:35 -0000 1.367
+++ libnautilus-private/nautilus-file.c 30 Jul 2005 23:10:37 -0000
@@ -2918,6 +2918,27 @@ nautilus_file_get_where_string (Nautilus
get_where_string, (file));
}
+/**
+ * nautilus_file_is_abstract:
+ *
+ * Get whether a file represents an abstract concept rather than an actual inode.
+ * @file: NautilusFile representing the file in question.
+ *
+ * Returns: Whether the file represents an abstract concept.
+ *
+ **/
+gboolean
+nautilus_file_is_abstract (NautilusFile *file)
+{
+ if (file == NULL) {
+ return FALSE;
+ }
+
+ return EEL_CALL_METHOD_WITH_RETURN_VALUE
+ (NAUTILUS_FILE_CLASS, file,
+ is_abstract, (file));
+}
+
const char *TODAY_TIME_FORMATS [] = {
/* Today, use special word.
* strftime patterns preceeded with the widest
Index: libnautilus-private/nautilus-file.h
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-file.h,v
retrieving revision 1.105
diff -u -p -r1.105 nautilus-file.h
--- libnautilus-private/nautilus-file.h 11 Oct 2004 12:55:13 -0000 1.105
+++ libnautilus-private/nautilus-file.h 30 Jul 2005 23:10:37 -0000
@@ -165,6 +165,7 @@ NautilusRequestStatus nautilus_file_ge
guint *unreadable_directory_count,
GnomeVFSFileSize *total_size);
gboolean nautilus_file_should_show_directory_item_count (NautilusFile *file);
+gboolean nautilus_file_is_abstract (NautilusFile *file);
GList * nautilus_file_get_keywords (NautilusFile *file);
void nautilus_file_set_keywords (NautilusFile *file,
GList *keywords);
@@ -398,6 +399,7 @@ typedef struct {
NautilusDateType type,
time_t *date);
char * (* get_where_string) (NautilusFile *file);
+ gboolean (* is_abstract) (NautilusFile *file);
} NautilusFileClass;
#endif /* NAUTILUS_FILE_H */
@@ -690,6 +718,11 @@ trash_file_get_where_string (NautilusFil
return g_strdup (_("on the desktop"));
}
+static gboolean
+trash_file_is_abstract (NautilusFile *file)
+{
+ return TRUE;
+}
static void
remove_all_real_files (NautilusTrashFile *trash)
@@ -779,4 +812,5 @@ nautilus_trash_file_class_init (gpointer
file_class->get_deep_counts = trash_file_get_deep_counts;
file_class->get_date = trash_file_get_date;
file_class->get_where_string = trash_file_get_where_string;
+ file_class->is_abstract = trash_file_is_abstract;
}
Index: libnautilus-private/nautilus-vfs-file.c
===================================================================
RCS file: /cvs/gnome/nautilus/libnautilus-private/nautilus-vfs-file.c,v
retrieving revision 1.16
diff -u -p -r1.16 nautilus-vfs-file.c
--- libnautilus-private/nautilus-vfs-file.c 2 Apr 2003 11:51:01 -0000 1.16
+++ libnautilus-private/nautilus-vfs-file.c 30 Jul 2005 23:10:39 -0000
@@ -29,6 +29,7 @@
#include "nautilus-directory-private.h"
#include "nautilus-file-private.h"
#include <eel/eel-gtk-macros.h>
+#include <string.h>
static void nautilus_vfs_file_init (gpointer object,
gpointer klass);
@@ -228,6 +229,21 @@ vfs_file_get_where_string (NautilusFile
return nautilus_file_get_parent_uri_for_display (file);
}
+static gboolean
+vfs_file_is_abstract (NautilusFile *file)
+{
+ char *uri;
+ gboolean ret;
+
+ uri = nautilus_file_get_uri (file);
+ ret = ((strcmp (uri, "computer:///") == 0)
+ || (strcmp (uri, "network:///") == 0)
+ || (strcmp (uri, "smb:///") == 0));
+ g_free (uri);
+
+ return ret;
+}
+
static void
nautilus_vfs_file_init (gpointer object, gpointer klass)
{
@@ -254,4 +270,5 @@ nautilus_vfs_file_class_init (gpointer k
file_class->get_deep_counts = vfs_file_get_deep_counts;
file_class->get_date = vfs_file_get_date;
file_class->get_where_string = vfs_file_get_where_string;
+ file_class->is_abstract = vfs_file_is_abstract;
}
Index: src/nautilus-sidebar-title.c
===================================================================
RCS file: /cvs/gnome/nautilus/src/nautilus-sidebar-title.c,v
retrieving revision 1.152
diff -u -p -r1.152 nautilus-sidebar-title.c
--- src/nautilus-sidebar-title.c 15 Jul 2005 13:47:53 -0000 1.152
+++ src/nautilus-sidebar-title.c 30 Jul 2005 23:10:49 -0000
@@ -447,7 +447,10 @@ update_more_info (NautilusSidebarTitle *
g_free (component_info);
} else {
info_string = g_string_new (NULL);
- type_string = nautilus_file_get_string_attribute (file, "type");
+ type_string = NULL;
+ if (nautilus_file_is_abstract (file)) {
+ type_string = nautilus_file_get_string_attribute (file, "type");
+ }
if (type_string != NULL) {
append_and_eat (info_string, NULL, type_string);
append_and_eat (info_string, ", ",
Attachment:
signature.asc
Description: This is a digitally signed message part