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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to