diff --git a/Libraries/LibGUI/GTextEditor.cpp b/Libraries/LibGUI/GTextEditor.cpp index 34574d0707..e6bfd12ec6 100644 --- a/Libraries/LibGUI/GTextEditor.cpp +++ b/Libraries/LibGUI/GTextEditor.cpp @@ -848,11 +848,18 @@ void GTextEditor::set_cursor(int line, int column) set_cursor({ line, column }); } -void GTextEditor::set_cursor(const GTextPosition& position) +void GTextEditor::set_cursor(const GTextPosition& a_position) { ASSERT(!m_lines.is_empty()); - ASSERT(position.line() < m_lines.size()); - ASSERT(position.column() <= m_lines[position.line()].length()); + + GTextPosition position = a_position; + + if (position.line() >= m_lines.size()) + position.set_line(m_lines.size() - 1); + + if (position.column() > m_lines[position.line()].length()) + position.set_column(m_lines[position.line()].length()); + if (m_cursor != position) { // 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() diff --git a/Libraries/LibGUI/GTextEditor.h b/Libraries/LibGUI/GTextEditor.h index 3caa350924..756f0fedb2 100644 --- a/Libraries/LibGUI/GTextEditor.h +++ b/Libraries/LibGUI/GTextEditor.h @@ -164,6 +164,9 @@ public: void add_custom_context_menu_action(GAction&); + void set_cursor(int line, int column); + void set_cursor(const GTextPosition&); + protected: GTextEditor(Type, GWidget* parent); @@ -229,8 +232,6 @@ private: Rect cursor_content_rect() const; Rect content_rect_for_position(const GTextPosition&) const; void update_cursor(); - void set_cursor(int line, int column); - void set_cursor(const GTextPosition&); Line& current_line() { return m_lines[m_cursor.line()]; } const Line& current_line() const { return m_lines[m_cursor.line()]; } GTextPosition text_position_at(const Point&) const;