[Bf-blender-cvs] [176698b2eb7] blender2.8: Fix unwanted expanding/collapsing of collections using drag & drop

Julian Eisel noreply at git.blender.org
Fri Mar 10 23:19:52 CET 2017


Commit: 176698b2eb7fed2006e02a9b1d8a60a181d94b0b
Author: Julian Eisel
Date:   Fri Mar 10 23:11:58 2017 +0100
Branches: blender2.8
https://developer.blender.org/rB176698b2eb7fed2006e02a9b1d8a60a181d94b0b

Fix unwanted expanding/collapsing of collections using drag & drop

Turned out to be a quite easy fix. I thought the issue was that we
couldn't identify the TreeStoreElem when (re)creating its TreeElement item
correctly, because for non-ID elements that would be index dependent (=
bad for drag & drop). Turns out that we're actually allowed to store
custom data within the TreeStoreElem, the thing is just that it gets
stored as ID pointer (highly ugly and highly misleading).
Anyway, seems to work now so I won't complain too much :)

===================================================================

M	source/blender/editors/space_outliner/outliner_tree.c

===================================================================

diff --git a/source/blender/editors/space_outliner/outliner_tree.c b/source/blender/editors/space_outliner/outliner_tree.c
index 49a3759fcb0..81d85140a75 100644
--- a/source/blender/editors/space_outliner/outliner_tree.c
+++ b/source/blender/editors/space_outliner/outliner_tree.c
@@ -1357,6 +1357,30 @@ static bool outliner_layer_collections_reorder_poll(
 	return ELEM(tselem_handle->type, TSE_LAYER_COLLECTION);
 }
 
