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 */
openSUSE Build Service is sponsored by