From 58b704ad8b473600d7f7ad57aa5535e5be5dbd24 Mon Sep 17 00:00:00 2001 From: William Jon McCann Date: Wed, 22 Aug 2012 11:26:21 -0400 Subject: 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 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 -- cgit v1.2.1