From ed61e0b5bd0254a38563b52450d6b2e8edd676c9 Mon Sep 17 00:00:00 2001 From: Fred Emmott <mail@fredemmott.co.uk> Date: Tue, 13 Jan 2009 23:31:08 +0000 Subject: [PATCH] Block the "this file has been changed outside of qt creator" popup in the fakevim ":w" command. --- src/plugins/fakevim/fakevimhandler.cpp | 30 +++++++++++++++++++------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/src/plugins/fakevim/fakevimhandler.cpp b/src/plugins/fakevim/fakevimhandler.cpp index 5093303ceae..379b7eb42b5 100644 --- a/src/plugins/fakevim/fakevimhandler.cpp +++ b/src/plugins/fakevim/fakevimhandler.cpp @@ -35,6 +35,8 @@ #include "fakevimconstants.h" +#include <coreplugin/filemanager.h> +#include <coreplugin/icore.h> #include <texteditor/basetexteditor.h> #include <QtCore/QDebug> @@ -206,6 +208,7 @@ public: bool m_wasReadOnly; // saves read-only state of document FakeVimHandler *q; + Core::ICore *m_core; Mode m_mode; SubMode m_submode; SubSubMode m_subsubmode; @@ -225,6 +228,7 @@ public: QString m_commandBuffer; QString m_currentFileName; + Core::IFile* m_currentFile; QString m_currentMessage; bool m_lastSearchForward; @@ -282,6 +286,8 @@ FakeVimHandler::Private::Private(FakeVimHandler *parent) m_plaintextedit = 0; m_visualMode = NoVisualMode; + m_core = ExtensionSystem::PluginManager::instance()->getObject<Core::ICore>(); + m_config[ConfigStartOfLine] = ConfigOn; m_config[ConfigTabStop] = "8"; m_config[ConfigSmartTab] = ConfigOff; @@ -1050,12 +1056,18 @@ void FakeVimHandler::Private::handleExCommand(const QString &cmd0) bool exists = file.exists(); if (exists && !forced && !noArgs) { showRedMessage(tr("File '%1' exists (add ! to override)").arg(fileName)); - } else if (file.open(QIODevice::ReadWrite)) { - QTextCursor tc = selectRange(beginLine, endLine); - qDebug() << "ANCHOR: " << tc.position() << tc.anchor() - << tc.selection().toPlainText(); - { QTextStream ts(&file); ts << tc.selection().toPlainText(); } - file.close(); + } else if (m_currentFile || file.open(QIODevice::ReadWrite)) { + if(m_currentFile) { + m_core->fileManager()->blockFileChange(m_currentFile); + m_currentFile->save(fileName); + m_core->fileManager()->unblockFileChange(m_currentFile); + } else { + QTextCursor tc = selectRange(beginLine, endLine); + qDebug() << "ANCHOR: " << tc.position() << tc.anchor() + << tc.selection().toPlainText(); + { QTextStream ts(&file); ts << tc.selection().toPlainText(); } + file.close(); + } file.open(QIODevice::ReadOnly); QByteArray ba = file.readAll(); showBlackMessage(tr("\"%1\" %2 %3L, %4C written") @@ -1488,8 +1500,10 @@ void FakeVimHandler::Private::setWidget(QWidget *ob) m_textedit = qobject_cast<QTextEdit *>(ob); m_plaintextedit = qobject_cast<QPlainTextEdit *>(ob); TextEditor::BaseTextEditor* editor = qobject_cast<TextEditor::BaseTextEditor*>(ob); - if (editor) - m_currentFileName = editor->file()->fileName(); + if (editor) { + m_currentFile = editor->file(); + m_currentFileName = m_currentFile->fileName(); + } } /////////////////////////////////////////////////////////////////////// -- GitLab