diff options
author | Campbell Barton <ideasman42@gmail.com> | 2019-03-01 06:08:05 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2019-03-01 06:08:05 +0300 |
commit | 98bb22a207037c32ab3dfa3fb3c0df343c611dfb (patch) | |
tree | 969bc4d4abd43fc6baf20c714a7f7580be406982 | |
parent | 1bb71a82cb2422b0060a0d759a0d0e13f104331d (diff) |
Fix object mode lasso de-selection
Lasso actions that only de-selected were handled as if nothing changed.
-rw-r--r-- | source/blender/editors/space_view3d/view3d_select.c | 24 |
1 files changed, 15 insertions, 9 deletions
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; |