[nautilus] Don't show the open with tab if it is going to be useless



commit 58b704ad8b473600d7f7ad57aa5535e5be5dbd24
Author: William Jon McCann <jmccann redhat com>
Date:   Wed Aug 22 11:26:21 2012 -0400

    Don't show the open with tab if it is going to be useless

 libnautilus-private/nautilus-file.c                |   15 ++++++
 libnautilus-private/nautilus-file.h                |    1 +
 .../nautilus-mime-application-chooser.c            |   32 +-------------
 src/nautilus-properties-window.c                   |   46 ++++++++++++-------
 4 files changed, 47 insertions(+), 47 deletions(-)
---
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 847a7b0..51a1eb4 100644
--- a/libnautilus-private/nautilus-file.c
+++ b/libnautilus-private/nautilus-file.c
@@ -6266,6 +6266,21 @@ nautilus_file_is_mime_type (NautilusFile *file, const char *mime_type)
 				    mime_type);
 }
 
+char *
+nautilus_file_get_extension (NautilusFile *file)
+{
+	char *name;
+	char *extension = NULL;
+
+	name = nautilus_file_get_name (file);
+	if (name != NULL) {
+		extension = g_strdup (eel_filename_get_extension_offset (name));
+		g_free (name);
+	}
+
+	return extension;
+}
+
 gboolean
 nautilus_file_is_launchable (NautilusFile *file)
 {
diff --git a/libnautilus-private/nautilus-file.h b/libnautilus-private/nautilus-file.h
index 79677b2..c80b4f3 100644
--- a/libnautilus-private/nautilus-file.h
+++ b/libnautilus-private/nautilus-file.h
@@ -171,6 +171,7 @@ goffset                 nautilus_file_get_size                          (Nautilu
 time_t                  nautilus_file_get_mtime                         (NautilusFile                   *file);
 GFileType               nautilus_file_get_file_type                     (NautilusFile                   *file);
 char *                  nautilus_file_get_mime_type                     (NautilusFile                   *file);
+char *                  nautilus_file_get_extension                     (NautilusFile                   *file);
 gboolean                nautilus_file_is_mime_type                      (NautilusFile                   *file,
 									 const char                     *mime_type);
 gboolean                nautilus_file_is_launchable                     (NautilusFile                   *file);
diff --git a/libnautilus-private/nautilus-mime-application-chooser.c b/libnautilus-private/nautilus-mime-application-chooser.c
index 41bb54d..b78bae2 100644
--- a/libnautilus-private/nautilus-mime-application-chooser.c
+++ b/libnautilus-private/nautilus-mime-application-chooser.c
@@ -237,34 +237,6 @@ application_selected_cb (GtkAppChooserWidget *widget,
 				  app_info_can_add (info, chooser->details->content_type));
 }
 
-static char *
-get_extension (const char *basename)
-{
-	char *p;
-	
-	p = strrchr (basename, '.');
-	
-	if (p && *(p + 1) != '\0') {
-		return g_strdup (p + 1);
-	} else {
-		return NULL;
-	}
-}
-
-static gchar *
-get_extension_from_file (NautilusFile *nfile)
-{
-	char *name;
-	char *extension;
-
-	name = nautilus_file_get_name (nfile);
-	extension = get_extension (name);
-
-	g_free (name);
-
-	return extension;
-}
-
 static void
 nautilus_mime_application_chooser_apply_labels (NautilusMimeApplicationChooser *chooser)
 {
@@ -273,7 +245,7 @@ nautilus_mime_application_chooser_apply_labels (NautilusMimeApplicationChooser *
 	if (chooser->details->files != NULL) {
 		/* here we assume all files are of the same content type */
 		if (g_content_type_is_unknown (chooser->details->content_type)) {
-			extension = get_extension_from_file (NAUTILUS_FILE (chooser->details->files->data));
+			extension = nautilus_file_get_extension (NAUTILUS_FILE (chooser->details->files->data));
 
 			/* the %s here is a file extension */
 			description = g_strdup_printf (_("%s document"), extension);
@@ -291,7 +263,7 @@ nautilus_mime_application_chooser_apply_labels (NautilusMimeApplicationChooser *
 		basename = g_file_get_basename (file);
 
 		if (g_content_type_is_unknown (chooser->details->content_type)) {
-			extension = get_extension (basename);
+			extension = nautilus_file_get_extension (file);
 
 			/* the %s here is a file extension */
 			description = g_strdup_printf (_("%s document"), extension);
diff --git a/src/nautilus-properties-window.c b/src/nautilus-properties-window.c
index bfb7c0c..20f1628 100644
--- a/src/nautilus-properties-window.c
+++ b/src/nautilus-properties-window.c
@@ -4577,6 +4577,9 @@ static gboolean
 should_show_open_with (NautilusPropertiesWindow *window)
 {
 	NautilusFile *file;
+	char *mime_type;
+	char *extension;
+	gboolean hide;
 
 	/* Don't show open with tab for desktop special icons (trash, etc)
 	 * or desktop files. We don't get the open-with menu for these anyway.
@@ -4584,31 +4587,40 @@ should_show_open_with (NautilusPropertiesWindow *window)
 	 * Also don't show it for folders. Changing the default app for folders
 	 * leads to all sort of hard to understand errors.
 	 */
-	
+
 	if (is_multi_file_window (window)) {
-		if (!file_list_attributes_identical (window->details->original_files,
+		GList *l;
+
+		if (!file_list_attributes_identical (window->details->target_files,
 						     "mime_type")) {
 			return FALSE;
-		} else {
-			
-			GList *l;
-			
-			for (l = window->details->original_files; l; l = l->next) {
-				file = NAUTILUS_FILE (l->data);
-				if (nautilus_file_is_directory (file) ||
-				    is_a_special_file (file)) {
-					return FALSE;
-				}
+		}
+
+		for (l = window->details->target_files; l; l = l->next) {
+			file = NAUTILUS_FILE (l->data);
+			if (nautilus_file_is_directory (file) || is_a_special_file (file)) {
+				return FALSE;
 			}
-		}		
+		}
+
+		/* since we just confirmed all the mime types are the
+		   same we only need to test one file */
+		file = window->details->target_files->data;
 	} else {
-		file = get_original_file (window);
-		if (nautilus_file_is_directory (file) ||
-		    is_a_special_file (file)) {
+		file = get_target_file (window);
+
+		if (nautilus_file_is_directory (file) || is_a_special_file (file)) {
 			return FALSE;
 		}
 	}
-	return TRUE;
+
+	mime_type = nautilus_file_get_mime_type (file);
+	extension = nautilus_file_get_extension (file);
+	hide = (g_content_type_is_unknown (mime_type) && extension == NULL);
+	g_free (mime_type);
+	g_free (extension);
+
+	return !hide;
 }
 
 static void



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