Index: kdevplatform/shell/openprojectdialog.cpp =================================================================== --- kdevplatform/shell/openprojectdialog.cpp +++ kdevplatform/shell/openprojectdialog.cpp @@ -304,7 +304,16 @@ void OpenProjectDialog::validateProjectName( const QString& name ) { - m_projectName = name; + if (name != m_projectName) { + m_projectName = name; + QUrl url(m_url.adjusted(QUrl::StripTrailingSlash | QUrl::RemoveFilename)); + // construct a version of the project name that's safe for use as a filename: + // TODO: do an additional replace of QDir::separator() with "@"? + QString safeName = m_projectName.replace(QRegExp("[\\\\/]"), QStringLiteral("@")); + url.setPath(url.path() + '/' + safeName + '.' + ShellExtension::getInstance()->projectFileExtension()); + m_urlIsDirectory = false; + m_url.setPath(url.path()); + } validateProjectInfo(); } Index: kdevplatform/shell/projectcontroller.cpp =================================================================== --- kdevplatform/shell/projectcontroller.cpp +++ kdevplatform/shell/projectcontroller.cpp @@ -429,7 +429,8 @@ } QUrl projectFileUrl = dlg->projectFileUrl(); - qCDebug(SHELL) << "selected project:" << projectFileUrl << dlg->projectName() << dlg->projectManager(); + qCDebug(SHELL) << "selected project:" << projectFileUrl << "selectedUrl=" << dlg->selectedUrl() + << "projectName=" << dlg->projectName() << "projectManager=" << dlg->projectManager(); if ( dlg->projectManager() == QLatin1String("") ) { return projectFileUrl; } @@ -439,8 +440,9 @@ if( projectFileExists( projectFileUrl ) ) { // check whether config is equal - bool shouldAsk = true; - if( projectFileUrl == dlg->selectedUrl() ) + bool isKDevProject = QFileInfo(projectFileUrl.url()).completeSuffix() == QStringLiteral("kdev4"); + bool shouldAsk = !isKDevProject; + if( !isKDevProject && projectFileUrl == dlg->selectedUrl() ) { if( projectFileUrl.isLocalFile() ) {