Page MenuHome

It takes too many extra clicks to change selection between bones and objects
Closed, ResolvedPublic

Description

Blender Version
Broken: blender-2.80.0-git.552b2287db86-windows64
Worked: 2.79

Description of the error and steps

It takes one extra click on each case to change selection between an object and bone and viceversa.

In 2.8, with Lock Object Modes turned off, this scenario takes 6 Clicks in total. It works like this:
-One click on BoneA puts you into Pose mode, but if another bone was selected you have to click on BoneA again. From Pose mode, one click on an Object puts you into Object mode, but it doesn't select the objecet, the armature is selected instead, so you have to click the object again. Now click on BoneB and youll be back in pose mode, except BoneA will be selected from your last time in pose mode, so you need an extra click. *

In 2.79 the same scenario takes 3 Clicks in total. It worked like this:
-From Object mode, one click on BoneA selects BoneA putting you into Pose mode directly, one click on an Object selects that object alone and puts you in back Object mode, a click on BoneB selects BoneB, and only BoneB, not the previously selected BoneA, and puts you into Pose mode again.

Try it with this file in 2.79 and then in 2.8

Event Timeline

Sebastian Parborg (zeddb) triaged this task as Confirmed, Medium priority.

Any updates on this?

Looking into this at the moment, relates to T66949

There was a change in 2.8x that makes selecting bones only work on the active object. You can't select an armature and bone at the same time.

Changing this is simple, however this is a fairly big change to make so close to release, see patch:

diff --git a/source/blender/draw/intern/draw_armature.c b/source/blender/draw/intern/draw_armature.c
index f97efa9aed9..657bf81e469 100644
--- a/source/blender/draw/intern/draw_armature.c
+++ b/source/blender/draw/intern/draw_armature.c
@@ -1992,7 +1992,7 @@ static void draw_armature_pose(Object *ob, const float const_color[4])
 
   // if (!(base->flag & OB_FROMDUPLI)) // TODO
   {
-    if ((draw_ctx->object_mode & OB_MODE_POSE) || (ob == draw_ctx->object_pose)) {
+    if (ob->mode & OB_MODE_POSE) {
       arm->flag |= ARM_POSEMODE;
     }

This check probably needs to also skip dupli/set-scene objects for eg.

Campbell Barton (campbellbarton) raised the priority of this task from Confirmed, Medium to Confirmed, High.Jul 17 2019, 1:43 PM