From 22d1961c9a9f1265c123262c1f81aec0f7836256 Mon Sep 17 00:00:00 2001 From: Shannon Booth Date: Sat, 18 Jan 2020 12:11:09 +1300 Subject: [PATCH] LibGUI: Handle "Return" key events I kept on trying to use the enter key to navigate a tree view, when only left and right arrow keys are used for this. Now also suport the return key, is used as a toggle to open a tree. --- Libraries/LibGUI/GTreeView.cpp | 34 ++++++++++++++++++++++------------ 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/Libraries/LibGUI/GTreeView.cpp b/Libraries/LibGUI/GTreeView.cpp index f358916683..3e6a2a9362 100644 --- a/Libraries/LibGUI/GTreeView.cpp +++ b/Libraries/LibGUI/GTreeView.cpp @@ -376,30 +376,40 @@ void GTreeView::keydown_event(GKeyEvent& event) selection().set(found_index); return; } + + auto open_tree_node = [&](bool open, MetadataForIndex& metadata) { + metadata.open = open; + update_column_sizes(); + update_content_size(); + update(); + }; + if (event.key() == KeyCode::Key_Left) { if (cursor_index.is_valid() && model()->row_count(cursor_index)) { auto& metadata = ensure_metadata_for_index(cursor_index); - if (metadata.open) { - metadata.open = false; - update_column_sizes(); - update_content_size(); - update(); - } + if (metadata.open) + open_tree_node(false, metadata); return; } } + if (event.key() == KeyCode::Key_Right) { if (cursor_index.is_valid() && model()->row_count(cursor_index)) { auto& metadata = ensure_metadata_for_index(cursor_index); - if (!metadata.open) { - metadata.open = true; - update_column_sizes(); - update_content_size(); - update(); - } + if (!metadata.open) + open_tree_node(true, metadata); return; } } + + if (event.key() == KeyCode::Key_Return) { + if (cursor_index.is_valid() && model()->row_count(cursor_index)) { + auto& metadata = ensure_metadata_for_index(cursor_index); + open_tree_node(!metadata.open, metadata); + return; + } + } + } int GTreeView::item_count() const