[gthumb] fixed renaming of folders and catalogs



commit 2d72f2ffccea65461c871a5e6645b95f03a27164
Author: Paolo Bacchilega <paobac src gnome org>
Date:   Sun Dec 11 15:43:25 2011 +0100

    fixed renaming of folders and catalogs

 extensions/catalogs/callbacks.c                |    4 +-
 extensions/catalogs/dlg-catalog-properties.c   |    9 +--
 extensions/catalogs/gth-file-source-catalogs.c |   88 +++++++++++++++++
 extensions/file_manager/callbacks.c            |    5 -
 gthumb/glib-utils.c                            |    7 ++
 gthumb/glib-utils.h                            |    1 +
 gthumb/gth-browser.c                           |   25 +-----
 gthumb/gth-file-source.c                       |   36 +++++--
 gthumb/gth-file-source.h                       |    4 +-
 gthumb/gth-folder-tree.c                       |  121 ++++++++++++++++--------
 gthumb/gth-source-tree.c                       |   23 +-----
 11 files changed, 215 insertions(+), 108 deletions(-)
---
diff --git a/extensions/catalogs/callbacks.c b/extensions/catalogs/callbacks.c
index 3cedf18..0ed805a 100644
--- a/extensions/catalogs/callbacks.c
+++ b/extensions/catalogs/callbacks.c
@@ -611,7 +611,9 @@ catalogs__gth_browser_folder_tree_popup_before_cb (GthBrowser    *browser,
 		g_object_set (action, "sensitive", sensitive, NULL);
 
 		action = gtk_action_group_get_action (data->actions, "Catalog_Rename");
-		sensitive = (folder != NULL) && _g_content_type_is_a (g_file_info_get_content_type (folder->info), "gthumb/library") && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME);
+		sensitive = ((folder != NULL)
+			     && (_g_content_type_is_a (g_file_info_get_content_type (folder->info), "gthumb/library") || _g_content_type_is_a (g_file_info_get_content_type (folder->info), "gthumb/catalog"))
+			     && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME));
 		g_object_set (action, "sensitive", sensitive, NULL);
 
 		action = gtk_action_group_get_action (data->actions, "Catalog_Properties");
diff --git a/extensions/catalogs/dlg-catalog-properties.c b/extensions/catalogs/dlg-catalog-properties.c
index 61a4c68..a8d3659 100644
--- a/extensions/catalogs/dlg-catalog-properties.c
+++ b/extensions/catalogs/dlg-catalog-properties.c
@@ -83,13 +83,6 @@ catalog_saved_cb (void     **buffer,
 }
 
 
-static char *
-clear_name_for_file (const char *display_name)
-{
-	return _g_utf8_replace (display_name, "/", "_");
-}
-
-
 static void
 save_button_clicked_cb (GtkButton  *button,
 			DialogData *data)
