summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Soriano <csoriano@gnome.org>2017-08-09 16:32:09 +0200
committerCarlos Soriano <csoriano@gnome.org>2017-08-09 16:32:09 +0200
commit4d8f9848a4cf296f0d3401cf0a7f1def07c68405 (patch)
treebc093331994b63d121245e46a9c54d82c3353677
parentdcc298ebd9845066fbf0f36127e5c8e7da80bd22 (diff)
downloadnautilus-wip/csoriano/archives-mime.tar.gz
general: Add mime type support for archiveswip/csoriano/archives-mime
Until now archives were managed only if activated from Nautilus itself and if a setting was set. There are two main problems with this. 1- Archives opened in other apps cannot be handled by Nautilus 2- Users cannot use the regular myme type handling for setting Nautilus as the app handling archives, or unsetting it. This patch add support for archives myme types handled by gnome-autoar and removes the UI and setting used in the previous version.
-rw-r--r--data/org.gnome.Nautilus.desktop.in2
-rw-r--r--src/nautilus-files-view.c46
-rw-r--r--src/nautilus-files-view.h3
-rw-r--r--src/nautilus-mime-actions.c1
-rw-r--r--src/nautilus-window-slot.c34
5 files changed, 42 insertions, 44 deletions
diff --git a/data/org.gnome.Nautilus.desktop.in b/data/org.gnome.Nautilus.desktop.in
index db3f9a198..6544b02be 100644
--- a/data/org.gnome.Nautilus.desktop.in
+++ b/data/org.gnome.Nautilus.desktop.in
@@ -11,7 +11,7 @@ Type=Application
DBusActivatable=true
StartupNotify=true
Categories=GNOME;GTK;Utility;Core;FileManager;
-MimeType=inode/directory;
+MimeType=inode/directory; application/x-7z-compressed; application/x-7z-compressed-tar; application/x-bzip; application/x-bzip-compressed-tar; application/x-compress; application/x-compressed-tar; application/x-cpio; application/x-gzip; application/x-lha; application/x-lzip; application/x-lzip-compressed-tar; application/x-lzma; application/x-lzma-compressed-tar; application/x-tar; application/x-tarz; application/x-xar; application/x-xz; application/x-xz-compressed-tar; application/zip; application/gzip; application/bzip2;
X-GNOME-UsesNotifications=true
Actions=new-window;
diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c
index d8d4326f7..2ee7844a3 100644
--- a/src/nautilus-files-view.c
+++ b/src/nautilus-files-view.c
@@ -1237,53 +1237,15 @@ nautilus_files_view_activate_files (NautilusFilesView *view,
g_list_free (files_to_activate);
}
-static void
+void
nautilus_files_view_activate_file (NautilusFilesView *view,
NautilusFile *file,
NautilusWindowOpenFlags flags)
{
- NautilusFilesViewPrivate *priv;
- char *path;
+ g_autoptr(GList) files;
- priv = nautilus_files_view_get_instance_private (view);
-
- if (nautilus_mime_file_extracts (file))
- {
- GList *files = NULL;
-
- files = g_list_prepend (files, file);
-
- if (nautilus_files_view_supports_extract_here (view))
- {
- g_autoptr (GFile) location = NULL;
- g_autoptr (GFile) parent = NULL;
-
- location = nautilus_file_get_location (file);
- /* Get a parent from a random file. We assume all files has a common parent.
- * But don't assume the parent is the view location, since that's not the
- * case in list view when expand-folder setting is set
- */
- parent = g_file_get_parent (location);
- extract_files (view, files, parent);
- }
- else
- {
- extract_files_to_chosen_location (view, files);
- }
-
- g_list_free (files);
-
- return;
- }
-
- path = get_view_directory (view);
- nautilus_mime_activate_file (nautilus_files_view_get_containing_window (view),
- priv->slot,
- file,
- path,
- flags);
-
- g_free (path);
+ files = g_list_append(NULL, file);
+ nautilus_files_view_activate_files (view, files, flags, FALSE);
}
static void
diff --git a/src/nautilus-files-view.h b/src/nautilus-files-view.h
index cc3340ae5..d2c5ce171 100644
--- a/src/nautilus-files-view.h
+++ b/src/nautilus-files-view.h
@@ -267,6 +267,9 @@ void nautilus_files_view_activate_files (Nautil
GList *files,
NautilusWindowOpenFlags flags,
gboolean confirm_multiple);
+void nautilus_files_view_activate_file (NautilusFilesView *view,
+ NautilusFile *file,
+ NautilusWindowOpenFlags flags);
void nautilus_files_view_preview_files (NautilusFilesView *view,
GList *files,
GArray *locations);
diff --git a/src/nautilus-mime-actions.c b/src/nautilus-mime-actions.c
index ab69c6007..b9c3891e9 100644
--- a/src/nautilus-mime-actions.c
+++ b/src/nautilus-mime-actions.c
@@ -385,6 +385,7 @@ nautilus_mime_get_default_application_for_file (NautilusFile *file)
if (!nautilus_mime_actions_check_if_required_attributes_ready (file))
{
+ G_BREAKPOINT();
return NULL;
}
diff --git a/src/nautilus-window-slot.c b/src/nautilus-window-slot.c
index 765be41fb..50fbb625d 100644
--- a/src/nautilus-window-slot.c
+++ b/src/nautilus-window-slot.c
@@ -118,6 +118,7 @@ typedef struct
guint location_change_distance;
char *pending_scroll_to;
GList *pending_selection;
+ NautilusFile *pending_file_to_activate;
NautilusFile *determine_view_file;
GCancellable *mount_cancellable;
GError *mount_error;
@@ -985,6 +986,7 @@ static gboolean setup_view (NautilusWindowSlot *self,
static void load_new_location (NautilusWindowSlot *slot,
GFile *location,
GList *selection,
+ NautilusFile *file_to_activate,
gboolean tell_current_content_view,
gboolean tell_new_content_view);
@@ -1580,10 +1582,18 @@ handle_regular_file_if_needed (NautilusWindowSlot *self,
}
g_clear_object (&priv->pending_location);
+ g_clear_object (&priv->pending_file_to_activate);
g_free (priv->pending_scroll_to);
priv->pending_location = nautilus_file_get_parent_location (file);
- priv->pending_selection = g_list_prepend (NULL, nautilus_file_ref (file));
+ if (nautilus_file_is_archive (file))
+ {
+ priv->pending_file_to_activate = nautilus_file_ref (file);
+ }
+ else
+ {
+ priv->pending_selection = g_list_prepend (NULL, nautilus_file_ref (file));
+ }
priv->determine_view_file = nautilus_file_ref (parent_file);
priv->pending_scroll_to = nautilus_file_get_uri (file);
@@ -1777,6 +1787,7 @@ setup_view (NautilusWindowSlot *self,
load_new_location (self,
priv->pending_location,
priv->pending_selection,
+ priv->pending_file_to_activate,
FALSE,
TRUE);
@@ -1792,6 +1803,7 @@ setup_view (NautilusWindowSlot *self,
load_new_location (self,
old_location,
selection,
+ NULL,
FALSE,
TRUE);
nautilus_file_list_free (selection);
@@ -1815,6 +1827,7 @@ static void
load_new_location (NautilusWindowSlot *self,
GFile *location,
GList *selection,
+ NautilusFile *file_to_activate,
gboolean tell_current_content_view,
gboolean tell_new_content_view)
{
@@ -1845,6 +1858,22 @@ load_new_location (NautilusWindowSlot *self,
if (view)
{
nautilus_view_set_selection (view, selection);
+ if (file_to_activate != NULL)
+ {
+ GAppInfo *app_info;
+ const gchar *app_id;
+
+ g_return_if_fail (NAUTILUS_IS_FILES_VIEW (view));
+ app_info = nautilus_mime_get_default_application_for_file (file_to_activate);
+ app_id = g_app_info_get_id (app_info);
+ g_print ("App id %s\n", app_id);
+
+ if (g_strcmp0 (app_id, "org.gnome.Nautilus") == 0)
+ {
+ nautilus_files_view_activate_file (NAUTILUS_FILES_VIEW (view),
+ file_to_activate, 0);
+ }
+ }
}
nautilus_profile_end (NULL);
@@ -1882,6 +1911,7 @@ free_location_change (NautilusWindowSlot *self)
priv = nautilus_window_slot_get_instance_private (self);
g_clear_object (&priv->pending_location);
+ g_clear_object (&priv->pending_file_to_activate);
nautilus_file_list_free (priv->pending_selection);
priv->pending_selection = NULL;
@@ -2769,6 +2799,7 @@ nautilus_window_slot_dispose (GObject *object)
nautilus_window_slot_set_viewed_file (self, NULL);
g_clear_object (&priv->location);
+ g_clear_object (&priv->pending_file_to_activate);
nautilus_file_list_free (priv->pending_selection);
priv->pending_selection = NULL;
@@ -3066,6 +3097,7 @@ nautilus_window_slot_stop_loading (NautilusWindowSlot *self)
load_new_location (self,
location,
selection,
+ NULL,
TRUE,
FALSE);
nautilus_file_list_free (selection);