summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--desktop/treeview.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/desktop/treeview.c b/desktop/treeview.c
index 8dbfce5d1..88f9cc0d0 100644
--- a/desktop/treeview.c
+++ b/desktop/treeview.c
@@ -1607,14 +1607,24 @@ static bool treeview_keyboard_navigation(treeview *tree, uint32_t key,
break;
case KEY_RIGHT:
- if (ns.curr != NULL &&
- ns.curr->children != NULL) {
- /* Step to first child */
+ if (ns.curr != NULL) {
if (!(ns.curr->flags & TREE_NODE_EXPANDED)) {
- /* Need to expand node */
+ /* Toggle node to expanded */
treeview_node_expand(tree, ns.curr);
+ if (ns.curr->children != NULL) {
+ /* Step to first child */
+ ns.curr->children->flags |=
+ TREE_NODE_SELECTED;
+ } else {
+ /* Retain current node selection */
+ ns.curr->flags |= TREE_NODE_SELECTED;
+ }
+ } else {
+ /* Toggle node to contracted */
+ treeview_node_contract(tree, ns.curr);
+ /* Retain current node selection */
+ ns.curr->flags |= TREE_NODE_SELECTED;
}
- ns.curr->children->flags |= TREE_NODE_SELECTED;
} else if (ns.curr != NULL) {
/* Retain current node selection */