From ec9373ba8a878d1465b9cffb53520225ef2c003f Mon Sep 17 00:00:00 2001 From: Roberto Raggi <roberto.raggi@nokia.com> Date: Fri, 8 May 2009 15:48:00 +0200 Subject: [PATCH] Introduced IFile::checkPermission() and use it to reduce the number of calls to isWritable(). Done with: mae --- .../editormanager/editormanager.cpp | 4 +++ src/plugins/coreplugin/ifile.h | 2 ++ src/plugins/texteditor/basetextdocument.cpp | 32 +++++++++++++------ src/plugins/texteditor/basetextdocument.h | 2 ++ src/plugins/texteditor/basetexteditor.cpp | 9 ------ src/plugins/texteditor/basetexteditor_p.h | 3 -- 6 files changed, 31 insertions(+), 21 deletions(-) diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index 3eb7503ac8a..52f1a51195d 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -1201,6 +1201,8 @@ bool EditorManager::saveFile(IEditor *editor) return false; IFile *file = editor->file(); + file->checkPermissions(); + const QString &fileName = file->fileName(); if (!fileName.isEmpty() && file->isReadOnly()) { MakeWritableResult answer = @@ -1270,6 +1272,7 @@ EditorManager::makeEditorWritable(IEditor *editor) QMessageBox::warning(m_d->m_core->mainWindow(), tr("Failed!"), tr("Could not open the file for edit with SCC.")); return Failed; } + file->checkPermissions(); return OpenedWithVersionControl; case RO_MakeWriteable: { const bool permsOk = QFile::setPermissions(fileName, QFile::permissions(fileName) | QFile::WriteUser); @@ -1278,6 +1281,7 @@ EditorManager::makeEditorWritable(IEditor *editor) return Failed; } } + file->checkPermissions(); return MadeWritable; case RO_SaveAs : return saveFileAs(editor) ? SavedAs : Failed; diff --git a/src/plugins/coreplugin/ifile.h b/src/plugins/coreplugin/ifile.h index 9dd658faf4e..06179c16e57 100644 --- a/src/plugins/coreplugin/ifile.h +++ b/src/plugins/coreplugin/ifile.h @@ -60,6 +60,8 @@ public: virtual void modified(ReloadBehavior *behavior) = 0; + virtual void checkPermissions() {} + signals: void changed(); }; diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp index 665dd5617aa..55b9e143792 100644 --- a/src/plugins/texteditor/basetextdocument.cpp +++ b/src/plugins/texteditor/basetextdocument.cpp @@ -70,6 +70,7 @@ BaseTextDocument::BaseTextDocument() { m_documentMarker = new DocumentMarker(m_document); m_lineTerminatorMode = NativeLineTerminator; + m_fileIsReadOnly = false; m_isBinaryData = false; m_codec = QTextCodec::codecForLocale(); m_hasDecodingError = false; @@ -149,22 +150,34 @@ bool BaseTextDocument::isReadOnly() const const QFileInfo fi(m_fileName); + return m_fileIsReadOnly; + +} + +bool BaseTextDocument::isModified() const +{ + return m_document->isModified(); +} + +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++; + // Check for permissions on NTFS file systems + qt_ntfs_permission_lookup++; #endif - const bool ro = !fi.isWritable(); + m_fileIsReadOnly = !fi.isWritable(); #ifdef Q_OS_WIN - qt_ntfs_permission_lookup--; + qt_ntfs_permission_lookup--; #endif - return ro; -} -bool BaseTextDocument::isModified() const -{ - return m_document->isModified(); + } else { + m_fileIsReadOnly = false; + } } bool BaseTextDocument::open(const QString &fileName) @@ -172,6 +185,7 @@ bool BaseTextDocument::open(const QString &fileName) QString title = tr("untitled"); if (!fileName.isEmpty()) { const QFileInfo fi(fileName); + m_fileIsReadOnly = !fi.isWritable(); m_fileName = fi.absoluteFilePath(); QFile file(fileName); diff --git a/src/plugins/texteditor/basetextdocument.h b/src/plugins/texteditor/basetextdocument.h index a07528f11fa..a8326514894 100644 --- a/src/plugins/texteditor/basetextdocument.h +++ b/src/plugins/texteditor/basetextdocument.h @@ -83,6 +83,7 @@ public: virtual bool isReadOnly() const; virtual bool isModified() const; virtual bool isSaveAsAllowed() const { return true; } + virtual void checkPermissions(); virtual void modified(Core::IFile::ReloadBehavior *behavior); virtual QString mimeType() const; void setMimeType(const QString &mt); @@ -141,6 +142,7 @@ private: LineTerminatorMode m_lineTerminatorMode; QTextCodec *m_codec; + bool m_fileIsReadOnly; bool m_isBinaryData; bool m_hasDecodingError; QByteArray m_decodingErrorSample; diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp index 0918c841548..6a635c32dec 100644 --- a/src/plugins/texteditor/basetexteditor.cpp +++ b/src/plugins/texteditor/basetexteditor.cpp @@ -1332,15 +1332,6 @@ void BaseTextEditorPrivate::setupDocumentSignals(BaseTextDocument *document) q->slotUpdateExtraAreaWidth(); } -#ifndef TEXTEDITOR_STANDALONE -bool BaseTextEditorPrivate::needMakeWritableCheck() const -{ - return !m_document->isModified() - && !m_document->fileName().isEmpty() - && m_document->isReadOnly(); -} -#endif - bool Parenthesis::hasClosingCollapse(const Parentheses &parentheses) { return closeCollapseAtPos(parentheses) >= 0; diff --git a/src/plugins/texteditor/basetexteditor_p.h b/src/plugins/texteditor/basetexteditor_p.h index 80422f88a61..86f43ff22d5 100644 --- a/src/plugins/texteditor/basetexteditor_p.h +++ b/src/plugins/texteditor/basetexteditor_p.h @@ -142,9 +142,6 @@ public: #endif void setupDocumentSignals(BaseTextDocument *document); void updateLineSelectionColor(); -#ifndef TEXTEDITOR_STANDALONE - bool needMakeWritableCheck() const; -#endif void print(QPrinter *printer); -- GitLab