summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/org.gnome.nautilus.gschema.xml4
-rw-r--r--src/nautilus-files-view.c47
-rw-r--r--src/resources/ui/nautilus-files-view-context-menus.ui7
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 @@
</key>
<key type="b" name="show-create-link">
<default>false</default>
- <summary>Whether to show a context menu item to create links from copied files</summary>
- <description>If set to true Nautilus will show a create link context menu item to create links from the copied files</description>
+ <summary>Whether to show context menu items to create links from copied or selected files</summary>
+ <description>If set to true Nautilus will show context menu items to create links from the copied or selected files</description>
</key>
<key type="b" name="confirm-trash">
<default>true</default>
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
@@ -5366,6 +5366,37 @@ action_cut (GSimpleAction *action,
}
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,
gpointer user_data)
@@ -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 &&
@@ -6409,6 +6441,12 @@ real_update_actions_state (NautilusFilesView *view)
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),
can_copy_files);
@@ -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", "<control>x");
nautilus_application_add_accelerator (app, "view.copy", "<control>c");
+ nautilus_application_add_accelerator (app, "view.create-link-in-place", "<control><shift>m");
nautilus_application_add_accelerator (app, "view.new-folder", "<control><shift>n");
/* Only accesible by shorcuts */
nautilus_application_add_accelerator (app, "view.select-pattern", "<control>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 @@
<attribute name="label" translatable="yes">_Copy</attribute>
<attribute name="action">view.copy</attribute>
</item>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">Create _Link</attribute>
+ <attribute name="action">view.create-link-in-place</attribute>
+ <attribute name="hidden-when">action-disabled</attribute>
+ </item>
+ </section>
<item>
<attribute name="label" translatable="yes">_Paste Into Folder</attribute>
<attribute name="action">view.paste-into</attribute>