From a3a7ac81b77fd65b8d3902aea8e00d2da4ad9f6c Mon Sep 17 00:00:00 2001 From: Razvan Chitu Date: Wed, 23 Dec 2015 23:23:23 +0200 Subject: files-view: add create link menu item for selected files The menu item for this feature was removed in previous versions of nautilus. A context menu item for creating links from copied files was added, but some users prefered to create links from selected files. Since this is demanded, implement the menu action for it and use the gsetting added in the previous commits. https://bugzilla.gnome.org/show_bug.cgi?id=745575 --- data/org.gnome.nautilus.gschema.xml | 4 +- src/nautilus-files-view.c | 47 ++++++++++++++++++++-- .../ui/nautilus-files-view-context-menus.ui | 7 ++++ 3 files changed, 52 insertions(+), 6 deletions(-) diff --git a/data/org.gnome.nautilus.gschema.xml b/data/org.gnome.nautilus.gschema.xml index bf03e0308..0a1acad4a 100644 --- a/data/org.gnome.nautilus.gschema.xml +++ b/data/org.gnome.nautilus.gschema.xml @@ -83,8 +83,8 @@ false - Whether to show a context menu item to create links from copied files - If set to true Nautilus will show a create link context menu item to create links from the copied files + Whether to show context menu items to create links from copied or selected files + If set to true Nautilus will show context menu items to create links from the copied or selected files true diff --git a/src/nautilus-files-view.c b/src/nautilus-files-view.c index 32be4da94..bda80c08f 100644 --- a/src/nautilus-files-view.c +++ b/src/nautilus-files-view.c @@ -5365,6 +5365,37 @@ action_cut (GSimpleAction *action, nautilus_file_list_free (selection); } +static void +action_create_links_in_place (GSimpleAction *action, + GVariant *state, + gpointer user_data) +{ + NautilusFilesView *view; + GList *selection; + GList *item_uris; + GList *l; + char *destination_uri; + + view = NAUTILUS_FILES_VIEW (user_data); + + selection = nautilus_files_view_get_selection_for_file_transfer (view); + + item_uris = NULL; + for (l = selection; l != NULL; l = l->next) { + item_uris = g_list_prepend (item_uris, nautilus_file_get_uri(l->data)); + } + item_uris = g_list_reverse (item_uris); + + destination_uri = nautilus_files_view_get_backing_uri (view); + + nautilus_files_view_move_copy_items (view, item_uris, NULL, destination_uri, + GDK_ACTION_LINK, + 0, 0); + + g_list_free_full (item_uris, g_free); + nautilus_file_list_free (selection); +} + static void action_copy_to (GSimpleAction *action, GVariant *state, @@ -5940,6 +5971,7 @@ const GActionEntry view_entries[] = { { "open-item-new-tab", action_open_item_new_tab }, { "cut", action_cut}, { "copy", action_copy}, + { "create-link-in-place", action_create_links_in_place }, { "move-to", action_move_to}, { "copy-to", action_copy_to}, { "move-to-trash", action_move_to_trash}, @@ -6222,7 +6254,7 @@ real_update_actions_state (NautilusFilesView *view) gboolean can_move_files; gboolean can_trash_files; gboolean can_copy_files; - gboolean can_link_files; + gboolean can_link_from_copied_files; gboolean can_paste_files_into; gboolean show_app, show_run; gboolean item_opens_in_view; @@ -6268,8 +6300,8 @@ real_update_actions_state (NautilusFilesView *view) !selection_contains_desktop_or_home_dir; can_copy_files = selection_count != 0 && !selection_contains_special_link; - can_link_files = !nautilus_clipboard_monitor_is_cut (nautilus_clipboard_monitor_get ()) && - !selection_contains_recent && !is_read_only; + can_link_from_copied_files = !nautilus_clipboard_monitor_is_cut (nautilus_clipboard_monitor_get ()) && + !selection_contains_recent && !is_read_only; can_move_files = can_delete_files && !selection_contains_recent; can_paste_files_into = (!selection_contains_recent && selection_count == 1 && @@ -6408,6 +6440,12 @@ real_update_actions_state (NautilusFilesView *view) "copy"); g_simple_action_set_enabled (G_SIMPLE_ACTION (action), can_copy_files); + action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), + "create-link-in-place"); + g_simple_action_set_enabled (G_SIMPLE_ACTION (action), + can_copy_files && + can_create_files && + settings_show_create_link); action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "copy-to"); g_simple_action_set_enabled (G_SIMPLE_ACTION (action), @@ -6491,7 +6529,7 @@ real_update_actions_state (NautilusFilesView *view) action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), "create-link"); g_simple_action_set_enabled (G_SIMPLE_ACTION (action), - can_link_files && + can_link_from_copied_files && settings_show_create_link); action = g_action_map_lookup_action (G_ACTION_MAP (view_action_group), @@ -8239,6 +8277,7 @@ nautilus_files_view_init (NautilusFilesView *view) nautilus_application_add_accelerator (app, "view.rename", "F2"); nautilus_application_add_accelerator (app, "view.cut", "x"); nautilus_application_add_accelerator (app, "view.copy", "c"); + nautilus_application_add_accelerator (app, "view.create-link-in-place", "m"); nautilus_application_add_accelerator (app, "view.new-folder", "n"); /* Only accesible by shorcuts */ nautilus_application_add_accelerator (app, "view.select-pattern", "s"); diff --git a/src/resources/ui/nautilus-files-view-context-menus.ui b/src/resources/ui/nautilus-files-view-context-menus.ui index b60ab1f08..1d5035f93 100644 --- a/src/resources/ui/nautilus-files-view-context-menus.ui +++ b/src/resources/ui/nautilus-files-view-context-menus.ui @@ -145,6 +145,13 @@ _Copy view.copy +
+ + Create _Link + view.create-link-in-place + action-disabled + +
_Paste Into Folder view.paste-into -- cgit v1.2.1