summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/file-manager/fm-directory-view.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/file-manager/fm-directory-view.c b/src/file-manager/fm-directory-view.c
index a97b3e91..7b0e0dd0 100644
--- a/src/file-manager/fm-directory-view.c
+++ b/src/file-manager/fm-directory-view.c
@@ -4311,6 +4311,16 @@ open_with_launch_application_callback (GtkAction *action,
fm_directory_view_get_containing_window (launch_parameters->directory_view));
}
+static void
+open_parent_folder_callback (GtkAction *action,
+ gpointer callback_data)
+{
+ gchar *uri;
+
+ uri = (gchar *) callback_data;
+ g_app_info_launch_default_for_uri (uri, NULL, NULL);
+}
+
static char *
escape_action_name (const char *action_name,
const char *prefix)
@@ -4527,6 +4537,82 @@ add_application_to_open_with_menu (FMDirectoryView *view,
}
static void
+add_parent_folder_to_open_menu (FMDirectoryView *view,
+ GList *files,
+ const char *menu_placeholder,
+ const char *popup_placeholder)
+{
+ CajaFile *file;
+ gchar *uri;
+ char *tip;
+ char *label;
+ char *action_name;
+ char *path;
+ GtkAction *action;
+ GtkWidget *menuitem;
+
+ file = g_list_first(files)->data;
+
+ if (caja_file_is_directory (file))
+ return;
+
+ uri = caja_file_get_parent_uri (file);
+
+ label = g_strdup (_("Open parent location"));
+ tip = g_strdup (_("Open parent location for the selected item"));
+ action_name = g_strdup ("open_location");
+
+ action = gtk_action_new (action_name,
+ label,
+ tip,
+ NULL);
+
+ gtk_action_set_icon_name (action, "folder");
+
+ g_signal_connect_data (action, "activate",
+ G_CALLBACK (open_parent_folder_callback),
+ uri, (GClosureNotify)g_free, 0);
+
+ gtk_action_group_add_action (view->details->open_with_action_group,
+ action);
+ g_object_unref (action);
+
+ gtk_ui_manager_add_ui (caja_window_info_get_ui_manager (view->details->window),
+ view->details->open_with_merge_id,
+ menu_placeholder,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ path = g_strdup_printf ("%s/%s", menu_placeholder, action_name);
+ menuitem = gtk_ui_manager_get_widget (
+ caja_window_info_get_ui_manager (view->details->window),
+ path);
+ gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem), TRUE);
+ g_free (path);
+
+ gtk_ui_manager_add_ui (caja_window_info_get_ui_manager (view->details->window),
+ view->details->open_with_merge_id,
+ popup_placeholder,
+ action_name,
+ action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ path = g_strdup_printf ("%s/%s", popup_placeholder, action_name);
+ menuitem = gtk_ui_manager_get_widget (
+ caja_window_info_get_ui_manager (view->details->window),
+ path);
+ gtk_image_menu_item_set_always_show_image (GTK_IMAGE_MENU_ITEM (menuitem), TRUE);
+
+ g_free (path);
+ g_free (action_name);
+ g_free (label);
+ g_free (tip);
+}
+
+static void
get_x_content_async_callback (char **content,
gpointer user_data)
{
@@ -4671,12 +4757,20 @@ reset_open_with_menu (FMDirectoryView *view, GList *selection)
selection,
index,
menu_path, popup_path, submenu_visible);
+
}
g_list_free_full (applications, g_object_unref);
if (default_app != NULL) {
g_object_unref (default_app);
}
+ /* Show open parent folder action if we are in search mode */
+ if (eel_uri_is_search (fm_directory_view_get_uri (view)) && g_list_length (selection) == 1)
+ add_parent_folder_to_openmenu (view,
+ selection,
+ FM_DIRECTORY_VIEW_MENU_PATH_OPEN,
+ FM_DIRECTORY_VIEW_POPUP_PATH_OPEN);
+
open_with_chooser_visible = other_applications_visible &&
g_list_length (selection) == 1;