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:
authorNathan Craddock <nzcraddock@gmail.com>2020-08-27 18:41:05 +0300
committerNathan Craddock <nzcraddock@gmail.com>2020-08-28 03:25:51 +0300
commite726ed3c6b6600b953c72604b8a0b891f27fd7f9 (patch)
tree36212476d90a7c15d3f50d14f659fd96ee8442a5 /source/blender/editors/space_outliner/outliner_edit.c
parent2a0e996d772b780b67c3b3d72586f9ddae754f34 (diff)
Fix: Outliner walk navigation in Data API mode
Because the subtrees in Data API mode are empty for performance reasons, it was impossible to move through the tree with walk navigation. This adds an exception to allow walk navigation to expand subtrees in that mode.
Diffstat (limited to 'source/blender/editors/space_outliner/outliner_edit.c')
-rw-r--r--source/blender/editors/space_outliner/outliner_edit.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/source/blender/editors/space_outliner/outliner_edit.c b/source/blender/editors/space_outliner/outliner_edit.c
index 8567dd4da13..498d26add48 100644
--- a/source/blender/editors/space_outliner/outliner_edit.c
+++ b/source/blender/editors/space_outliner/outliner_edit.c
@@ -150,10 +150,18 @@ void OUTLINER_OT_highlight_update(wmOperatorType *ot)
* \{ */
/* Open or close a tree element, optionally toggling all children recursively */
-void outliner_item_openclose(TreeElement *te, bool open, bool toggle_all)
-{
- TreeStoreElem *tselem = TREESTORE(te);
+void outliner_item_openclose(SpaceOutliner *space_outliner,
+ TreeElement *te,
+ bool open,
+ bool toggle_all)
+{
+ /* Prevent opening leaf elements in the tree unless in the Data API display mode because in that
+ * mode subtrees are empty unless expanded. */
+ if (space_outliner->outlinevis != SO_DATA_API && BLI_listbase_is_empty(&te->subtree)) {
+ return;
+ }
+ TreeStoreElem *tselem = TREESTORE(te);
if (open) {
tselem->flag &= ~TSE_CLOSED;
}
@@ -191,7 +199,7 @@ static int outliner_item_openclose_modal(bContext *C, wmOperator *op, const wmEv
/* Only toggle openclose on the same level as the first clicked element */
if (te->xs == data->x_location) {
- outliner_item_openclose(te, data->open, false);
+ outliner_item_openclose(space_outliner, te, data->open, false);
outliner_tag_redraw_avoid_rebuild_on_open_change(space_outliner, region);
}
@@ -232,7 +240,7 @@ static int outliner_item_openclose_invoke(bContext *C, wmOperator *op, const wmE
const bool open = (tselem->flag & TSE_CLOSED) ||
(toggle_all && (outliner_flag_is_any_test(&te->subtree, TSE_CLOSED, 1)));
- outliner_item_openclose(te, open, toggle_all);
+ outliner_item_openclose(space_outliner, te, open, toggle_all);
outliner_tag_redraw_avoid_rebuild_on_open_change(space_outliner, region);
/* Only toggle once for single click toggling */