summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2012-08-22 11:26:21 -0400
committerWilliam Jon McCann <jmccann@redhat.com>2012-08-22 14:22:12 -0400
commit58b704ad8b473600d7f7ad57aa5535e5be5dbd24 (patch)
tree44309e7db0db61f847a859a0d8f678b4c8c23767
parent216e50f40e816e7fcc0e1fdaf3a4c8e3e816b990 (diff)
downloadnautilus-58b704ad8b473600d7f7ad57aa5535e5be5dbd24.tar.gz
Don't show the open with tab if it is going to be useless
-rw-r--r--libnautilus-private/nautilus-file.c15
-rw-r--r--libnautilus-private/nautilus-file.h1
-rw-r--r--libnautilus-private/nautilus-mime-application-chooser.c32
-rw-r--r--src/nautilus-properties-window.c46
4 files changed, 47 insertions, 47 deletions
diff --git a/libnautilus-private/nautilus-file.c b/libnautilus-private/nautilus-file.c
index 847a7b066..51a1eb4b6 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 79677b217..c80b4f37a 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 41bb54d6a..b78bae26b 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 bfb7c0c23..20f16284c 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