file-roller r2532 - in trunk: . nautilus
- From: paobac svn gnome org
- To: svn-commits-list gnome org
- Subject: file-roller r2532 - in trunk: . nautilus
- Date: Tue, 23 Dec 2008 11:50:25 +0000 (UTC)
Author: paobac
Date: Tue Dec 23 11:50:25 2008
New Revision: 2532
URL: http://svn.gnome.org/viewvc/file-roller?rev=2532&view=rev
Log:
2008-12-23 Paolo Bacchilega <paobac svn gnome org>
* nautilus/nautilus-fileroller.c:
Fixed bug #561535 â Unable to create archive with OpenOffice
document using nautilus integration.
Patch by Gerard Lommerse.
Modified:
trunk/ChangeLog
trunk/nautilus/nautilus-fileroller.c
Modified: trunk/nautilus/nautilus-fileroller.c
==============================================================================
--- trunk/nautilus/nautilus-fileroller.c (original)
+++ trunk/nautilus/nautilus-fileroller.c Tue Dec 23 11:50:25 2008
@@ -188,16 +188,45 @@
};
-static gboolean
-is_archive (NautilusFileInfo *file)
+typedef struct
{
- int i;
+ gboolean is_archive;
+ gboolean is_derived_archive;
+} FileMimeInfo;
+
+
+static FileMimeInfo
+get_file_mime_info (NautilusFileInfo *file)
+{
+ FileMimeInfo file_mime_info;
+ int i;
+
+ file_mime_info.is_archive = FALSE;
+ file_mime_info.is_derived_archive = FALSE;
for (i = 0; mime_types[i] != NULL; i++)
- if (nautilus_file_info_is_mime_type (file, mime_types[i]))
- return TRUE;
+ if (nautilus_file_info_is_mime_type (file, mime_types[i])) {
+ char *mime_type;
+ char *content_type_mime_file;
+ char *content_type_mime_compare;
+
+ mime_type = nautilus_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]);
+
+ file_mime_info.is_archive = TRUE;
+ 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);
+
+ g_free (mime_type);
+ g_free (content_type_mime_file);
+ g_free (content_type_mime_compare);
+
+ return file_mime_info;
+ }
- return FALSE;
+ return file_mime_info;
}
@@ -237,7 +266,9 @@
gboolean can_write = TRUE;
gboolean one_item;
gboolean one_archive = FALSE;
+ gboolean one_derived_archive = FALSE;
gboolean all_archives = TRUE;
+ gboolean all_archives_derived = TRUE;
if (files == NULL)
return NULL;
@@ -245,11 +276,17 @@
if (unsupported_scheme ((NautilusFileInfo *) files->data))
return NULL;
- for (scan = files; scan; scan = scan->next) {
+ for (scan = files; scan; scan = scan->next) {
NautilusFileInfo *file = scan->data;
+ FileMimeInfo file_mime_info;
+
+ file_mime_info = get_file_mime_info (file);
- if (all_archives && ! is_archive (file))
+ if (all_archives && ! file_mime_info.is_archive)
all_archives = FALSE;
+
+ if (all_archives_derived && file_mime_info.is_archive && ! file_mime_info.is_derived_archive)
+ all_archives_derived = FALSE;
if (can_write) {
NautilusFileInfo *parent;
@@ -263,6 +300,7 @@
one_item = (files != NULL) && (files->next == NULL);
one_archive = one_item && all_archives;
+ one_derived_archive = one_archive && all_archives_derived;
if (all_archives && can_write) {
NautilusMenuItem *item;
@@ -302,7 +340,7 @@
}
- if (! one_archive) {
+ if (! one_archive || one_derived_archive) {
NautilusMenuItem *item;
item = nautilus_menu_item_new ("NautilusFr::add",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]