+static void outliner_add_layer_collections_recursive(
+        SpaceOops *soops, ListBase *tree, ListBase *layer_collections, TreeElement *parent_ten)
+{
+	for (LayerCollection *collection = layer_collections->first; collection; collection = collection->next) {
+		TreeElement *ten = outliner_add_element(soops, tree, collection, parent_ten, TSE_LAYER_COLLECTION, 0);
+
+		ten->name = collection->scene_collection->name;
+		ten->directdata = collection;
+		ten->reinsert = outliner_layer_collections_reorder;
+		ten->reinsert_poll = outliner_layer_collections_reorder_poll;
+
+		for (LinkData *link = collection->object_bases.first; link; link = link->next) {
+			outliner_add_element(soops, &ten->subtree, ((Base *)link->data)->object, ten, 0, 0);
+		}
+		outliner_make_hierarchy(&ten->subtree);
+
+		outliner_add_layer_collections_recursive(soops, &ten->subtree, &collection->layer_collections, ten);
+	}
+}
+static void outliner_add_collections_act_layer(SpaceOops *soops, SceneLayer *layer)
+{
+	outliner_add_layer_collections_recursive(soops, &soops->tree, &layer->layer_collections, NULL);
+}
+
 static void outliner_scene_collections_reorder(
         const Scene *scene, TreeElement *insert_element, TreeElement *insert_handle, TreeElementInsertType action)
 {
@@ -1404,34 +1428,6 @@ static bool outliner_scene_collections_reorder_poll(
 	return true;
 }
 
-static void outliner_add_layer_collections_recursive(
-        SpaceOops *soops, ListBase *tree, Scene *scene, ListBase *layer_collections, TreeElement *parent_ten,
-        int *io_collection_counter)
-{
-	for (LayerCollection *collection = layer_collections->first; collection; collection = collection->next) {
-		TreeElement *ten = outliner_add_element(soops, tree, scene, parent_ten, TSE_LAYER_COLLECTION,
-		                                        (*io_collection_counter)++);
-
-		ten->name = collection->scene_collection->name;
-		ten->directdata = collection;
-		ten->reinsert = outliner_layer_collections_reorder;
-		ten->reinsert_poll = outliner_layer_collections_reorder_poll;
-
-		for (LinkData *link = collection->object_bases.first; link; link = link->next) {
-			outliner_add_element(soops, &ten->subtree, ((Base *)link->data)->object, ten, 0, 0);
-		}
-		outliner_make_hierarchy(&ten->subtree);
-
-		outliner_add_layer_collections_recursive(soops, &ten->subtree, scene, &collection->layer_collections, ten,
-		                                         io_collection_counter);
-	}
-}
-static void outliner_add_collections_act_layer(SpaceOops *soops, SceneLayer *layer, Scene *scene)
-{
-	int collection_counter = 0;
-	outliner_add_layer_collections_recursive(soops, &soops->tree, scene, &layer->layer_collections, NULL, &collection_counter);
-}
-
 static void outliner_add_scene_collection_init(TreeElement *te, SceneCollection *collection)
 {
 	te->name = collection->name;
@@ -1440,13 +1436,11 @@ static void outliner_add_scene_collection_init(TreeElement *te, SceneCollection
 	te->reinsert_poll = outliner_scene_collections_reorder_poll;
 }
 
-static void outliner_add_scene_collections_recursive(SpaceOops *soops, ListBase *tree, Scene *scene,
-                                                     ListBase *scene_collections, TreeElement *parent_ten,
-                                                     int *io_collection_counter)
+static void outliner_add_scene_collections_recursive(
+        SpaceOops *soops, ListBase *tree, ListBase *scene_collections, TreeElement *parent_ten)
 {
 	for (SceneCollection *collection = scene_collections->first; collection; collection = collection->next) {
-		TreeElement *ten = outliner_add_element(soops, tree, scene, parent_ten, TSE_SCENE_COLLECTION,
-		                                        (*io_collection_counter)++);
+		TreeElement *ten = outliner_add_element(soops, tree, collection, parent_ten, TSE_SCENE_COLLECTION, 0);
 
 		outliner_add_scene_collection_init(ten, collection);
 		for (LinkData *link = collection->objects.first; link; link = link->next) {
@@ -1454,20 +1448,16 @@ static void outliner_add_scene_collections_recursive(SpaceOops *soops, ListBase
 		}
 		outliner_make_hierarchy(&ten->subtree);
 
-		outliner_add_scene_collections_recursive(soops, &ten->subtree, scene, &collection->scene_collections, ten,
-		                                         io_collection_counter);
+		outliner_add_scene_collections_recursive(soops, &ten->subtree, &collection->scene_collections, ten);
 	}
 }
 static void outliner_add_collections_master(SpaceOops *soops, Scene *scene)
 {
 	SceneCollection *master = BKE_collection_master(scene);
-	int collection_counter = 0;
-	TreeElement *ten = outliner_add_element(soops, &soops->tree, scene, NULL, TSE_SCENE_COLLECTION,
-	                                        collection_counter++);
+	TreeElement *ten = outliner_add_element(soops, &soops->tree, master, NULL, TSE_SCENE_COLLECTION, 0);
 
 	outliner_add_scene_collection_init(ten, master);
-	outliner_add_scene_collections_recursive(soops, &ten->subtree, scene, &master->scene_collections, ten,
-	                                         &collection_counter);
+	outliner_add_scene_collections_recursive(soops, &ten->subtree, &master->scene_collections, ten);
 }
 
 /* ======================================================= */
@@ -1924,7 +1914,7 @@ void outliner_build_tree(Main *mainvar, Scene *scene, SceneLayer *sl, SpaceOops
 		outliner_add_orphaned_datablocks(mainvar, soops);
 	}
 	else if (soops->outlinevis == SO_ACT_LAYER) {
-		outliner_add_collections_act_layer(soops, BKE_scene_layer_context_active(scene), scene);
+		outliner_add_collections_act_layer(soops, BKE_scene_layer_context_active(scene));
 	}
 	else if (soops->outlinevis == SO_COLLECTIONS) {
 		outliner_add_collections_master(soops, scene);




More information about the Bf-blender-cvs mailing list