Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2019-03-01 06:08:05 +0300
committerCampbell Barton <ideasman42@gmail.com>2019-03-01 06:08:05 +0300
commit98bb22a207037c32ab3dfa3fb3c0df343c611dfb (patch)
tree969bc4d4abd43fc6baf20c714a7f7580be406982 /source/blender/editors/space_view3d
parent1bb71a82cb2422b0060a0d759a0d0e13f104331d (diff)
Fix object mode lasso de-selection
Lasso actions that only de-selected were handled as if nothing changed.
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c24
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;