Index: configure.in =================================================================== --- configure.in (revision 2182) +++ configure.in (working copy) @@ -18,13 +18,13 @@ dnl dnl ========================================================================== -GLIB_REQUIRED=2.12.0 +GLIB_REQUIRED=2.15.0 GTK_REQUIRED=2.10.0 LIBGNOME_REQUIRED=2.6.0 LIBGNOMEUI_REQUIRED=2.6.0 GNOME_VFS_REQUIRED=2.10.0 LIBGLADE_REQUIRED=2.4.0 -NAUTILUS_REQUIRED=2.10.0 +NAUTILUS_REQUIRED=2.21.0 AC_SUBST(GLIB_REQUIRED) AC_SUBST(GTK_REQUIRED) @@ -38,6 +38,7 @@ PKG_CHECK_MODULES(FR, \ glib-2.0 >= $GLIB_REQUIRED \ + gio-2.0 >= $GLIB_REQUIRED \ gthread-2.0 \ gtk+-2.0 >= $GTK_REQUIRED \ libgnome-2.0 >= $LIBGNOME_REQUIRED \ Index: nautilus/nautilus-fileroller.c =================================================================== --- nautilus/nautilus-fileroller.c (revision 2182) +++ nautilus/nautilus-fileroller.c (working copy) @@ -24,9 +24,7 @@ #include #include #include -#include -#include -#include +#include #include #include #include @@ -204,34 +202,31 @@ return NULL; for (scan = files; scan; scan = scan->next) { - NautilusFileInfo *file = scan->data; + NautilusFileInfo *file = scan->data; - if (all_archives && ! is_archive (file)) - all_archives = FALSE; + if ((all_archives = is_archive (file)) == FALSE) + break; + /* FIXME: Here we should get the parent of the current + * file and check if it is the same parent as for the + * other files and then check if the parent is writable + * + * We *MUST NOT* do that synchronous since this function + * gets called very often (every time a selection changed) + * and it could be a remote location. MUST NOT DO SYNC IO. + * + * Nautilus actually already has stat'ed the parent and + * knows if the parent is writable or not. The API is + * just missing. This is filed under bug #521612. Once that + * bug is fixed we can actually implement the funcionality. + * Until then we just set can_write to TRUE. If that is an + * lie we will find out once the user tries to really extract + * stuff. + * + * Christian Kellner + * */ + } - if (can_write) { - char *parent_uri; - GnomeVFSFileInfo *info; - GnomeVFSResult result; - - parent_uri = nautilus_file_info_get_parent_uri (file); - info = gnome_vfs_file_info_new (); - - result = gnome_vfs_get_file_info (parent_uri, - info, - (GNOME_VFS_FILE_INFO_FOLLOW_LINKS - | GNOME_VFS_FILE_INFO_GET_ACCESS_RIGHTS)); - if ((result == GNOME_VFS_OK) && (info->valid_fields & GNOME_VFS_FILE_INFO_FIELDS_PERMISSIONS)) - can_write = (info->permissions & GNOME_VFS_PERM_ACCESS_WRITABLE) || (info->permissions & GNOME_VFS_PERM_USER_WRITE); - - gnome_vfs_file_info_unref (info); - g_free (parent_uri); - } - } - - /**/ - one_item = (files != NULL) && (files->next == NULL); one_archive = one_item && all_archives;