[Bf-blender-cvs] [ad1ff2b6018] soc-2019-outliner: Outliner: Refine synced selection

Nathan Craddock noreply at git.blender.org
Thu Jun 13 22:17:20 CEST 2019


Commit: ad1ff2b6018fe794613a1d1b27e97052de0d2952
Author: Nathan Craddock
Date:   Thu Jun 13 13:56:08 2019 -0600
Branches: soc-2019-outliner
https://developer.blender.org/rBad1ff2b6018fe794613a1d1b27e97052de0d2952

Outliner: Refine synced selection

Any selection event that uses ED_object_base_select will now
mark the outliners as being dirty. When an outliner draws and is
dirty with synced selection enabled, it will sync its selection
state with the view layer.

More work still needs to be done. This may not be the best way
to implement it (selections from scripts won't be tracked). Also,
selection from the outliner isn't perfect.

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

M	source/blender/editors/animation/anim_channels_edit.c
M	source/blender/editors/animation/anim_markers.c
M	source/blender/editors/armature/armature_relations.c
M	source/blender/editors/gpencil/gpencil_convert.c
M	source/blender/editors/include/ED_object.h
M	source/blender/editors/mesh/editmesh_tools.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/object/object_collection.c
M	source/blender/editors/object/object_constraint.c
M	source/blender/editors/object/object_edit.c
M	source/blender/editors/object/object_relations.c
M	source/blender/editors/object/object_select.c
M	source/blender/editors/space_nla/nla_channels.c
M	source/blender/editors/space_outliner/outliner_dragdrop.c
M	source/blender/editors/space_outliner/outliner_select.c
M	source/blender/editors/space_outliner/outliner_tools.c
M	source/blender/editors/space_view3d/view3d_select.c
M	source/blender/editors/space_view3d/view3d_view.c
M	source/blender/editors/transform/transform_conversions.c
M	source/blender/editors/undo/ed_undo.c
M	source/blender/makesdna/DNA_layer_types.h
M	source/blender/makesrna/intern/rna_layer.c
M	source/blender/makesrna/intern/rna_object_api.c
M	source/blender/windowmanager/intern/wm_event_system.c

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

diff --git a/source/blender/editors/animation/anim_channels_edit.c b/source/blender/editors/animation/anim_channels_edit.c
index 21b9c7252d2..3b8a171c385 100644
--- a/source/blender/editors/animation/anim_channels_edit.c
+++ b/source/blender/editors/animation/anim_channels_edit.c
@@ -2867,7 +2867,7 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
       if (base->flag & BASE_SELECTABLE) {
         if (selectmode == SELECT_INVERT) {
           /* swap select */
-          ED_object_base_select(base, BA_INVERT);
+          ED_object_base_select(view_layer, base, BA_INVERT);
 
           if (adt) {
             adt->flag ^= ADT_UI_SELECTED;
@@ -2879,14 +2879,14 @@ static int mouse_anim_channels(bContext *C, bAnimContext *ac, int channel_index,
           /* deselect all */
           /* TODO: should this deselect all other types of channels too? */
           for (b = view_layer->object_bases.first; b; b = b->next) {
-            ED_object_base_select(b, BA_DESELECT);
+            ED_object_base_select(view_layer, b, BA_DESELECT);
             if (b->object->adt) {
               b->object->adt->flag &= ~(ADT_UI_SELECTED | ADT_UI_ACTIVE);
             }
           }
 
           /* select object now */
-          ED_object_base_select(base, BA_SELECT);
+          ED_object_base_select(view_layer, base, BA_SELECT);
           if (adt) {
             adt->flag |= ADT_UI_SELECTED;
           }
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index dec34eb04ac..6d85630abca 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -1200,7 +1200,7 @@ static void select_marker_camera_switch(
         if (marker->frame == cfra) {
           base = BKE_view_layer_base_find(view_layer, marker->camera);
           if (base) {
-            ED_object_base_select(base, sel);
+            ED_object_base_select(view_layer, base, sel);
             if (sel) {
               ED_object_base_activate(C, base);
             }
diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c
index 2c61818d902..6ddf4a5c083 100644
--- a/source/blender/editors/armature/armature_relations.c
+++ b/source/blender/editors/armature/armature_relations.c
@@ -614,7 +614,7 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
       view_layer, CTX_wm_view3d(C), &bases_len);
 
   CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
-    ED_object_base_select(base, BA_DESELECT);
+    ED_object_base_select(view_layer, base, BA_DESELECT);
   }
   CTX_DATA_END;
 
@@ -635,7 +635,7 @@ static int separate_armature_exec(bContext *C, wmOperator *op)
      */
 
     /* 1) only edit-base selected */
-    ED_object_base_select(base_iter, BA_SELECT);
+    ED_object_base_select(view_layer, base_iter, BA_SELECT);
 
     /* 1) store starting settings and exit editmode */
     oldob = obedit;
diff --git a/source/blender/editors/gpencil/gpencil_convert.c b/source/blender/editors/gpencil/gpencil_convert.c
index 5afa379e04f..22034fc4b8e 100644
--- a/source/blender/editors/gpencil/gpencil_convert.c
+++ b/source/blender/editors/gpencil/gpencil_convert.c
@@ -1396,7 +1396,7 @@ static void gp_layer_to_curve(bContext *C,
     }
   }
 
-  ED_object_base_select(base_new, BA_SELECT);
+  ED_object_base_select(view_layer, base_new, BA_SELECT);
 }
 
 /* --- */
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index a4c68c2c5ad..e8474c1e52f 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -119,7 +119,9 @@ bool ED_object_parent_set(struct ReportList *reports,
                           const int vert_par[3]);
 void ED_object_parent_clear(struct Object *ob, const int type);
 
-void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode);
+void ED_object_base_select(struct ViewLayer *view_layer,
+                           struct Base *base,
+                           eObjectSelect_Mode mode);
 void ED_object_base_activate(struct bContext *C, struct Base *base);
 void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob);
 bool ED_object_base_deselect_all_ex(struct ViewLayer *view_layer,
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index a1ebcff31aa..a5f26f5a0f4 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -3919,7 +3919,7 @@ static Base *mesh_separate_tagged(
   /* new in 2.5 */
   assign_matarar(bmain, base_new->object, give_matarar(obedit), *give_totcolp(obedit));
 
-  ED_object_base_select(base_new, BA_SELECT);
+  ED_object_base_select(view_layer, base_new, BA_SELECT);
 
   BMO_op_callf(bm_old,
                (BMO_FLAG_DEFAULTS & ~BMO_FLAG_RESPECT_HIDE),
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 5e5537992e4..1e0fcd17063 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -2023,8 +2023,8 @@ static Base *duplibase_for_convert(
   BKE_collection_object_add_from(bmain, scene, ob, obn);
 
   basen = BKE_view_layer_base_find(view_layer, obn);
-  ED_object_base_select(basen, BA_SELECT);
-  ED_object_base_select(basen, BA_DESELECT);
+  ED_object_base_select(view_layer, basen, BA_SELECT);
+  ED_object_base_select(view_layer, basen, BA_DESELECT);
   return basen;
 }
 
@@ -2521,8 +2521,8 @@ static int duplicate_exec(bContext *C, wmOperator *op)
 
     /* note that this is safe to do with this context iterator,
      * the list is made in advance */
-    ED_object_base_select(base, BA_DESELECT);
-    ED_object_base_select(basen, BA_SELECT);
+    ED_object_base_select(view_layer, base, BA_DESELECT);
+    ED_object_base_select(view_layer, basen, BA_SELECT);
 
     if (basen == NULL) {
       continue;
@@ -2625,7 +2625,7 @@ static int add_named_exec(bContext *C, wmOperator *op)
     ED_view3d_cursor3d_position(C, mval, false, basen->object->loc);
   }
 
-  ED_object_base_select(basen, BA_SELECT);
+  ED_object_base_select(view_layer, basen, BA_SELECT);
   ED_object_base_activate(C, basen);
 
   copy_object_set_idnew(C);
diff --git a/source/blender/editors/object/object_collection.c b/source/blender/editors/object/object_collection.c
index fcaefaf220d..34746800064 100644
--- a/source/blender/editors/object/object_collection.c
+++ b/source/blender/editors/object/object_collection.c
@@ -599,6 +599,7 @@ void OBJECT_OT_collection_unlink(wmOperatorType *ot)
 static int select_grouped_exec(bContext *C, wmOperator *UNUSED(op))
 {
   Scene *scene = CTX_data_scene(C);
+  ViewLayer *view_layer = CTX_data_view_layer(C);
   Collection *collection = CTX_data_pointer_get_type(C, "collection", &RNA_Collection).data;
 
   if (!collection) {
@@ -608,7 +609,7 @@ static int select_grouped_exec(bContext *C, wmOperator *UNUSED(op))
   CTX_DATA_BEGIN (C, Base *, base, visible_bases) {
     if (((base->flag & BASE_SELECTED) == 0) && ((base->flag & BASE_SELECTABLE) != 0)) {
       if (BKE_collection_has_object_recursive(collection, base->object)) {
-        ED_object_base_select(base, BA_SELECT);
+        ED_object_base_select(view_layer, base, BA_SELECT);
       }
     }
   }
diff --git a/source/blender/editors/object/object_constraint.c b/source/blender/editors/object/object_constraint.c
index e424d2cc5bf..0574d43ad10 100644
--- a/source/blender/editors/object/object_constraint.c
+++ b/source/blender/editors/object/object_constraint.c
@@ -1844,7 +1844,7 @@ static bool get_new_constraint_target(
 
     /* restore, BKE_object_add sets active */
     BASACT(view_layer) = base;
-    ED_object_base_select(base, BA_SELECT);
+    ED_object_base_select(view_layer, base, BA_SELECT);
 
     /* make our new target the new object */
     *tar_ob = obt;
diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c
index 8ccd35051c6..f07efec20d2 100644
--- a/source/blender/editors/object/object_edit.c
+++ b/source/blender/editors/object/object_edit.c
@@ -223,14 +223,14 @@ static int object_hide_view_set_exec(bContext *C, wmOperator *op)
 
     if (!unselected) {
       if (base->flag & BASE_SELECTED) {
-        ED_object_base_select(base, BA_DESELECT);
+        ED_object_base_select(view_layer, base, BA_DESELECT);
         base->flag |= BASE_HIDDEN;
         changed = true;
       }
     }
     else {
       if (!(base->flag & BASE_SELECTED)) {
-        ED_object_base_select(base, BA_DESELECT);
+        ED_object_base_select(view_layer, base, BA_DESELECT);
         base->flag |= BASE_HIDDEN;
         changed = true;
       }
diff --git a/source/blender/editors/object/object_relations.c b/source/blender/editors/object/object_relations.c
index f748fd247ee..21628805421 100644
--- a/source/blender/editors/object/object_relations.c
+++ b/source/blender/editors/object/object_relations.c
@@ -2157,7 +2157,7 @@ static bool make_local_all__instance_indirect_unused(Main *bmain,
 
       BKE_collection_object_add(bmain, collection, ob);
       base = BKE_view_layer_base_find(view_layer, ob);
-      ED_object_base_select(base, BA_SELECT);
+      ED_object_base_select(view_layer, base, BA_SELECT);
       DEG_id_tag_update(&ob->id, ID_RECALC_TRANSFORM | ID_RECALC_GEOMETRY | ID_RECALC_ANIMATION);
 
       changed = true;
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index c13f3694135..7dde951095f 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -94,25 +94,7 @@
  * \note Caller must send a `NC_SCENE | ND_OB_SELECT` notifier
  * (or a `NC_SCENE | ND_OB_VISIBLE` in case of visibility toggling).
  */
-
-static void object_sync_selection_to_outliner(bContext *C)
-{
-  Main *bmain = CTX_data_main(C);
-  for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) {
-    for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
-      for (SpaceLink *space = sa->spacedata.first; space

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list