File nautilus-hide-desktop-files.patch of Package nautilus
? nautilus-vfolder-hidden-files.patch
? libnautilus-extension/Makefile
? libnautilus-extension/Makefile.in
? libnautilus-extension/libnautilus-extension.pc
Index: libnautilus-private/nautilus-file.c
================================================================================
--- libnautilus-private/nautilus-file.c
+++ libnautilus-private/nautilus-file.c
@@ -2356,10 +2356,61 @@
return result;
}
+static gboolean
+exec_exists (const char *exec)
+{
+ if (g_path_is_absolute (exec)) {
+ if (access (exec, X_OK) == 0)
+ return TRUE;
+ else
+ return FALSE;
+ } else {
+ char *tryme;
+
+ tryme = g_find_program_in_path (exec);
+ if (tryme != NULL) {
+ g_free (tryme);
+ return TRUE;
+ }
+ return FALSE;
+ }
+}
gboolean
nautilus_file_is_hidden_file (NautilusFile *file)
{
+ char *scheme;
+
+ scheme = nautilus_file_get_uri_scheme (file);
+
+ if (!strcmp (scheme, "applications")
+ && nautilus_file_is_nautilus_link (file)) {
+ char *uri;
+ char *tryexec;
+
+ uri = nautilus_file_get_uri (file);
+
+ if (nautilus_link_desktop_file_local_is_separator (uri)) {
+ g_free (uri);
+ g_free (scheme);
+ return TRUE;
+ }
+
+ tryexec = nautilus_link_desktop_file_local_get_tryexec (uri);
+ if (tryexec && tryexec[0] && !exec_exists (tryexec)) {
+ g_free (tryexec);
+ g_free (uri);
+ g_free (scheme);
+
+ return TRUE;
+ }
+
+ g_free (uri);
+ g_free (tryexec);
+ }
+
+ g_free (scheme);
+
return nautilus_file_name_matches_hidden_pattern
(file->details->relative_uri);
}
--- libnautilus-private/nautilus-link-desktop-file.c
+++ libnautilus-private/nautilus-link-desktop-file.c
@@ -249,6 +249,31 @@
return retval;
}
+gboolean
+nautilus_link_desktop_file_local_is_separator (const char *uri)
+{
+ char *type;
+ gboolean ret;
+
+ type = slurp_key_string (uri, "Type", FALSE);
+
+ if (!strcmp (type, "Separator")) {
+ ret = TRUE;
+ } else {
+ ret = FALSE;
+ }
+
+ g_free (type);
+
+ return ret;
+}
+
+char *
+nautilus_link_desktop_file_local_get_tryexec (const char *uri)
+{
+ return slurp_key_string (uri, "TryExec", FALSE);
+}
+
static char *
nautilus_link_desktop_file_get_link_name_from_desktop (GnomeDesktopItem *desktop_file)
{
--- libnautilus-private/nautilus-link-desktop-file.h
+++ libnautilus-private/nautilus-link-desktop-file.h
@@ -52,4 +52,7 @@
const GdkPoint *position,
int screen);
+gboolean nautilus_link_desktop_file_local_is_separator (const char *uri);
+char *nautilus_link_desktop_file_local_get_tryexec (const char *uri);
+
#endif /* NAUTILUS_LINK_DESKTOP_FILE_H */