diff --git a/Libraries/LibGUI/TextEditor.cpp b/Libraries/LibGUI/TextEditor.cpp index ef4f4877143..1257a942d36 100644 --- a/Libraries/LibGUI/TextEditor.cpp +++ b/Libraries/LibGUI/TextEditor.cpp @@ -1075,7 +1075,7 @@ void TextEditor::set_cursor(const TextPosition& a_position) if (position.column() > lines()[position.line()].length()) position.set_column(lines()[position.line()].length()); - if (m_cursor != position) { + if (m_cursor != position && is_visual_data_up_to_date()) { // NOTE: If the old cursor is no longer valid, repaint everything just in case. auto old_cursor_line_rect = m_cursor.line() < line_count() ? line_widget_rect(m_cursor.line()) @@ -1085,6 +1085,9 @@ void TextEditor::set_cursor(const TextPosition& a_position) scroll_cursor_into_view(); update(old_cursor_line_rect); update_cursor(); + } else if (m_cursor != position) { + m_cursor = position; + m_cursor_state = true; } cursor_did_change(); if (on_cursor_change) @@ -1387,6 +1390,8 @@ void TextEditor::recompute_all_visual_lines() return; } + m_reflow_requested = false; + int y_offset = 0; for (size_t line_index = 0; line_index < line_count(); ++line_index) { recompute_visual_lines(line_index); diff --git a/Libraries/LibGUI/TextEditor.h b/Libraries/LibGUI/TextEditor.h index d8da3a7f59b..b2e9fe963bc 100644 --- a/Libraries/LibGUI/TextEditor.h +++ b/Libraries/LibGUI/TextEditor.h @@ -259,7 +259,9 @@ private: NonnullRefPtrVector m_custom_context_menu_actions; size_t m_reflow_deferred { 0 }; - size_t m_reflow_requested { 0 }; + bool m_reflow_requested { false }; + + bool is_visual_data_up_to_date() const { return !m_reflow_requested; } RefPtr m_document;