diff --git a/Applications/TextEditor/main.cpp b/Applications/TextEditor/main.cpp index 71ae2ad5d1a..f07ab128aa8 100644 --- a/Applications/TextEditor/main.cpp +++ b/Applications/TextEditor/main.cpp @@ -78,7 +78,7 @@ int main(int argc, char** argv) }); auto delete_action = GAction::create("Delete", { 0, Key_Delete }, GraphicsBitmap::load_from_file(GraphicsBitmap::Format::RGBA32, "/res/icons/16x16/delete.rgb", { 16, 16 }), [&] (const GAction&) { - text_editor->delete_selection(); + text_editor->do_delete(); }); auto menubar = make(); diff --git a/LibGUI/GTextEditor.cpp b/LibGUI/GTextEditor.cpp index 06ab76f1a23..e6bb0603189 100644 --- a/LibGUI/GTextEditor.cpp +++ b/LibGUI/GTextEditor.cpp @@ -382,28 +382,7 @@ void GTextEditor::keydown_event(GKeyEvent& event) } if (event.key() == KeyCode::Key_Delete) { - if (has_selection()) { - delete_selection(); - return; - } - if (m_cursor.column() < current_line().length()) { - // Delete within line - current_line().remove(m_cursor.column()); - update_content_size(); - update_cursor(); - return; - } - if (m_cursor.column() == current_line().length() && m_cursor.line() != line_count() - 1) { - // Delete at end of line; merge with next line - auto& next_line = *m_lines[m_cursor.line() + 1]; - int previous_length = current_line().length(); - current_line().append(next_line.characters(), next_line.length()); - m_lines.remove(m_cursor.line() + 1); - update_content_size(); - update(); - set_cursor(m_cursor.line(), previous_length); - return; - } + do_delete(); return; } @@ -413,6 +392,32 @@ void GTextEditor::keydown_event(GKeyEvent& event) return GWidget::keydown_event(event); } +void GTextEditor::do_delete() +{ + if (has_selection()) { + delete_selection(); + return; + } + if (m_cursor.column() < current_line().length()) { + // Delete within line + current_line().remove(m_cursor.column()); + update_content_size(); + update_cursor(); + return; + } + if (m_cursor.column() == current_line().length() && m_cursor.line() != line_count() - 1) { + // Delete at end of line; merge with next line + auto& next_line = *m_lines[m_cursor.line() + 1]; + int previous_length = current_line().length(); + current_line().append(next_line.characters(), next_line.length()); + m_lines.remove(m_cursor.line() + 1); + update_content_size(); + update(); + set_cursor(m_cursor.line(), previous_length); + return; + } +} + void GTextEditor::insert_at_cursor(const String& text) { // FIXME: This should obviously not be implemented this way. diff --git a/LibGUI/GTextEditor.h b/LibGUI/GTextEditor.h index ad662133ad2..9e5b88cf74e 100644 --- a/LibGUI/GTextEditor.h +++ b/LibGUI/GTextEditor.h @@ -93,7 +93,7 @@ public: void cut(); void copy(); void paste(); - void delete_selection(); + void do_delete(); Function on_return_pressed; Function on_escape_pressed; @@ -150,6 +150,7 @@ private: Rect ruler_content_rect(int line) const; void toggle_selection_if_needed_for_event(const GKeyEvent&); void insert_at_cursor_or_replace_selection(const String&); + void delete_selection(); Type m_type { MultiLine };