Bladeren bron

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.
Andreas Kling 6 jaren geleden
bovenliggende
commit
26110f7753
1 gewijzigde bestanden met toevoegingen van 4 en 1 verwijderingen
  1. 4 1
      LibGUI/GTextEditor.cpp

+ 4 - 1
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();