+static gchar *
+ev_window_get_copy_tmp_name (const gchar *filename)
+{
+ gchar *tmp_filename = NULL;
+ gchar *name;
+ guint i = 0;
+
+ name = g_path_get_basename (filename);
+
+ do {
+ gchar *basename;
+
+ basename = g_strdup_printf ("%s-%d", name, i);
+ tmp_filename = g_build_filename (g_get_tmp_dir (),
+ basename, NULL);
+ g_free (basename);
+ } while (g_file_test (tmp_filename, G_FILE_TEST_EXISTS));
+
+ g_free (name);
+
+ return tmp_filename;
+}
+
+static void
+ev_window_cmd_file_open_copy_at_dest (EvWindow *window, EvLinkDest *dest)
+{
+ gchar *symlink_uri;
+ gchar *old_filename;
+ gchar *new_filename;
+
+ old_filename = g_filename_from_uri (window->priv->uri, NULL, NULL);
+ new_filename = ev_window_get_copy_tmp_name (old_filename);
+
+ if (symlink (old_filename, new_filename) != 0) {
+ gchar *msg;
+ GError *error;
+
+ msg = g_strdup_printf (_("Cannot open a copy."));
+ error = g_error_new (G_FILE_ERROR,
+ g_file_error_from_errno (errno),
+ _("Couldn't create symlink ā%sā: %s"),
+ new_filename, strerror (errno));
+ ev_window_error_dialog (GTK_WINDOW (window), msg, error);
+ g_free (msg);
+ g_error_free (error);
+
+ g_free (old_filename);
+ g_free (new_filename);
+
+ return;
+ }
+
+ g_free (old_filename);
+
+ symlink_uri = g_filename_to_uri (new_filename, NULL, NULL);
+ g_free (new_filename);
+
+ ev_application_open_uri_at_dest (EV_APP,
+ symlink_uri,
+ gtk_window_get_screen (GTK_WINDOW (window)),
+ dest,
+ 0,
+ TRUE,
+ GDK_CURRENT_TIME);
+ g_free (symlink_uri);
+}
+
+static void
+ev_window_cmd_file_open_copy (GtkAction *action, EvWindow *window)
+{
+ EvPageCache *page_cache;
+ EvLinkDest *dest;
+ gint current_page;
+
+ page_cache = ev_page_cache_get (window->priv->document);
+ current_page = ev_page_cache_get_current_page (page_cache);
+
+ dest = ev_link_dest_new_page (current_page);
+ ev_window_cmd_file_open_copy_at_dest (window, dest);
+ g_object_unref (dest);
+}
+