diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 7b01f88626de53dbab4069c6c6d8f50ba404ee07..27116010458d47e957ab64a1f88fc46437ba4ec4 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -698,9 +698,9 @@ bool EditorManager::closeEditors(const QList<IEditor*> editorsToClose, bool askA if (cancelled) return false; if (!list.isEmpty()) { + closingFailed = true; QSet<IEditor*> skipSet = editorsForFiles(list).toSet(); acceptedEditors = acceptedEditors.toSet().subtract(skipSet).toList(); - closingFailed = false; } } if (acceptedEditors.isEmpty()) @@ -1203,23 +1203,35 @@ bool EditorManager::saveFile(IEditor *editor) file->checkPermissions(); const QString &fileName = file->fileName(); - if (!fileName.isEmpty() && file->isReadOnly()) { + + if (fileName.isEmpty()) + return saveFileAs(editor); + + bool success = false; + + // try saving, no matter what isReadOnly tells us + m_d->m_core->fileManager()->blockFileChange(file); + success = file->save(fileName); + m_d->m_core->fileManager()->unblockFileChange(file); + + if (!success) { MakeWritableResult answer = makeEditorWritable(editor); if (answer == Failed) return false; if (answer == SavedAs) return true; - } - if (file->isReadOnly() || fileName.isEmpty()) - return saveFileAs(editor); + file->checkPermissions(); + + m_d->m_core->fileManager()->blockFileChange(file); + success = file->save(fileName); + m_d->m_core->fileManager()->unblockFileChange(file); + } - m_d->m_core->fileManager()->blockFileChange(file); - const bool success = file->save(fileName); - m_d->m_core->fileManager()->unblockFileChange(file); if (success) m_d->m_core->fileManager()->addToRecentFiles(editor->file()->fileName()); + return success; } @@ -1241,7 +1253,7 @@ EditorManager::ReadOnlyAction QPushButton *saveAsButton = 0; if (displaySaveAsButton) - msgBox.addButton(QObject::tr("Save as ..."), QMessageBox::ActionRole); + saveAsButton = msgBox.addButton(QObject::tr("Save as ..."), QMessageBox::ActionRole); msgBox.setDefaultButton(sccButton ? sccButton : makeWritableButton); msgBox.exec(); @@ -1310,6 +1322,7 @@ bool EditorManager::saveFileAs(IEditor *editor) m_d->m_core->fileManager()->blockFileChange(editor->file()); const bool success = editor->file()->save(absoluteFilePath); m_d->m_core->fileManager()->unblockFileChange(editor->file()); + editor->file()->checkPermissions(); if (success) m_d->m_core->fileManager()->addToRecentFiles(editor->file()->fileName()); diff --git a/src/plugins/coreplugin/filemanager.cpp b/src/plugins/coreplugin/filemanager.cpp index b42611b2217c28fd829ee6de8dbc4b95949b84f3..a851fa792dfbd7e1a5c8fab378676d7ff941b2d7 100644 --- a/src/plugins/coreplugin/filemanager.cpp +++ b/src/plugins/coreplugin/filemanager.cpp @@ -394,6 +394,7 @@ QList<IFile *> FileManager::saveModifiedFiles(const QList<IFile *> &files, if (!fileName.isEmpty()) { blockFileChange(file); ok = file->save(fileName); + file->checkPermissions(); unblockFileChange(file); } if (!ok) diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index 3c552a83aae494b90966a4287b9df67f6a92839d..3ddf4fc75c2aaa5e841c5d4b4fef8a1a5b3b6bf0 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -354,8 +354,8 @@ void MainWindow::closeEvent(QCloseEvent *event) // Save opened files bool cancelled; - fileManager()->saveModifiedFiles(fileManager()->modifiedFiles(), &cancelled); - if (cancelled) { + QList<IFile*> notSaved = fileManager()->saveModifiedFiles(fileManager()->modifiedFiles(), &cancelled); + if (cancelled || !notSaved.isEmpty()) { event->ignore(); return; } diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp index 55b9e143792280d9aed4aea59c39486d7f3eb859..17141e8cc3de4c11c9bb2090bf8e22459fcd7c56 100644 --- a/src/plugins/texteditor/basetextdocument.cpp +++ b/src/plugins/texteditor/basetextdocument.cpp @@ -163,18 +163,7 @@ void BaseTextDocument::checkPermissions() { if (!m_fileName.isEmpty()) { const QFileInfo fi(m_fileName); - -#ifdef Q_OS_WIN - // Check for permissions on NTFS file systems - qt_ntfs_permission_lookup++; -#endif - m_fileIsReadOnly = !fi.isWritable(); - -#ifdef Q_OS_WIN - qt_ntfs_permission_lookup--; -#endif - } else { m_fileIsReadOnly = false; }