diff options
author | Julian Eisel <julian@blender.org> | 2021-10-20 12:49:33 +0300 |
---|---|---|
committer | Julian Eisel <julian@blender.org> | 2021-10-20 13:31:54 +0300 |
commit | 381965eb568932b311fa23b7d8b70a7d6c1070dc (patch) | |
tree | 313cd6560bc4a2ee602ffe341bb59fa7174c0aaf /source/blender/editors | |
parent | 16eafdadf6040fb84bacf657ac0bf16a78e1057e (diff) |
UI: Activate parent when active child is collapsed
Previously, when an item was active and its parent (or grand parent, etc.) was
collapsed, the active item would simply not be visible anymore. It seemed like
there was no active item. So instead, change the just collapsed parent to be
the active item then, so the active item stays visible.
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/include/UI_tree_view.hh | 2 | ||||
-rw-r--r-- | source/blender/editors/interface/tree_view.cc | 17 |
2 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/editors/include/UI_tree_view.hh b/source/blender/editors/include/UI_tree_view.hh index ae85375ed2f..b1ec22c57a6 100644 --- a/source/blender/editors/include/UI_tree_view.hh +++ b/source/blender/editors/include/UI_tree_view.hh @@ -337,6 +337,8 @@ class AbstractTreeViewItem : public TreeViewItemContainer { void add_indent(uiLayout &row) const; void add_collapse_chevron(uiBlock &block) const; void add_rename_button(uiLayout &row); + + bool has_active_child() const; }; /** \} */ diff --git a/source/blender/editors/interface/tree_view.cc b/source/blender/editors/interface/tree_view.cc index 3f3a8c5bce5..cf3ddcc3fff 100644 --- a/source/blender/editors/interface/tree_view.cc +++ b/source/blender/editors/interface/tree_view.cc @@ -227,6 +227,11 @@ void AbstractTreeViewItem::collapse_chevron_click_fn(struct bContext *C, BLI_assert(hovered_item != nullptr); hovered_item->toggle_collapsed(); + /* When collapsing an item with an active child, make this collapsed item active instead so the + * active item stays visible. */ + if (hovered_item->has_active_child()) { + hovered_item->activate(); + } } bool AbstractTreeViewItem::is_collapse_chevron_but(const uiBut *but) @@ -327,6 +332,18 @@ void AbstractTreeViewItem::add_rename_button(uiLayout &row) UI_block_layout_set_current(block, &row); } +bool AbstractTreeViewItem::has_active_child() const +{ + bool found = false; + foreach_item_recursive([&found](const AbstractTreeViewItem &item) { + if (item.is_active()) { + found = true; + } + }); + + return found; +} + void AbstractTreeViewItem::on_activate() { /* Do nothing by default. */ |