1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 17:55:08 +00:00

LibGUI: Make "Return" after tab return to original column in TableView

This commit is contained in:
Max Trussell 2021-06-13 11:46:08 -07:00 committed by GitHub
parent 364d728e66
commit b4da228ea5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 5 deletions

View file

@ -194,6 +194,7 @@ void AbstractTableView::set_column_header_alignment(int column, Gfx::TextAlignme
void AbstractTableView::mousedown_event(MouseEvent& event) void AbstractTableView::mousedown_event(MouseEvent& event)
{ {
m_tab_moves = 0;
if (!model()) if (!model())
return AbstractView::mousedown_event(event); return AbstractView::mousedown_event(event);
@ -403,14 +404,21 @@ void AbstractTableView::layout_headers()
void AbstractTableView::keydown_event(KeyEvent& event) void AbstractTableView::keydown_event(KeyEvent& event)
{ {
if (is_tab_key_navigation_enabled()) { if (is_tab_key_navigation_enabled()) {
if (event.modifiers() == KeyModifier::Mod_Shift && event.key() == KeyCode::Key_Tab) {
move_cursor(CursorMovement::Left, SelectionUpdate::Set);
event.accept();
return;
}
if (!event.modifiers() && event.key() == KeyCode::Key_Tab) { if (!event.modifiers() && event.key() == KeyCode::Key_Tab) {
move_cursor(CursorMovement::Right, SelectionUpdate::Set); move_cursor(CursorMovement::Right, SelectionUpdate::Set);
event.accept(); event.accept();
++m_tab_moves;
return;
} else if (is_navigation(event)) {
if (event.key() == KeyCode::Key_Return) {
move_cursor_relative(0, -m_tab_moves, SelectionUpdate::Set);
}
m_tab_moves = 0;
}
if (event.modifiers() == KeyModifier::Mod_Shift && event.key() == KeyCode::Key_Tab) {
move_cursor(CursorMovement::Left, SelectionUpdate::Set);
event.accept();
return; return;
} }
} }
@ -418,4 +426,22 @@ void AbstractTableView::keydown_event(KeyEvent& event)
AbstractView::keydown_event(event); AbstractView::keydown_event(event);
} }
bool AbstractTableView::is_navigation(GUI::KeyEvent& event)
{
switch (event.key()) {
case KeyCode::Key_Tab:
case KeyCode::Key_Left:
case KeyCode::Key_Right:
case KeyCode::Key_Up:
case KeyCode::Key_Down:
case KeyCode::Key_Return:
case KeyCode::Key_Home:
case KeyCode::Key_End:
case KeyCode::Key_PageUp:
case KeyCode::Key_PageDown:
return true;
default:
return false;
}
}
} }

View file

@ -98,6 +98,7 @@ protected:
private: private:
void layout_headers(); void layout_headers();
bool is_navigation(GUI::KeyEvent&);
RefPtr<HeaderView> m_column_header; RefPtr<HeaderView> m_column_header;
RefPtr<HeaderView> m_row_header; RefPtr<HeaderView> m_row_header;
@ -110,6 +111,7 @@ private:
int m_vertical_padding { 8 }; int m_vertical_padding { 8 };
int m_horizontal_padding { font().glyph_height() / 2 }; int m_horizontal_padding { font().glyph_height() / 2 };
int m_tab_moves { 0 };
}; };
} }