@@ -108,7 +101,7 @@ save_button_clicked_cb (GtkButton  *button,
 
 		parent = g_file_get_parent (data->original_file);
 		uri = g_file_get_uri (data->original_file);
-		clean_name = clear_name_for_file (gtk_entry_get_text (GTK_ENTRY (GET_WIDGET ("name_entry"))));
+		clean_name = _g_filename_clear_for_file (gtk_entry_get_text (GTK_ENTRY (GET_WIDGET ("name_entry"))));
 		display_name = g_strconcat (clean_name, _g_uri_get_file_extension (uri), NULL);
 		new_file = g_file_get_child_for_display_name (parent, display_name, NULL);
 		if ((new_file != NULL) && ! g_file_equal (new_file, data->original_file))
diff --git a/extensions/catalogs/gth-file-source-catalogs.c b/extensions/catalogs/gth-file-source-catalogs.c
index 23fa95d..3db9721 100644
--- a/extensions/catalogs/gth-file-source-catalogs.c
+++ b/extensions/catalogs/gth-file-source-catalogs.c
@@ -410,6 +410,93 @@ gth_file_source_catalogs_read_metadata (GthFileSource *file_source,
 }
 
 
+static void
+gth_file_source_catalogs_rename (GthFileSource *file_source,
+				 GFile         *file,
+				 const char    *edit_name,
+				 ReadyCallback  callback,
+				 gpointer       data)
+{
+	GFile      *parent;
+	GFile      *new_file;
+	GthCatalog *catalog;
+	GError     *error = NULL;
+
+	parent = g_file_get_parent (file);
+
+	catalog = gth_catalog_load_from_file (file);
+	if (catalog != NULL) {
+		char  *uri;
+		char  *clean_name;
+		char  *name;
+		GFile *gio_new_file;
+		char  *data;
+		gsize  size;
+
+		uri = g_file_get_uri (file);
+		clean_name = _g_filename_clear_for_file (edit_name);
+		name = g_strconcat (clean_name, _g_uri_get_file_extension (uri), NULL);
+		new_file = g_file_get_child_for_display_name (parent, name, &error);
+		gth_catalog_set_file (catalog, new_file);
+		gth_catalog_set_name (catalog, edit_name);
+
+		gio_new_file = gth_catalog_file_to_gio_file (new_file);
+		data = gth_catalog_to_data (catalog, &size);
+		if (g_write_file (gio_new_file,
+				  FALSE,
+				  G_FILE_CREATE_NONE,
+				  data,
+				  size,
+				  gth_file_source_get_cancellable (file_source),
+				  &error))
+		{
+			GFile *gio_old_file;
+
+			gio_old_file = gth_catalog_file_to_gio_file (file);
+			if (g_file_delete (gio_old_file, gth_file_source_get_cancellable (file_source), &error))
+				gth_monitor_file_renamed (gth_main_get_default_monitor (), file, new_file);
+
+			g_object_unref (gio_old_file);
+		}
+
+		g_free (data);
+		g_object_unref (gio_new_file);
+		g_free (clean_name);
+		g_free (name);
+		g_free (uri);
+	}
+	else {
+		new_file = g_file_get_child_for_display_name (parent, edit_name, &error);
+		if (new_file != NULL) {
+			GFile *gio_file;
+			GFile *gio_new_file;
+
+			gio_file = gth_file_source_to_gio_file (file_source, file);
+			gio_new_file = gth_file_source_to_gio_file (file_source, new_file);
+
+			if (g_file_move (gio_file,
+					 gio_new_file,
+					 0,
+					 gth_file_source_get_cancellable (file_source),
+					 NULL,
+					 NULL,
+					 &error))
+			{
+				gth_monitor_file_renamed (gth_main_get_default_monitor (), file, new_file);
+			}
+
+			g_object_unref (gio_new_file);
+			g_object_unref (gio_file);
+		}
+	}
+
+	object_ready_with_error (file_source, callback, data, error);
+
+	_g_object_unref (new_file);
+	g_object_unref (catalog);
+}
+
+
 /* -- gth_file_source_catalogs_for_each_child -- */
 
 
@@ -1436,6 +1523,7 @@ gth_file_source_catalogs_class_init (GthFileSourceCatalogsClass *class)
 	file_source_class->get_file_data = gth_file_source_catalogs_get_file_data;
 	file_source_class->write_metadata = gth_file_source_catalogs_write_metadata;
 	file_source_class->read_metadata = gth_file_source_catalogs_read_metadata;
+	file_source_class->rename = gth_file_source_catalogs_rename;
 	file_source_class->for_each_child = gth_file_source_catalogs_for_each_child;
 	file_source_class->copy = gth_file_source_catalogs_copy;
 	file_source_class->can_cut = gth_file_source_catalogs_can_cut;
diff --git a/extensions/file_manager/callbacks.c b/extensions/file_manager/callbacks.c
index cff6008..4de61d6 100644
--- a/extensions/file_manager/callbacks.c
+++ b/extensions/file_manager/callbacks.c
@@ -804,11 +804,6 @@ fm__gth_browser_folder_tree_popup_before_cb (GthBrowser    *browser,
 				g_error_free (error);
 			}
 		}
-		set_action_sensitive (data, "Folder_Create", (folder != NULL) && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_WRITE));
-		set_action_sensitive (data, "Folder_Rename", (folder != NULL) && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_RENAME));
-		set_action_sensitive (data, "Folder_Delete", (folder != NULL) && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE));
-		set_action_sensitive (data, "Folder_Trash", (folder != NULL) && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_TRASH));
-		set_action_sensitive (data, "Folder_Cut", (folder != NULL) && g_file_info_get_attribute_boolean (folder->info, G_FILE_ATTRIBUTE_ACCESS_CAN_DELETE));
 
 		fm__gth_browser_update_sensitivity_cb (browser);
 	}
