diff options
-rw-r--r-- | caja/caja-engrampa.c | 123 |
1 files changed, 67 insertions, 56 deletions
diff --git a/caja/caja-engrampa.c b/caja/caja-engrampa.c index 2229df2..269fe7c 100644 --- a/caja/caja-engrampa.c +++ b/caja/caja-engrampa.c @@ -140,63 +140,66 @@ add_callback (CajaMenuItem *item, } -static char *mime_types[] = { - "application/x-7z-compressed", - "application/x-7z-compressed-tar", - "application/x-ace", - "application/x-alz", - "application/x-ar", - "application/x-arj", - "application/x-bzip", - "application/x-bzip-compressed-tar", - "application/x-bzip1", - "application/x-bzip1-compressed-tar", - "application/vnd.ms-cab-compressed", - "application/x-cbr", - "application/x-cbz", - "application/x-cd-image", - "application/x-compress", - "application/x-compressed-tar", - "application/x-cpio", - "application/x-deb", - "application/x-ear", - "application/x-ms-dos-executable", - "application/x-gtar", - "application/x-gzip", - "application/x-gzpostscript", - "application/x-java-archive", - "application/x-lha", - "application/x-lhz", - "application/x-lzip", - "application/x-lzip-compressed-tar", - "application/x-lzma", - "application/x-lzma-compressed-tar", - "application/x-lzop", - "application/x-lzop-compressed-tar", - "application/x-ms-wim", - "application/x-rar", - "application/x-rar-compressed", - "application/x-rpm", - "application/x-rzip", - "application/x-tar", - "application/x-tarz", - "application/x-stuffit", - "application/x-war", - "application/x-xz", - "application/x-xz-compressed-tar", - "application/x-zip", - "application/x-zip-compressed", - "application/x-zoo", - "application/zip", - "multipart/x-zip", - NULL +static struct { + char *mime_type; + gboolean is_compressed; +} archive_mime_types[] = { + { "application/x-7z-compressed", TRUE }, + { "application/x-7z-compressed-tar", TRUE }, + { "application/x-ace", TRUE }, + { "application/x-alz", TRUE }, + { "application/x-ar", TRUE }, + { "application/x-arj", TRUE }, + { "application/x-bzip", TRUE }, + { "application/x-bzip-compressed-tar", TRUE }, + { "application/x-bzip1", TRUE }, + { "application/x-bzip1-compressed-tar", TRUE }, + { "application/vnd.ms-cab-compressed", TRUE }, + { "application/x-cbr", TRUE }, + { "application/x-cbz", TRUE }, + { "application/x-cd-image", FALSE }, + { "application/x-compress", TRUE }, + { "application/x-compressed-tar", TRUE }, + { "application/x-cpio", TRUE }, + { "application/x-deb", TRUE }, + { "application/x-ear", TRUE }, + { "application/x-ms-dos-executable", FALSE }, + { "application/x-gtar", FALSE }, + { "application/x-gzip", TRUE }, + { "application/x-gzpostscript", TRUE }, + { "application/x-java-archive", TRUE }, + { "application/x-lha", TRUE }, + { "application/x-lhz", TRUE }, + { "application/x-lzip", TRUE }, + { "application/x-lzip-compressed-tar", TRUE }, + { "application/x-lzma", TRUE }, + { "application/x-lzma-compressed-tar", TRUE }, + { "application/x-lzop", TRUE }, + { "application/x-lzop-compressed-tar", TRUE }, + { "application/x-ms-wim", TRUE }, + { "application/x-rar", TRUE }, + { "application/x-rar-compressed", TRUE }, + { "application/x-rpm", TRUE }, + { "application/x-rzip", TRUE }, + { "application/x-tar", FALSE }, + { "application/x-tarz", TRUE }, + { "application/x-stuffit", TRUE }, + { "application/x-war", TRUE }, + { "application/x-xz", TRUE }, + { "application/x-xz-compressed-tar", TRUE }, + { "application/x-zip", TRUE }, + { "application/x-zip-compressed", TRUE }, + { "application/x-zoo", TRUE }, + { "application/zip", TRUE }, + { "multipart/x-zip", TRUE }, + { NULL, FALSE } }; -typedef struct -{ +typedef struct { gboolean is_archive; gboolean is_derived_archive; + gboolean is_compressed_archive; } FileMimeInfo; @@ -208,9 +211,10 @@ get_file_mime_info (CajaFileInfo *file) file_mime_info.is_archive = FALSE; file_mime_info.is_derived_archive = FALSE; + file_mime_info.is_compressed_archive = FALSE; - for (i = 0; mime_types[i] != NULL; i++) - if (caja_file_info_is_mime_type (file, mime_types[i])) { + for (i = 0; archive_mime_types[i].mime_type != NULL; i++) + if (caja_file_info_is_mime_type (file, archive_mime_types[i].mime_type)) { char *mime_type; char *content_type_mime_file; char *content_type_mime_compare; @@ -218,9 +222,10 @@ get_file_mime_info (CajaFileInfo *file) mime_type = caja_file_info_get_mime_type (file); content_type_mime_file = g_content_type_from_mime_type (mime_type); - content_type_mime_compare = g_content_type_from_mime_type (mime_types[i]); + content_type_mime_compare = g_content_type_from_mime_type (archive_mime_types[i].mime_type); file_mime_info.is_archive = TRUE; + file_mime_info.is_compressed_archive = archive_mime_types[i].is_compressed; if ((content_type_mime_file != NULL) && (content_type_mime_compare != NULL)) file_mime_info.is_derived_archive = ! g_content_type_equals (content_type_mime_file, content_type_mime_compare); @@ -272,8 +277,10 @@ caja_fr_get_file_items (CajaMenuProvider *provider, gboolean one_item; gboolean one_archive = FALSE; gboolean one_derived_archive = FALSE; + gboolean one_compressed_archive = FALSE; gboolean all_archives = TRUE; gboolean all_archives_derived = TRUE; + gboolean all_archives_compressed = TRUE; if (files == NULL) return NULL; @@ -290,6 +297,9 @@ caja_fr_get_file_items (CajaMenuProvider *provider, if (all_archives && ! file_mime_info.is_archive) all_archives = FALSE; + if (all_archives_compressed && file_mime_info.is_archive && ! file_mime_info.is_compressed_archive) + all_archives_compressed = FALSE; + if (all_archives_derived && file_mime_info.is_archive && ! file_mime_info.is_derived_archive) all_archives_derived = FALSE; @@ -306,6 +316,7 @@ caja_fr_get_file_items (CajaMenuProvider *provider, one_item = (files != NULL) && (files->next == NULL); one_archive = one_item && all_archives; one_derived_archive = one_archive && all_archives_derived; + one_compressed_archive = one_archive && all_archives_compressed; if (all_archives && can_write) { CajaMenuItem *item; @@ -346,7 +357,7 @@ caja_fr_get_file_items (CajaMenuProvider *provider, } - if (! one_archive || one_derived_archive) { + if (! one_compressed_archive || one_derived_archive) { CajaMenuItem *item; item = caja_menu_item_new ("CajaFr::add", |