diff src/utilops.c @ 42:606fcf461a68

Sat May 14 13:04:23 2005 John Ellis <johne@verizon.net> * po/cs.po: Update Czech translation, submitted by Jan Raska <jan.raska@tiscali.cz> * de.po, fr.po: Typo and spelling fixes. Sat May 14 12:23:19 2005 John Ellis <johne@verizon.net> * image.c, pixbuf-renderer.c: Fix sending of complete signal. * ui_pathsel.c: Guard against strcmp of NULL dd->path, fixes crash. * utilops.c: Additional validation for destination of copy/move dialogs, and do not include extension when conveniently selecting filename text in rename dialogs. ##### Note: GQview CVS on sourceforge is not always up to date, please use ##### ##### an offical release when making enhancements and translation updates. #####
author gqview
date Sat, 14 May 2005 20:58:18 +0000
parents 3263965d5f9e
children 458e396d3f35
line wrap: on
line diff
--- a/src/utilops.c	Wed Apr 27 19:29:15 2005 +0000
+++ b/src/utilops.c	Sat May 14 20:58:18 2005 +0000
@@ -300,6 +300,26 @@
 	return gd;
 }
 
+static gint filename_base_length(const gchar *name)
+{
+	gint n;
+
+	if (!name) return 0;
+
+	n = strlen(name);
+
+	if (filter_name_exists(name))
+		{
+		const gchar *ext;
+
+		ext = extension_from_path(name);
+		if (ext) n -= strlen(ext);
+		}
+
+	return n;
+}
+
+
 /*
  *--------------------------------------------------------------------------
  * Move and Copy routines
@@ -459,7 +479,15 @@
 	gtk_widget_set_sensitive(fdm->rename_entry, fdm->rename);
 	gtk_widget_set_sensitive(fdm->yes_all_button, !fdm->rename);
 
-	if (fdm->rename) gtk_widget_grab_focus(fdm->rename_entry);
+	if (fdm->rename)
+		{
+		const gchar *name;
+
+		gtk_widget_grab_focus(fdm->rename_entry);
+
+		name = gtk_entry_get_text(GTK_ENTRY(fdm->rename_entry));
+		gtk_editable_select_region(GTK_EDITABLE(fdm->rename_entry), 0, filename_base_length(name));
+		}
 }
 
 static GenericDialog *file_util_move_multiple_confirm_dialog(FileDataMult *fdm)
@@ -764,7 +792,15 @@
 	fds->rename = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget));
 	gtk_widget_set_sensitive(fds->rename_entry, fds->rename);
 
-	if (fds->rename) gtk_widget_grab_focus(fds->rename_entry);
+	if (fds->rename)
+		{
+		const gchar *name;
+
+		gtk_widget_grab_focus(fds->rename_entry);
+
+		name = gtk_entry_get_text(GTK_ENTRY(fds->rename_entry));
+		gtk_editable_select_region(GTK_EDITABLE(fds->rename_entry), 0, filename_base_length(name));
+		}
 }
 
 static void file_util_move_single(FileDataSingle *fds)
@@ -892,6 +928,11 @@
 
 static void file_util_move_check(FileDialog *fd)
 {
+	if (fd->dest_path && strcmp(fd->dest_path, "~") == 0)
+		{
+		gtk_entry_set_text(GTK_ENTRY(fd->entry), homedir());
+		}
+
 	if (fd->multiple_files && !isdir(fd->dest_path))
 		{
 		if (isfile(fd->dest_path))
@@ -907,6 +948,24 @@
 		return;
 		}
 
+	if (!fd->dest_path || fd->dest_path[0] != '/')
+		{
+		if (fd->source_path)
+			{
+			gchar *base;
+			gchar *path;
+
+			base = remove_level_from_path(fd->source_path);
+			path = concat_dir_and_file(base, fd->dest_path);
+
+			gtk_entry_set_text(GTK_ENTRY(fd->entry), path);
+
+			g_free(path);
+			g_free(base);
+			}
+		return;
+		}
+
 	file_util_move_do(fd);
 }
 
@@ -1875,6 +1934,7 @@
 	if (GTK_WIDGET_VISIBLE(rd->rename_box))
 		{
 		gtk_widget_grab_focus(rd->rename_entry);
+		gtk_editable_select_region(GTK_EDITABLE(rd->rename_entry), 0, filename_base_length(name));
 		}
 
 	return TRUE;
@@ -2025,6 +2085,7 @@
 	GtkWidget *table;
 	GtkWidget *combo;
 	GList *work;
+	const gchar *name;
 
 	rd = g_new0(RenameDataMult, 1);
 
@@ -2113,10 +2174,13 @@
 	pref_table_label(table, 0, 1, _("New name:"), 1.0);
 
 	rd->rename_entry = gtk_entry_new();
-	gtk_entry_set_text(GTK_ENTRY(rd->rename_entry), filename_from_path(rd->fd->source_path));
 	gtk_table_attach(GTK_TABLE(table), rd->rename_entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, FALSE, 0, 0);
 	generic_dialog_attach_default(GENERIC_DIALOG(rd->fd), rd->rename_entry);
 	gtk_widget_grab_focus(rd->rename_entry);
+
+	name = filename_from_path(rd->fd->source_path);
+	gtk_entry_set_text(GTK_ENTRY(rd->rename_entry), name);
+	gtk_editable_select_region(GTK_EDITABLE(rd->rename_entry), 0, filename_base_length(name));
 	gtk_widget_show(rd->rename_entry);
 
 	rd->auto_box = gtk_vbox_new(FALSE, PREF_PAD_GAP);
@@ -2245,6 +2309,7 @@
 {
 	FileDialog *fd;
 	GtkWidget *table;
+	const gchar *name;
 
 	fd = file_util_file_dlg(_("Rename - GQview"), "GQview", "dlg_rename", parent,
 			     file_util_rename_single_close_cb, NULL);
@@ -2266,10 +2331,12 @@
 
 	fd->entry = gtk_entry_new();
 	gtk_table_attach(GTK_TABLE(table), fd->entry, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, FALSE, 0, 0);
-	gtk_entry_set_text(GTK_ENTRY(fd->entry), filename_from_path(fd->source_path));
-	gtk_editable_select_region(GTK_EDITABLE(fd->entry), 0, strlen(gtk_entry_get_text(GTK_ENTRY(fd->entry))));
 	generic_dialog_attach_default(GENERIC_DIALOG(fd), fd->entry);
 	gtk_widget_grab_focus(fd->entry);
+
+	name = filename_from_path(fd->source_path);
+	gtk_entry_set_text(GTK_ENTRY(fd->entry), name);
+	gtk_editable_select_region(GTK_EDITABLE(fd->entry), 0, filename_base_length(name));
 	gtk_widget_show(fd->entry);
 
 	gtk_widget_show(GENERIC_DIALOG(fd)->dialog);