From b4da228ea5c8625e0c39d10201f2322be76684a8 Mon Sep 17 00:00:00 2001 From: Max Trussell Date: Sun, 13 Jun 2021 11:46:08 -0700 Subject: [PATCH] LibGUI: Make "Return" after tab return to original column in TableView --- .../Libraries/LibGUI/AbstractTableView.cpp | 36 ++++++++++++++++--- Userland/Libraries/LibGUI/AbstractTableView.h | 2 ++ 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/Userland/Libraries/LibGUI/AbstractTableView.cpp b/Userland/Libraries/LibGUI/AbstractTableView.cpp index 91454bad5c..f1fe3c25ce 100644 --- a/Userland/Libraries/LibGUI/AbstractTableView.cpp +++ b/Userland/Libraries/LibGUI/AbstractTableView.cpp @@ -194,6 +194,7 @@ void AbstractTableView::set_column_header_alignment(int column, Gfx::TextAlignme void AbstractTableView::mousedown_event(MouseEvent& event) { + m_tab_moves = 0; if (!model()) return AbstractView::mousedown_event(event); @@ -403,14 +404,21 @@ void AbstractTableView::layout_headers() void AbstractTableView::keydown_event(KeyEvent& event) { 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) { move_cursor(CursorMovement::Right, SelectionUpdate::Set); 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; } } @@ -418,4 +426,22 @@ void AbstractTableView::keydown_event(KeyEvent& 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; + } +} } diff --git a/Userland/Libraries/LibGUI/AbstractTableView.h b/Userland/Libraries/LibGUI/AbstractTableView.h index 3ff648aa0d..1644ee01cc 100644 --- a/Userland/Libraries/LibGUI/AbstractTableView.h +++ b/Userland/Libraries/LibGUI/AbstractTableView.h @@ -98,6 +98,7 @@ protected: private: void layout_headers(); + bool is_navigation(GUI::KeyEvent&); RefPtr m_column_header; RefPtr m_row_header; @@ -110,6 +111,7 @@ private: int m_vertical_padding { 8 }; int m_horizontal_padding { font().glyph_height() / 2 }; + int m_tab_moves { 0 }; }; }