From 26110f7753263e37f88c26ceeafda6e6b37b2a4a Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Mon, 6 May 2019 22:04:53 +0200 Subject: [PATCH] GTextEditor: set_cursor() should gracefully handle old cursor being invalid. Since set_cursor() may be called after arbitrary document changes, it can't rely on the old cursor being valid. To make things simple, if the old cursor is on a line no longer in the document, just repaint the whole editor. --- LibGUI/GTextEditor.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/LibGUI/GTextEditor.cpp b/LibGUI/GTextEditor.cpp index 3f8776c60e..487a55ba9c 100644 --- a/LibGUI/GTextEditor.cpp +++ b/LibGUI/GTextEditor.cpp @@ -688,7 +688,10 @@ void GTextEditor::set_cursor(const GTextPosition& position) ASSERT(position.line() < m_lines.size()); ASSERT(position.column() <= m_lines[position.line()]->length()); if (m_cursor != position) { - auto old_cursor_line_rect = line_widget_rect(m_cursor.line()); + // NOTE: If the old cursor is no longer valid, repaint everything just in case. + auto old_cursor_line_rect = m_cursor.line() < m_lines.size() + ? line_widget_rect(m_cursor.line()) + : rect(); m_cursor = position; m_cursor_state = true; scroll_cursor_into_view();