Solving bug #282 : already existing file may be overwritted in a rename process (directory tab)

This commit is contained in:
natureh
2011-04-10 23:45:43 +02:00
parent 8e36891073
commit c5c2258f6f

View File

@@ -676,6 +676,8 @@ void FileCatalog::developRequested (std::vector<FileBrowserEntry*> tbe) {
void FileCatalog::renameRequested (std::vector<FileBrowserEntry*> tbe) {
bool success;
RenameDialog* renameDlg = new RenameDialog ((Gtk::Window*)get_toplevel());
for (size_t i=0; i<tbe.size(); i++) {
@@ -685,6 +687,8 @@ void FileCatalog::renameRequested (std::vector<FileBrowserEntry*> tbe) {
Glib::ustring dirName = Glib::path_get_dirname (tbe[i]->filename);
Glib::ustring baseName = Glib::path_get_basename (tbe[i]->filename);
success = false;
do {
if (renameDlg->run ()== Gtk::RESPONSE_OK) {
Glib::ustring nBaseName = renameDlg->getNewName ();
// if path has directory components, exit
@@ -695,13 +699,26 @@ void FileCatalog::renameRequested (std::vector<FileBrowserEntry*> tbe) {
if (ext=="")
nBaseName += "." + getExtension (baseName);
Glib::ustring nfname = Glib::build_filename (dirName, nBaseName);
/* check if filename already exists*/
if (safe_file_test (nfname, Glib::FILE_TEST_EXISTS)) {
Glib::ustring msg_ = Glib::ustring("<b>") + nfname + ": " + M("MAIN_MSG_ALREADYEXISTS") + "</b>";
Gtk::MessageDialog msgd (msg_, true, Gtk::MESSAGE_ERROR, Gtk::BUTTONS_OK, true);
msgd.run ();
}
else {
success = true;
if (!safe_g_rename (ofname, nfname)) {
cacheMgr->renameEntry (ofname, tbe[i]->thumbnail->getMD5(), nfname);
reparseDirectory ();
}
renameDlg->hide ();
}
}
else
success = true;
} while (!success);
renameDlg->hide ();
}
delete renameDlg;
/* // ask for new file name
Gtk::Dialog dialog (M("FILEBROWSER_RENAMEDLGLABEL"), *((Gtk::Window*)get_toplevel()), true, true);