diff --git a/gthumb/glib-utils.c b/gthumb/glib-utils.c
index 4bc3a58..cf0536f 100644
--- a/gthumb/glib-utils.c
+++ b/gthumb/glib-utils.c
@@ -1867,6 +1867,13 @@ _g_uri_get_relative_path (const char *uri,
 }
 
 
+char *
+_g_filename_clear_for_file (const char *display_name)
+{
+	return _g_utf8_replace (display_name, "/", "_");
+}
+
+
 /* GIO utils */
 
 
diff --git a/gthumb/glib-utils.h b/gthumb/glib-utils.h
index c24cd02..799a339 100644
--- a/gthumb/glib-utils.h
+++ b/gthumb/glib-utils.h
@@ -242,6 +242,7 @@ const char *    _g_uri_remove_host               (const char *uri);
 char *          _g_uri_get_host                  (const char *uri);
 char *          _g_uri_get_relative_path         (const char *uri,
 						  const char *base);
+char *          _g_filename_clear_for_file       (const char *display_name);
 
 /* GIO utils */
 
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 31453a7..707f729 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -2825,29 +2825,10 @@ folder_tree_rename_cb (GthFolderTree *folder_tree,
 		       const char    *new_name,
 		       GthBrowser    *browser)
 {
-	GFile  *parent;
-	char   *uri;
-	GFile  *new_file;
-	GError *error = NULL;
-
-	parent = g_file_get_parent (file);
-	uri = g_file_get_uri (file);
-	new_file = g_file_get_child_for_display_name (parent, new_name, &error);
-
-	if (new_file == NULL) {
-		_gtk_error_dialog_from_gerror_show (GTK_WINDOW (browser), _("Could not change name"), error);
-		g_clear_error (&error);
-	}
-	else {
-		GthFileSource *file_source;
-
-		file_source = gth_main_get_file_source (file);
-		gth_file_source_rename (file_source, file, new_file, file_source_rename_ready_cb, browser);
-	}
+	GthFileSource *file_source;
 
-	g_object_unref (new_file);
-	g_free (uri);
-	g_object_unref (parent);
+	file_source = gth_main_get_file_source (file);
+	gth_file_source_rename (file_source, file, new_name, file_source_rename_ready_cb, browser);
 }
 
 
