[Bf-blender-cvs] [98bb22a2070] master: Fix object mode lasso de-selection

Campbell Barton noreply at git.blender.org
Fri Mar 1 04:09:33 CET 2019


Commit: 98bb22a207037c32ab3dfa3fb3c0df343c611dfb
Author: Campbell Barton
Date:   Fri Mar 1 14:08:05 2019 +1100
Branches: master
https://developer.blender.org/rB98bb22a207037c32ab3dfa3fb3c0df343c611dfb

Fix object mode lasso de-selection

Lasso actions that only de-selected were handled as if nothing changed.

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

M	source/blender/editors/space_view3d/view3d_select.c

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

diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index 94162a5e484..1d36b5fd79c 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -151,27 +151,33 @@ void ED_view3d_viewcontext_init_object(ViewContext *vc, Object *obact)
 /** \name Internal Object Utilities
  * \{ */
 
-static void object_deselect_all_visible(ViewLayer *view_layer, View3D *v3d)
+static bool object_deselect_all_visible(ViewLayer *view_layer, View3D *v3d)
 {
-	Base *base;
-
-	for (base = view_layer->object_bases.first; base; base = base->next) {
-		if (BASE_SELECTABLE(v3d, base)) {
-			ED_object_base_select(base, BA_DESELECT);
+	bool changed = false;
+	for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+		if (base->flag & BASE_SELECTED) {
+			if (BASE_SELECTABLE(v3d, base)) {
+				ED_object_base_select(base, BA_DESELECT);
+				changed = true;
+			}
 		}
 	}
+	return changed;
 }
 
 /* deselect all except b */
-static void object_deselect_all_except(ViewLayer *view_layer, Base *b)
+static bool object_deselect_all_except(ViewLayer *view_layer, Base *b)
 {
+	bool changed = false;
 	for (Base *base = view_layer->object_bases.first; base; base = base->next) {
 		if (base->flag & BASE_SELECTED) {
 			if (b != base) {
 				ED_object_base_select(base, BA_DESELECT);
+				changed = true;
 			}
 		}
 	}
+	return changed;
 }
 
 /** \} */
@@ -445,11 +451,11 @@ static void do_lasso_select_objects(
 	View3D *v3d = vc->v3d;
 	Base *base;
 
+	bool changed = false;
 	if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
-		object_deselect_all_visible(vc->view_layer, vc->v3d);
+		changed = object_deselect_all_visible(vc->view_layer, vc->v3d);
 	}
 
-	bool changed = false;
 	for (base = vc->view_layer->object_bases.first; base; base = base->next) {
 		if (BASE_SELECTABLE(v3d, base)) { /* use this to avoid un-needed lasso lookups */
 			const bool is_select = base->flag & BASE_SELECTED;



More information about the Bf-blender-cvs mailing list