void DolphinView::rename(const KURL& source, const QString& newName) { bool ok = false; if (newName.isEmpty() || (source.fileName() == newName)) { return; } KURL dest(source.upURL()); dest.addPath(newName); const bool destExists = KIO::NetAccess::exists(dest, false, Dolphin::mainWin().activeView()); if (destExists) { // the destination already exists, hence ask the user // how to proceed... KIO::RenameDlg renameDialog(this, i18n("File Already Exists"), source.path(), dest.path(), KIO::M_OVERWRITE); switch (renameDialog.exec()) { case KIO::R_OVERWRITE: // the destination should be overwritten ok = KIO::NetAccess::file_move(source, dest, -1, true); break; case KIO::R_RENAME: { // a new name for the destination has been used KURL newDest(renameDialog.newDestURL()); ok = KIO::NetAccess::file_move(source, newDest); break; } default: // the renaming operation has been canceled reload(); return; } } else { // no destination exists, hence just move the file to // do the renaming ok = KIO::NetAccess::file_move(source, dest); } if (ok) { m_statusBar->setMessage(i18n("Renamed file '%1' to '%2'.").arg(source.fileName(), dest.fileName()), DolphinStatusBar::OperationCompleted); DolphinCommand command(DolphinCommand::Rename, source, dest); UndoManager::instance().addCommand(command); } else { m_statusBar->setMessage(i18n("Renaming of file '%1' to '%2' failed.").arg(source.fileName(), dest.fileName()), DolphinStatusBar::Error); reload(); } }
void renameFileProc(XtPointer fsel, int conf) { SelFileNamesRec *fnames = (SelFileNamesRec *) fsel; struct stat stats; char to[MAXPATHLEN]; if (conf != YES) { freeSelFiles(fnames); return; } if (chdir(fnames->directory)) { sysError(fnames->shell, "System error:"); freeSelFiles(fnames); return; } chdir(user.home); if (fnames->target[0] != '/' && fnames->target[0] != '~' && fnames->target != 0) { strcpy(to, fnames->directory); if (to[strlen(to)-1] != '/') strcat(to, "/"); } else to[0] = 0; strcat(to, fnames->target); fnexpand(to); XTFREE(fnames->target); fnames->target = XtNewString(to); if (!(stat(to, &stats)) && S_ISDIR(stats.st_mode)) renameDialog(fnames); else moveFilesProc(fsel, YES); }