[nautilus] Bug 333265 - Open the folder of a search result or recent item



commit b8d80ba9502ef0d42b3ab5b29ab89bb04d62aced
Author: Garrett Regier <garrettregier gmail com>
Date:   Sat Jun 15 17:52:04 2013 -0700

    Bug 333265 - Open the folder of a search result or recent item

 src/nautilus-actions.h             |    1 +
 src/nautilus-directory-view-ui.xml |    1 +
 src/nautilus-view.c                |   47 ++++++++++++++++++++++++++++++++++-
 3 files changed, 47 insertions(+), 2 deletions(-)
---
diff --git a/src/nautilus-actions.h b/src/nautilus-actions.h
index 61b4c2d..8c8e575 100644
--- a/src/nautilus-actions.h
+++ b/src/nautilus-actions.h
@@ -56,6 +56,7 @@
 #define NAUTILUS_ACTION_HELP "NautilusHelp"
 
 #define NAUTILUS_ACTION_OPEN "Open"
+#define NAUTILUS_ACTION_OPEN_ITEM_LOCATION "OpenItemLocation"
 #define NAUTILUS_ACTION_OPEN_WITH "Open With"
 #define NAUTILUS_ACTION_OPEN_ALTERNATE "OpenAlternate"
 #define NAUTILUS_ACTION_OPEN_IN_NEW_TAB "OpenInNewTab"
diff --git a/src/nautilus-directory-view-ui.xml b/src/nautilus-directory-view-ui.xml
index e164fec..0f06fc6 100644
--- a/src/nautilus-directory-view-ui.xml
+++ b/src/nautilus-directory-view-ui.xml
@@ -67,6 +67,7 @@
     <separator name="new folder with selection separator"/>
   </placeholder>
   <placeholder name="Open Placeholder">
+    <menuitem name="Open Item Location" action="OpenItemLocation"/>
     <menuitem name="Open" action="Open"/>
     <menuitem name="OpenInNewTab" action="OpenInNewTab"/>
     <separator name="applications separator"/>
diff --git a/src/nautilus-view.c b/src/nautilus-view.c
index 6c59b5d..ab6e576 100644
--- a/src/nautilus-view.c
+++ b/src/nautilus-view.c
@@ -1130,6 +1130,33 @@ action_open_close_parent_callback (GtkAction *action,
        nautilus_file_list_free (selection);
 }
 
+static void
+action_open_item_location_callback (GtkAction *action,
+                                   gpointer callback_data)
+{
+       NautilusView *view;
+       GList *selection;
+       NautilusFile *item;
+       GFile *activation_location;
+       NautilusFile *activation_file;
+       NautilusFile *location;
+
+       view = NAUTILUS_VIEW (callback_data);
+       selection = nautilus_view_get_selection (view);
+
+       item = NAUTILUS_FILE (selection->data);
+       activation_location = nautilus_file_get_activation_location (item);
+       activation_file = nautilus_file_get (activation_location);
+       location = nautilus_file_get_parent (activation_file);
+
+       nautilus_view_activate_file (view, location, 0);
+
+       nautilus_file_unref (location);
+       nautilus_file_unref (activation_file);
+       g_object_unref (activation_location);
+       nautilus_file_list_free (selection);
+}
+
 
 static void
 action_open_alternate_callback (GtkAction *action,
@@ -7126,6 +7153,10 @@ static const GtkActionEntry directory_view_entries[] = {
   /* label, accelerator */       "OpenAccel", "<alt>Down",
   /* tooltip */                  NULL,
                                 G_CALLBACK (action_open_callback) },
+  /* name, stock id */         { NAUTILUS_ACTION_OPEN_ITEM_LOCATION, NULL,
+  /* label, accelerator */       N_("Open _Item Location"), "<control><alt>o",
+  /* tooltip */                  N_("Open the selected item's location in this window"),
+                                G_CALLBACK (action_open_item_location_callback) },
   /* name, stock id */         { NAUTILUS_ACTION_OPEN_ALTERNATE, NULL,
   /* label, accelerator */       N_("Open in Navigation Window"), "<control><shift>o",
   /* tooltip */                  N_("Open each selected item in a navigation window"),
@@ -8390,6 +8421,7 @@ real_update_menus (NautilusView *view)
        gboolean selection_contains_special_link;
        gboolean selection_contains_desktop_or_home_dir;
        gboolean selection_contains_recent;
+       gboolean selection_contains_search;
        gboolean can_create_files;
        gboolean can_delete_files;
        gboolean can_move_files;
@@ -8416,6 +8448,8 @@ real_update_menus (NautilusView *view)
        selection_contains_special_link = special_link_in_selection (view);
        selection_contains_desktop_or_home_dir = desktop_or_home_dir_in_selection (view);
        selection_contains_recent = showing_recent_directory (view);
+       selection_contains_search = view->details->model &&
+               NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model);
 
        can_create_files = nautilus_view_supports_creating_files (view);
        can_delete_files =
@@ -8457,6 +8491,16 @@ real_update_menus (NautilusView *view)
        }
 
        action = gtk_action_group_get_action (view->details->dir_action_group,
+                                             NAUTILUS_ACTION_OPEN_ITEM_LOCATION);
+       if (selection_count == 1 &&
+           (selection_contains_recent || selection_contains_search))
+       {
+               gtk_action_set_visible (action, TRUE);
+       } else {
+               gtk_action_set_visible (action, FALSE);
+       }
+
+       action = gtk_action_group_get_action (view->details->dir_action_group,
                                              NAUTILUS_ACTION_NEW_FOLDER);
        gtk_action_set_sensitive (action, can_create_files);
        gtk_action_set_visible (action, !selection_contains_recent);
@@ -8689,8 +8733,7 @@ real_update_menus (NautilusView *view)
        show_save_search = FALSE;
        save_search_sensitive = FALSE;
        show_save_search_as = FALSE;
-       if (view->details->model &&
-           NAUTILUS_IS_SEARCH_DIRECTORY (view->details->model)) {
+       if (selection_contains_search) {
                NautilusSearchDirectory *search;
 
                search = NAUTILUS_SEARCH_DIRECTORY (view->details->model);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]