From 28e703b0a104f8c8c64dee835d9fd3e657ac86cf Mon Sep 17 00:00:00 2001 From: Philipp Oeser Date: Thu, 5 Nov 2020 14:11:01 +0100 Subject: Fix Outliner editbone selection with 'Sync Selection' When editbones were selected from the Outliner (and they were connected to a parent) with the 'Sync Selection' option turned ON, they could not get duplicated. For duplication to work, the (connected) parent bone's tip also has to be selected [which was not the case when selection is done from the Outliner under above circumstances]. The reason being that armature_duplicate_selected_exec -> ED_armature_edit_sync_selection clears the BONE_ROOTSEL flag if the parent bone's BONE_TIPSEL is not set. Caused by rB71eb65328078 btw. The correct "parent-tip-selection" would actually happen in activation - `tree_element_active_ebone` -- `tree_element_active_ebone__sel` but for 'Sync Selection' this happens [also] in - `outliner_sync_selection_from_outliner` -- `outliner_select_sync_to_edit_bone` which did not do the "flushing" to the parent bone's tip Now use existing dedicated function for this. ref. T82347 Reviewers: Zachman Differential Revision: https://developer.blender.org/D9470 --- source/blender/editors/space_outliner/outliner_select.c | 13 +------------ 1 file changed, 1 insertion(+), 12 deletions(-) (limited to 'source/blender/editors/space_outliner/outliner_select.c') diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index c6b5f2e2d2b..688f6d646ff 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -714,20 +714,9 @@ static eOLDrawState tree_element_active_bone(bContext *C, static void tree_element_active_ebone__sel(bContext *C, bArmature *arm, EditBone *ebone, short sel) { if (sel) { - ebone->flag |= BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL; arm->act_edbone = ebone; - /* Flush to parent? */ - if (ebone->parent && (ebone->flag & BONE_CONNECTED)) { - ebone->parent->flag |= BONE_TIPSEL; - } - } - else { - ebone->flag &= ~(BONE_SELECTED | BONE_ROOTSEL | BONE_TIPSEL); - /* Flush to parent? */ - if (ebone->parent && (ebone->flag & BONE_CONNECTED)) { - ebone->parent->flag &= ~BONE_TIPSEL; - } } + ED_armature_ebone_select_set(ebone, sel); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_ACTIVE, CTX_data_edit_object(C)); } static eOLDrawState tree_element_active_ebone(bContext *C, -- cgit v1.2.3