diff --git a/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp b/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp index ed2d9caa78..e94f61fae3 100644 --- a/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp +++ b/extras/Introjucer/Source/Code Editor/jucer_SourceCodeEditor.cpp @@ -38,6 +38,7 @@ CodeDocument& SourceCodeDocument::getCodeDocument() { codeDoc = new CodeDocument(); reloadInternal(); + codeDoc->clearUndoHistory(); } return *codeDoc; @@ -61,11 +62,8 @@ void SourceCodeDocument::reloadInternal() { jassert (codeDoc != nullptr); modDetector.updateHash(); - - ScopedPointer in (modDetector.getFile().createInputStream()); - - if (in != nullptr) - codeDoc->loadFromStream (*in); + codeDoc->replaceAllContent (modDetector.getFile().loadFileAsString()); + codeDoc->setSavePoint(); } bool SourceCodeDocument::save() diff --git a/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp b/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp index 8ccd9065c5..2c7e73ce38 100644 --- a/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp +++ b/modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp @@ -569,8 +569,17 @@ void CodeDocument::insertText (int insertIndex, const String& text) void CodeDocument::replaceAllContent (const String& newContent) { - remove (0, getNumCharacters(), true); - insert (newContent, 0, true); + TextDiff diff (getAllContent(), newContent); + + for (int i = 0; i < diff.changes.size(); ++i) + { + const TextDiff::Change& c = diff.changes.getReference(i); + + if (c.isDeletion()) + remove (c.start, c.start + c.length, true); + else + insert (c.insertedText, c.start, true); + } } bool CodeDocument::loadFromStream (InputStream& stream)