1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 11:38:11 +00:00

TableView: Do not select input on keydown

In the Spreadsheet app, selecting a cell and typing something (like
"1") would create an empty editing delegate, set "1" as its value and
immediately select the entire contents of the text box. If your goal
was to type "123", that "1" was selected and will be replaced by "23".

This changes the behavior of TableView to not select the editing
delegate's contents if its creation was a result of a keydown event.
This commit is contained in:
Jelle Raaijmakers 2021-07-11 21:46:34 +02:00 committed by Andreas Kling
parent bc5d50e78b
commit 0f35912bd7
4 changed files with 23 additions and 13 deletions

View file

@ -173,14 +173,18 @@ void TableView::keydown_event(KeyEvent& event)
if (event.is_accepted())
return;
auto is_delete = event.key() == Key_Delete || event.key() == Key_Backspace;
if (is_editable() && edit_triggers() & EditTrigger::AnyKeyPressed && (event.code_point() != 0 || is_delete)) {
auto is_delete = event.key() == Key_Delete;
auto is_backspace = event.key() == Key_Backspace;
auto is_clear = is_delete || is_backspace;
if (is_editable() && edit_triggers() & EditTrigger::AnyKeyPressed && (event.code_point() != 0 || is_clear)) {
begin_editing(cursor_index());
if (m_editing_delegate) {
if (is_delete)
m_editing_delegate->set_value(event.key() == Key_Delete ? String {} : String::empty());
m_editing_delegate->set_value(String {});
else if (is_backspace)
m_editing_delegate->set_value(String::empty());
else
m_editing_delegate->set_value(event.text());
m_editing_delegate->set_value(event.text(), ModelEditingDelegate::SelectionBehavior::DoNotSelect);
}
}
}