diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-05-23 15:37:43 +0300 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2018-05-23 15:43:24 +0300 |
commit | 1c572b741262504882f0112d237ef9eedb1a019d (patch) | |
tree | 63c90b04636df342d989bb245c723585ad90176a /source/blender/editors/space_outliner | |
parent | c44ccbc518a5bb88321f770a0ff8d2b4c597e6cc (diff) |
Fix T55161: outliner Blender File with filter showing irrelevant libraries.
Diffstat (limited to 'source/blender/editors/space_outliner')
-rw-r--r-- | source/blender/editors/space_outliner/outliner_draw.c | 1 | ||||
-rw-r--r-- | source/blender/editors/space_outliner/outliner_tree.c | 51 |
2 files changed, 32 insertions, 20 deletions
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index 827034cd13d..7d200c904cd 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -320,7 +320,6 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) { bArmature *arm = (bArmature *)tselem->id; if (arm->edbo) { - ViewLayer *view_layer = CTX_data_view_layer(C); EditBone *ebone = te->directdata; char newname[sizeof(ebone->name)]; diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c index 393b40d1097..f42addb30bf 100644 --- a/source/blender/editors/space_outliner/outliner_tree.c +++ b/source/blender/editors/space_outliner/outliner_tree.c @@ -1286,9 +1286,9 @@ static bool outliner_library_id_show(Library *lib, ID *id, short filter_id_type) return true; } -static void outliner_add_library_contents(Main *mainvar, SpaceOops *soops, TreeElement *te, Library *lib) +static TreeElement *outliner_add_library_contents(Main *mainvar, SpaceOops *soops, ListBase *lb, Library *lib) { - TreeElement *ten; + TreeElement *ten, *tenlib = NULL; ListBase *lbarray[MAX_LIBARRAY]; int a, tot; short filter_id_type = (soops->filter & SO_FILTER_ID_TYPE) ? soops->filter_id_type : 0; @@ -1311,11 +1311,23 @@ static void outliner_add_library_contents(Main *mainvar, SpaceOops *soops, TreeE break; if (id) { + if (!tenlib) { + /* Create library tree element on demand, depending if there are any datablocks. */ + if (lib) { + tenlib = outliner_add_element(soops, lb, lib, NULL, 0, 0); + } + else { + tenlib = outliner_add_element(soops, lb, mainvar, NULL, TSE_ID_BASE, 0); + tenlib->name = IFACE_("Current File"); + } + } + + /* Create datablock list parent element on demand. */ if (filter_id_type) { - ten = te; + ten = tenlib; } else { - ten = outliner_add_element(soops, &te->subtree, lbarray[a], NULL, TSE_ID_BASE, 0); + ten = outliner_add_element(soops, &tenlib->subtree, lbarray[a], NULL, TSE_ID_BASE, 0); ten->directdata = lbarray[a]; ten->name = outliner_idcode_to_plural(GS(id->name)); } @@ -1328,6 +1340,8 @@ static void outliner_add_library_contents(Main *mainvar, SpaceOops *soops, TreeE } } } + + return tenlib; } static void outliner_add_orphaned_datablocks(Main *mainvar, SpaceOops *soops) @@ -2125,20 +2139,18 @@ void outliner_build_tree(Main *mainvar, Scene *scene, ViewLayer *view_layer, Spa Library *lib; /* current file first - mainvar provides tselem with unique pointer - not used */ - ten = outliner_add_element(soops, &soops->tree, mainvar, NULL, TSE_ID_BASE, 0); - ten->name = IFACE_("Current File"); - - tselem = TREESTORE(ten); - if (!tselem->used) - tselem->flag &= ~TSE_CLOSED; - - outliner_add_library_contents(mainvar, soops, ten, NULL); + ten = outliner_add_library_contents(mainvar, soops, &soops->tree, NULL); + if (ten) { + tselem = TREESTORE(ten); + if (!tselem->used) + tselem->flag &= ~TSE_CLOSED; + } for (lib = mainvar->library.first; lib; lib = lib->id.next) { - ten = outliner_add_element(soops, &soops->tree, lib, NULL, 0, 0); - lib->id.newid = (ID *)ten; - - outliner_add_library_contents(mainvar, soops, ten, lib); + ten = outliner_add_library_contents(mainvar, soops, &soops->tree, lib); + if (ten) { + lib->id.newid = (ID *)ten; + } } /* make hierarchy */ @@ -2158,9 +2170,10 @@ void outliner_build_tree(Main *mainvar, Scene *scene, ViewLayer *view_layer, Spa } else { /* Else, make a new copy of the libtree for our parent. */ - TreeElement *dupten = outliner_add_element(soops, &par->subtree, lib, NULL, 0, 0); - outliner_add_library_contents(mainvar, soops, dupten, lib); - dupten->parent = par; + TreeElement *dupten = outliner_add_library_contents(mainvar, soops, &par->subtree, lib); + if (dupten) { + dupten->parent = par; + } } } ten = nten; |