92a5638
Index: daemon/gvfsbackendburn.c
92a5638
===================================================================
92a5638
--- daemon/gvfsbackendburn.c	(revisione 2144)
92a5638
+++ daemon/gvfsbackendburn.c	(copia locale)
92a5638
@@ -953,6 +953,49 @@
92a5638
   return TRUE;
92a5638
 }
92a5638
 
92a5638
+static gboolean
92a5638
+try_move (GVfsBackend *backend,
92a5638
+          GVfsJobMove *job,
92a5638
+          const char *source,
92a5638
+          const char *destination,
92a5638
+          GFileCopyFlags flags,
92a5638
+          GFileProgressCallback progress_callback,
92a5638
+          gpointer progress_callback_data)
92a5638
+{
92a5638
+  VirtualNode *source_node, *root_node, *source_dir, *dest_dir;
92a5638
+
92a5638
+  root_node = G_VFS_BACKEND_BURN (backend)->root_node;
92a5638
+  
92a5638
+  source_node = virtual_node_lookup (root_node, source, &source_dir);
92a5638
+  if (source_node == NULL)
92a5638
+    {
92a5638
+      g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
92a5638
+                        G_IO_ERROR_NOT_FOUND,
92a5638
+                        _("No such file or directory"));
92a5638
+      return TRUE;
92a5638
+    }
92a5638
+
92a5638
+  if (virtual_node_lookup (root_node, destination, &dest_dir) != NULL)
92a5638
+    {
92a5638
+      g_vfs_job_failed (G_VFS_JOB (job), G_IO_ERROR,
92a5638
+                        G_IO_ERROR_EXISTS,
92a5638
+                        _("File exists"));
92a5638
+      return TRUE;
92a5638
+    }
92a5638
+
92a5638
+  g_free (source_node->filename);
92a5638
+  source_node->filename = g_path_get_basename (destination);
92a5638
+
92a5638
+  if (source_dir != dest_dir) {
92a5638
+    source_dir->children = g_list_remove (source_dir->children, source_node);
92a5638
+    dest_dir->children = g_list_append (dest_dir->children, source_node);
92a5638
+  }
92a5638
+  
92a5638
+  g_vfs_job_succeeded (G_VFS_JOB (job));
92a5638
+  
92a5638
+  return TRUE;
92a5638
+}
92a5638
+
92a5638
 static void
92a5638
 g_vfs_backend_burn_class_init (GVfsBackendBurnClass *klass)
92a5638
 {
92a5638
@@ -970,6 +1013,7 @@
92a5638
   backend_class->try_set_display_name = try_set_display_name;
92a5638
   backend_class->try_push = try_push;
92a5638
   backend_class->try_delete = try_delete;
92a5638
+  backend_class->try_move = try_move;
92a5638
   backend_class->read = do_read;
92a5638
   backend_class->seek_on_read = do_seek_on_read;
92a5638
   backend_class->close_read = do_close_read;