Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Eisel <julian@blender.org>2021-10-20 12:49:33 +0300
committerJulian Eisel <julian@blender.org>2021-10-20 13:31:54 +0300
commit381965eb568932b311fa23b7d8b70a7d6c1070dc (patch)
tree313cd6560bc4a2ee602ffe341bb59fa7174c0aaf /source/blender/editors
parent16eafdadf6040fb84bacf657ac0bf16a78e1057e (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.hh2
-rw-r--r--source/blender/editors/interface/tree_view.cc17
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. */