1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 14:07:46 +00:00

TextEditor: The delete key should work even when there's no selection.

This commit is contained in:
Andreas Kling 2019-03-20 23:11:00 +01:00
parent be4533717a
commit ed2303e2d8
3 changed files with 30 additions and 24 deletions

View file

@ -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&) { 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<GMenuBar>(); auto menubar = make<GMenuBar>();

View file

@ -382,6 +382,18 @@ void GTextEditor::keydown_event(GKeyEvent& event)
} }
if (event.key() == KeyCode::Key_Delete) { if (event.key() == KeyCode::Key_Delete) {
do_delete();
return;
}
if (!event.ctrl() && !event.alt() && !event.text().is_empty())
insert_at_cursor_or_replace_selection(event.text());
return GWidget::keydown_event(event);
}
void GTextEditor::do_delete()
{
if (has_selection()) { if (has_selection()) {
delete_selection(); delete_selection();
return; return;
@ -404,13 +416,6 @@ void GTextEditor::keydown_event(GKeyEvent& event)
set_cursor(m_cursor.line(), previous_length); set_cursor(m_cursor.line(), previous_length);
return; return;
} }
return;
}
if (!event.ctrl() && !event.alt() && !event.text().is_empty())
insert_at_cursor_or_replace_selection(event.text());
return GWidget::keydown_event(event);
} }
void GTextEditor::insert_at_cursor(const String& text) void GTextEditor::insert_at_cursor(const String& text)

View file

@ -93,7 +93,7 @@ public:
void cut(); void cut();
void copy(); void copy();
void paste(); void paste();
void delete_selection(); void do_delete();
Function<void(GTextEditor&)> on_return_pressed; Function<void(GTextEditor&)> on_return_pressed;
Function<void(GTextEditor&)> on_escape_pressed; Function<void(GTextEditor&)> on_escape_pressed;
@ -150,6 +150,7 @@ private:
Rect ruler_content_rect(int line) const; Rect ruler_content_rect(int line) const;
void toggle_selection_if_needed_for_event(const GKeyEvent&); void toggle_selection_if_needed_for_event(const GKeyEvent&);
void insert_at_cursor_or_replace_selection(const String&); void insert_at_cursor_or_replace_selection(const String&);
void delete_selection();
Type m_type { MultiLine }; Type m_type { MultiLine };