[Bf-blender-cvs] [d834dcf1da3] xr-dev: Merge branch 'master' into xr-dev
Peter Kim
noreply at git.blender.org
Fri Mar 25 07:35:48 CET 2022
Commit: d834dcf1da3c2fce89459dbf22da77435feb48aa
Author: Peter Kim
Date: Fri Mar 25 15:34:46 2022 +0900
Branches: xr-dev
https://developer.blender.org/rBd834dcf1da3c2fce89459dbf22da77435feb48aa
Merge branch 'master' into xr-dev
===================================================================
===================================================================
diff --cc source/blender/editors/space_view3d/view3d_select.c
index 52b4fc1d8aa,30282df8026..d9388bc82ef
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@@ -2485,63 -2737,75 +2736,75 @@@ static bool ed_object_select_pick(bCont
}
}
- if (scene->toolsettings->object_flag & SCE_OBJECT_MODE_LOCK) {
- /* Disallow switching modes,
- * special exception for edit-mode - vertex-parent operator. */
- if (is_obedit == false) {
- if (oldbasact && basact) {
- if ((oldbasact->object->mode != basact->object->mode) &&
- (oldbasact->object->mode & basact->object->mode) == 0) {
- basact = NULL;
+ /* Ensure code above doesn't change the active base. This code is already fairly involved,
+ * it's best if changing the active object is localized to a single place. */
+ BLI_assert(oldbasact == (vc.obact ? BASACT(view_layer) : NULL));
+
+ bool found = (basact != NULL);
+ if ((handled == false) && (vc.obedit == NULL)) {
+ /* Object-mode (pose mode will have been handled already). */
+ if (params->sel_op == SEL_OP_SET) {
+ if ((found && params->select_passthrough) && (basact->flag & BASE_SELECTED)) {
+ found = false;
+ /* NOTE(@campbellbarton): Experimental behavior to set active even keeping the selection
+ * without this it's inconvenient to set the active object. */
+ if (basact != oldbasact) {
+ use_activate_selected_base = true;
+ }
+ }
+ else if (found || params->deselect_all) {
+ /* Deselect everything. */
+ /* `basact` may be NULL. */
- if (object_deselect_all_except(view_layer, basact)) {
++ if (ED_view3d_object_deselect_all_except(view_layer, basact)) {
+ changed_object = true;
}
}
}
}
- /* Ensure code above doesn't change the active base. */
- BLI_assert(oldbasact == (vc.obact ? BASACT(view_layer) : NULL));
-
- /* so, do we have something selected? */
- if (basact) {
- retval = true;
+ if ((handled == false) && found) {
if (vc.obedit) {
- /* only do select */
+ /* Only do the select (use for setting vertex parents & hooks).
+ * In edit-mode do not activate. */
- object_deselect_all_except(view_layer, basact);
+ ED_view3d_object_deselect_all_except(view_layer, basact);
ED_object_base_select(basact, BA_SELECT);
+
+ changed_object = true;
}
- /* also prevent making it active on mouse selection */
+ /* Also prevent making it active on mouse selection. */
else if (BASE_SELECTABLE(v3d, basact)) {
- const bool use_activate_selected_base = (oldbasact != basact) && (is_obedit == false);
- if (extend) {
- ED_object_base_select(basact, BA_SELECT);
- }
- else if (deselect) {
- ED_object_base_select(basact, BA_DESELECT);
- }
- else if (toggle) {
- if (basact->flag & BASE_SELECTED) {
- /* Keep selected if the base is to be activated. */
- if (use_activate_selected_base == false) {
- ED_object_base_select(basact, BA_DESELECT);
- }
- }
- else {
+ use_activate_selected_base |= (oldbasact != basact) && (is_obedit == false);
+
+ switch (params->sel_op) {
+ case SEL_OP_ADD: {
ED_object_base_select(basact, BA_SELECT);
+ break;
}
- }
- else {
- /* When enabled, this puts other objects out of multi pose-mode. */
- if (is_pose_mode == false || (basact->object->mode & OB_MODE_POSE) == 0) {
+ case SEL_OP_SUB: {
+ ED_object_base_select(basact, BA_DESELECT);
+ break;
+ }
+ case SEL_OP_XOR: {
+ if (basact->flag & BASE_SELECTED) {
+ /* Keep selected if the base is to be activated. */
+ if (use_activate_selected_base == false) {
+ ED_object_base_select(basact, BA_DESELECT);
+ }
+ }
+ else {
+ ED_object_base_select(basact, BA_SELECT);
+ }
+ break;
+ }
+ case SEL_OP_SET: {
- object_deselect_all_except(view_layer, basact);
+ ED_view3d_object_deselect_all_except(view_layer, basact);
ED_object_base_select(basact, BA_SELECT);
+ break;
}
- }
-
- if (use_activate_selected_base) {
- ED_object_base_activate(C, basact); /* adds notifier */
- if ((scene->toolsettings->object_flag & SCE_OBJECT_MODE_LOCK) == 0) {
- WM_toolsystem_update_from_context_view3d(C);
+ case SEL_OP_AND: {
+ BLI_assert_unreachable(); /* Doesn't make sense for picking. */
+ break;
}
}
More information about the Bf-blender-cvs
mailing list