diff --git a/Userland/Libraries/LibGUI/TextEditor.cpp b/Userland/Libraries/LibGUI/TextEditor.cpp index 2783b59dc7..4b48ea4779 100644 --- a/Userland/Libraries/LibGUI/TextEditor.cpp +++ b/Userland/Libraries/LibGUI/TextEditor.cpp @@ -2203,11 +2203,19 @@ void TextEditor::document_did_update_undo_stack() on_modified_change(document().is_modified()); } -void TextEditor::document_did_set_text(AllowCallback allow_callback) +void TextEditor::populate_line_data() { m_line_visual_data.clear(); - for (size_t i = 0; i < m_document->line_count(); ++i) - m_line_visual_data.append(make()); + m_line_visual_data.ensure_capacity(m_document->line_count()); + + for (size_t i = 0; i < m_document->line_count(); ++i) { + m_line_visual_data.unchecked_append(make()); + } +} + +void TextEditor::document_did_set_text(AllowCallback allow_callback) +{ + populate_line_data(); document_did_change(allow_callback); } @@ -2233,10 +2241,7 @@ void TextEditor::set_document(TextDocument& document) if (m_document) m_document->unregister_client(*this); m_document = document; - m_line_visual_data.clear(); - for (size_t i = 0; i < m_document->line_count(); ++i) { - m_line_visual_data.append(make()); - } + populate_line_data(); set_cursor(0, 0); if (has_selection()) m_selection.clear(); diff --git a/Userland/Libraries/LibGUI/TextEditor.h b/Userland/Libraries/LibGUI/TextEditor.h index 11d4f72e12..db26a8f931 100644 --- a/Userland/Libraries/LibGUI/TextEditor.h +++ b/Userland/Libraries/LibGUI/TextEditor.h @@ -363,6 +363,7 @@ private: size_t visual_line_containing(size_t line_index, size_t column) const; void recompute_visual_lines(size_t line_index, Vector::Iterator& folded_region_iterator); + void populate_line_data(); template inline void execute(Args&&... args)