diff --git a/gthumb/gth-file-source.c b/gthumb/gth-file-source.c
index a379862..49899a5 100644
--- a/gthumb/gth-file-source.c
+++ b/gthumb/gth-file-source.c
@@ -77,7 +77,7 @@ typedef struct {
 
 typedef struct {
 	GFile         *file;
-	GFile         *new_file;
+	char          *edit_name;
 	ReadyCallback  callback;
 	gpointer       data;
 } RenameData;
@@ -188,7 +188,7 @@ file_source_async_op_free (FileSourceAsyncOp *async_op)
 		break;
 	case FILE_SOURCE_OP_RENAME:
 		g_object_unref (async_op->data.rename.file);
-		g_object_unref (async_op->data.rename.new_file);
+		g_free (async_op->data.rename.edit_name);
 		break;
 	case FILE_SOURCE_OP_COPY:
 		g_object_unref (async_op->data.copy.destination);
@@ -325,7 +325,7 @@ gth_file_source_queue_read_attributes (GthFileSource *file_source,
 static void
 gth_file_source_queue_rename (GthFileSource *file_source,
 			      GFile         *file,
-			      GFile         *new_file,
+			      const char    *edit_name,
 			      ReadyCallback  callback,
 			      gpointer       data)
 {
@@ -335,7 +335,7 @@ gth_file_source_queue_rename (GthFileSource *file_source,
 	async_op->file_source = file_source;
 	async_op->op = FILE_SOURCE_OP_RENAME;
 	async_op->data.rename.file = g_file_dup (file);
-	async_op->data.rename.new_file = g_file_dup (new_file);
+	async_op->data.rename.edit_name = g_strdup (edit_name);
 	async_op->data.rename.callback = callback;
 	async_op->data.rename.data = data;
 
@@ -494,7 +494,7 @@ gth_file_source_exec_next_in_queue (GthFileSource *file_source)
 	case FILE_SOURCE_OP_RENAME:
 		gth_file_source_rename (file_source,
 					async_op->data.rename.file,
-					async_op->data.rename.new_file,
+					async_op->data.rename.edit_name,
 					async_op->data.rename.callback,
 					async_op->data.rename.data);
 		break;
@@ -753,18 +753,34 @@ base_read_metadata (GthFileSource *file_source,
 static void
 base_rename (GthFileSource *file_source,
 	     GFile         *file,
-	     GFile         *new_file,
+	     const char    *edit_name,
 	     ReadyCallback  callback,
 	     gpointer       data)
 {
+	GFile  *parent;
+	GFile  *new_file;
 	GFile  *source;
 	GFile  *destination;
 	GError *error = NULL;
 
+	parent = g_file_get_parent (file);
+	new_file = g_file_get_child_for_display_name (parent, edit_name, &error);
+	if (new_file == NULL) {
+		object_ready_with_error (file_source, callback, data, error);
+		return;
+	}
+
 	source = gth_file_source_to_gio_file (file_source, file);
 	destination = gth_file_source_to_gio_file (file_source, new_file);
 
-	if (g_file_move (source, destination, 0, NULL, NULL, NULL, &error)) {
+	if (g_file_move (source,
+			 destination,
+			 0,
+			 gth_file_source_get_cancellable (file_source),
+			 NULL,
+			 NULL,
+			 &error))
+	{
 		GthMonitor *monitor;
 
 		monitor = gth_main_get_default_monitor ();
@@ -1231,16 +1247,16 @@ gth_file_source_read_attributes (GthFileSource  *file_source,
 void
 gth_file_source_rename (GthFileSource  *file_source,
 			GFile          *file,
-			GFile          *new_file,
+			const char     *edit_name,
 			ReadyCallback   ready_callback,
 			gpointer        data)
 {
 	if (gth_file_source_is_active (file_source)) {
-		gth_file_source_queue_rename (file_source, file, new_file, ready_callback, data);
+		gth_file_source_queue_rename (file_source, file, edit_name, ready_callback, data);
 		return;
 	}
 	g_cancellable_reset (file_source->priv->cancellable);
-	GTH_FILE_SOURCE_GET_CLASS (G_OBJECT (file_source))->rename (file_source, file, new_file, ready_callback, data);
+	GTH_FILE_SOURCE_GET_CLASS (G_OBJECT (file_source))->rename (file_source, file, edit_name, ready_callback, data);
 }
 
 
diff --git a/gthumb/gth-file-source.h b/gthumb/gth-file-source.h
index 504c00e..9f9ffc9 100644
--- a/gthumb/gth-file-source.h
+++ b/gthumb/gth-file-source.h
@@ -101,7 +101,7 @@ struct _GthFileSourceClass
 					       gpointer              data);
 	void         (*rename)                (GthFileSource        *file_source,
 					       GFile                *file,
-					       GFile                *new_file,
+					       const char           *edit_name,
 					       ReadyCallback         callback,
 					       gpointer              data);
 	void         (*copy)                  (GthFileSource        *file_source,
@@ -189,7 +189,7 @@ void           gth_file_source_read_attributes       (GthFileSource        *file
 						      gpointer              data);
 void           gth_file_source_rename                (GthFileSource        *file_source,
 						      GFile                *file,
-						      GFile                *new_file,
+						      const char           *edit_name,
 						      ReadyCallback         ready_callback,
 						      gpointer              data);
 void           gth_file_source_copy                  (GthFileSource        *file_source,
diff --git a/gthumb/gth-folder-tree.c b/gthumb/gth-folder-tree.c
index 0747f06..1f0caf4 100644
--- a/gthumb/gth-folder-tree.c
+++ b/gthumb/gth-folder-tree.c
@@ -211,6 +211,10 @@ text_renderer_edited_cb (GtkCellRendererText *renderer,
 	GthFileData   *file_data;
 	char          *name;
 
+	g_object_set (folder_tree->priv->text_renderer,
+		      "editable", FALSE,
+		      NULL);
+
 	tree_path = gtk_tree_path_new_from_string (path);
 	if (! gtk_tree_model_get_iter (GTK_TREE_MODEL (folder_tree->priv->tree_store),
 				       &iter,
@@ -237,6 +241,49 @@ text_renderer_edited_cb (GtkCellRendererText *renderer,
 
 
 static void
+text_renderer_editing_started_cb (GtkCellRenderer *cell,
+				  GtkCellEditable *editable,
+				  const char      *path,
+				  gpointer         user_data)
+{
+	GthFolderTree *folder_tree = user_data;
+	GtkTreePath   *tree_path;
+	GtkTreeIter    iter;
+	GthFileData   *file_data;
+
+	tree_path = gtk_tree_path_new_from_string (path);
+	if (! gtk_tree_model_get_iter (GTK_TREE_MODEL (folder_tree->priv->tree_store),
+				       &iter,
+				       tree_path))
+	{
+		gtk_tree_path_free (tree_path);
+		return;
+	}
+	gtk_tree_path_free (tree_path);
+
+	gtk_tree_model_get (GTK_TREE_MODEL (folder_tree->priv->tree_store),
+			    &iter,
+			    COLUMN_FILE_DATA, &file_data,
+			    -1);
+
+	if (GTK_IS_ENTRY (editable))
+	      gtk_entry_set_text (GTK_ENTRY (editable), g_file_info_get_edit_name (file_data->info));
+}
+
+
+static void
+text_renderer_editing_canceled_cb (GtkCellRenderer *renderer,
+				    gpointer         user_data)
+{
+	GthFolderTree *folder_tree = user_data;
+
+	g_object_set (folder_tree->priv->text_renderer,
+		      "editable", FALSE,
+		      NULL);
+}
+
+
+static void
 add_columns (GthFolderTree *folder_tree,
 	     GtkTreeView   *treeview)
 {
@@ -252,14 +299,21 @@ add_columns (GthFolderTree *folder_tree,
 					     NULL);
 
 	folder_tree->priv->text_renderer = renderer = gtk_cell_renderer_text_new ();
-	g_object_set (G_OBJECT (renderer),
+	g_object_set (renderer,
 		      "ellipsize", PANGO_ELLIPSIZE_END,
-		      "editable", TRUE,
 		      NULL);
 	g_signal_connect (folder_tree->priv->text_renderer,
 			  "edited",
 			  G_CALLBACK (text_renderer_edited_cb),
 			  folder_tree);
+	g_signal_connect (folder_tree->priv->text_renderer,
+			  "editing-started",
+			  G_CALLBACK (text_renderer_editing_started_cb),
+			  folder_tree);
+	g_signal_connect (folder_tree->priv->text_renderer,
+			  "editing-canceled",
+			  G_CALLBACK (text_renderer_editing_canceled_cb),
+			  folder_tree);
 
 	gtk_tree_view_column_pack_start (column, renderer, TRUE);
 	gtk_tree_view_column_set_attributes (column, renderer,
@@ -452,12 +506,6 @@ button_press_cb (GtkWidget      *widget,
 		_g_object_unref (file_data);
  	}
 	else if ((event->button == 1) && (event->type == GDK_BUTTON_PRESS)) {
-		GtkTreeSelection *selection;
-		int               start_pos;
-		int               width;
-		int               expander_size;
-		int               horizontal_separator;
-
 		/* This can be the start of a dragging action. */
 
 		if (! (event->state & GDK_CONTROL_MASK)
@@ -468,27 +516,6 @@ button_press_cb (GtkWidget      *widget,
 			folder_tree->priv->drag_start_x = event->x;
 			folder_tree->priv->drag_start_y = event->y;
 		}
-
-		/**/
-
-		if (! gtk_tree_view_column_cell_get_position (column,
-							      folder_tree->priv->text_renderer,
-							      &start_pos,
-							      &width))
-		{
-			start_pos = 0;
-			width = 0;
-		}
-
-		gtk_style_context_get_style (gtk_widget_get_style_context (GTK_WIDGET (folder_tree)),
-					     "expander-size", &expander_size,
-					     "horizontal-separator", &horizontal_separator,
-					     NULL);
-		start_pos += (gtk_tree_path_get_depth (path) - 1) * (expander_size + (horizontal_separator * 2));
-
-		selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_tree));
-		if ((cell_x > start_pos) && gtk_tree_selection_iter_is_selected (selection, &iter))
-			 retval = TRUE;
 	}
 	else if ((event->button == 1) && (event->type == GDK_2BUTTON_PRESS)) {
 		if (! gtk_tree_view_row_expanded (GTK_TREE_VIEW (folder_tree), path))
@@ -605,9 +632,6 @@ selection_changed_cb (GtkTreeSelection *selection,
 
 	selected_path = gtk_tree_model_get_path (GTK_TREE_MODEL (folder_tree->priv->tree_store), &iter);
 
-	/*if (! gtk_tree_view_row_expanded (GTK_TREE_VIEW (folder_tree), selected_path))
-		gtk_tree_view_expand_row (GTK_TREE_VIEW (folder_tree), selected_path, FALSE);*/
-
 	gtk_tree_model_get (GTK_TREE_MODEL (folder_tree->priv->tree_store),
 			    &iter,
 			    COLUMN_TYPE, &entry_type,
@@ -1421,10 +1445,30 @@ gth_folder_tree_update_child (GthFolderTree *folder_tree,
 			      GFile         *old_file,
 			      GthFileData   *file_data)
 {
-	GtkTreeIter iter;
+	GtkTreeIter old_file_iter;
+	GtkTreeIter new_file_iter;
+
+	if (! gth_folder_tree_get_iter (folder_tree, old_file, &old_file_iter, NULL))
+		return;
+
+	if (gth_folder_tree_get_iter (folder_tree, file_data->file, &new_file_iter, NULL)) {
+		GFile *parent;
+		GList *files;
+
+		/* the new file is already present, remove the old file */
 
-	if (gth_folder_tree_get_iter (folder_tree, old_file, &iter, NULL))
-		_gth_folder_tree_set_file_data (folder_tree, &iter, file_data);
+		parent = g_file_get_parent (old_file);
+		files = g_list_prepend (NULL, g_object_ref (old_file));
+		gth_folder_tree_delete_children (folder_tree, parent, files);
+		_g_object_list_unref (files);
+		g_object_unref (parent);
+
+		/* update the data old of the new file */
+
+		_gth_folder_tree_set_file_data (folder_tree, &new_file_iter, file_data);
+	}
+	else
+		_gth_folder_tree_set_file_data (folder_tree, &old_file_iter, file_data);
 }
 
 
@@ -1474,10 +1518,11 @@ gth_folder_tree_start_editing (GthFolderTree *folder_tree,
 	if (! gth_folder_tree_get_iter (folder_tree, file, &iter, NULL))
 		return;
 
+	g_object_set (folder_tree->priv->text_renderer,
+		      "editable", TRUE,
+		      NULL);
+
 	tree_path = gtk_tree_model_get_path (GTK_TREE_MODEL (folder_tree->priv->tree_store), &iter);
-	gtk_tree_view_expand_to_path (GTK_TREE_VIEW (folder_tree), tree_path);
-	gtk_tree_view_collapse_row (GTK_TREE_VIEW (folder_tree), tree_path);
-	gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (folder_tree), tree_path, NULL, TRUE, 0.5, 0.0);
 	tree_column = gtk_tree_view_get_column (GTK_TREE_VIEW (folder_tree), 0);
 	gtk_tree_view_set_cursor (GTK_TREE_VIEW (folder_tree),
 				  tree_path,
diff --git a/gthumb/gth-source-tree.c b/gthumb/gth-source-tree.c
index e4e63a6..6674a32 100644
--- a/gthumb/gth-source-tree.c
+++ b/gthumb/gth-source-tree.c
@@ -189,28 +189,7 @@ source_tree_rename_cb (GthFolderTree *folder_tree,
 		       const char    *new_name,
 		       GthSourceTree *source_tree)
 {
-	GFile  *parent;
-	char   *uri;
-	char   *new_basename;
-	GFile  *new_file;
-	GError *error = NULL;
-
-	parent = g_file_get_parent (file);
-	uri = g_file_get_uri (file);
-	new_basename = g_strconcat (new_name, _g_uri_get_file_extension (uri), NULL);
-	new_file = g_file_get_child_for_display_name (parent, new_basename, &error);
-
-	if (new_file == NULL) {
-		_gtk_error_dialog_from_gerror_show (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (source_tree))), _("Could not change name"), error);
-		g_clear_error (&error);
-	}
-	else
-		gth_file_source_rename (source_tree->priv->file_source, file, new_file, file_source_rename_ready_cb, source_tree);
-
-	g_object_unref (new_file);
-	g_free (new_basename);
-	g_free (uri);
-	g_object_unref (parent);
+	gth_file_source_rename (source_tree->priv->file_source, file, new_name, file_source_rename_ready_cb, source_tree);
 }
 
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]