diff options
author | Shannon Booth <shannon.ml.booth@gmail.com> | 2020-01-18 12:11:09 +1300 |
---|---|---|
committer | Andreas Kling <awesomekling@gmail.com> | 2020-01-18 00:27:39 +0100 |
commit | 22d1961c9a9f1265c123262c1f81aec0f7836256 (patch) | |
tree | 51f9d8693aa2a82ec762745f202df0333d13432c | |
parent | 6697513d30c6ed31fa865883d23870973c7a72da (diff) | |
download | serenity-22d1961c9a9f1265c123262c1f81aec0f7836256.zip |
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.
-rw-r--r-- | Libraries/LibGUI/GTreeView.cpp | 34 |
1 files 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 |