diff options
Diffstat (limited to 'source/blender/editors/space_outliner')
3 files changed, 17 insertions, 13 deletions
diff --git a/source/blender/editors/space_outliner/outliner_draw.c b/source/blender/editors/space_outliner/outliner_draw.c index d44a3e60a3f..4db63a462e7 100644 --- a/source/blender/editors/space_outliner/outliner_draw.c +++ b/source/blender/editors/space_outliner/outliner_draw.c @@ -481,7 +481,7 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) char newname[sizeof(bone->name)]; /* always make current object active */ - tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL); + tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL, true); ob = OBACT; /* restore bone name */ @@ -498,8 +498,10 @@ static void namebutton_cb(bContext *C, void *tsep, char *oldname) char newname[sizeof(pchan->name)]; /* always make current pose-bone active */ - tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL); + tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL, true); ob = OBACT; + + BLI_assert(ob->type == OB_ARMATURE); /* restore bone name */ BLI_strncpy(newname, pchan->name, sizeof(pchan->name)); @@ -1154,7 +1156,7 @@ static void outliner_draw_iconrow(bContext *C, uiBlock *block, Scene *scene, Spa active = OL_DRAWSEL_NORMAL; } else { - active = tree_element_active(C, scene, soops, te, OL_SETSEL_NONE); + active = tree_element_active(C, scene, soops, te, OL_SETSEL_NONE, false); } } else { @@ -1295,7 +1297,7 @@ static void outliner_draw_tree_element(bContext *C, uiBlock *block, Scene *scene active = OL_DRAWSEL_ACTIVE; } else { - if (tree_element_active(C, scene, soops, te, OL_SETSEL_NONE)) { + if (tree_element_active(C, scene, soops, te, OL_SETSEL_NONE, false)) { glColor4ub(220, 220, 255, alpha); active = OL_DRAWSEL_ACTIVE; } diff --git a/source/blender/editors/space_outliner/outliner_intern.h b/source/blender/editors/space_outliner/outliner_intern.h index b1278c7cc07..317d33dd3e2 100644 --- a/source/blender/editors/space_outliner/outliner_intern.h +++ b/source/blender/editors/space_outliner/outliner_intern.h @@ -180,9 +180,8 @@ void restrictbutton_gr_restrict_flag(void *poin, void *poin2, int flag); eOLDrawState tree_element_type_active( struct bContext *C, struct Scene *scene, struct SpaceOops *soops, TreeElement *te, TreeStoreElem *tselem, const eOLSetState set, bool recursive); -eOLDrawState tree_element_active( - struct bContext *C, struct Scene *scene, SpaceOops *soops, - TreeElement *te, const eOLSetState set); +eOLDrawState tree_element_active(struct bContext *C, struct Scene *scene, SpaceOops *soops, + TreeElement *te, const eOLSetState set, const bool handle_all_types); int outliner_item_do_activate(struct bContext *C, int x, int y, bool extend, bool recursive); /* outliner_edit.c ---------------------------------------------- */ diff --git a/source/blender/editors/space_outliner/outliner_select.c b/source/blender/editors/space_outliner/outliner_select.c index 688695e3ded..51db965b791 100644 --- a/source/blender/editors/space_outliner/outliner_select.c +++ b/source/blender/editors/space_outliner/outliner_select.c @@ -801,14 +801,17 @@ static eOLDrawState tree_element_active_keymap_item( /* ---------------------------------------------- */ /* generic call for ID data check or make/check active in UI */ -eOLDrawState tree_element_active( - bContext *C, Scene *scene, SpaceOops *soops, - TreeElement *te, const eOLSetState set) +eOLDrawState tree_element_active(bContext *C, Scene *scene, SpaceOops *soops, TreeElement *te, + const eOLSetState set, const bool handle_all_types) { - switch (te->idcode) { - /* Note: no ID_OB: objects are handled specially to allow multiple + /* Note: ID_OB only if handle_all_type is true, else objects are handled specially to allow multiple * selection. See do_outliner_item_activate. */ + case ID_OB: + if (handle_all_types) { + return tree_element_set_active_object(C, scene, soops, te, set, false); + } + break; case ID_MA: return tree_element_active_material(C, scene, soops, te, set); case ID_WO: @@ -952,7 +955,7 @@ static bool do_outliner_item_activate(bContext *C, Scene *scene, ARegion *ar, Sp WM_operator_name_call(C, "OBJECT_OT_editmode_toggle", WM_OP_INVOKE_REGION_WIN, NULL); } else { // rest of types - tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL); + tree_element_active(C, scene, soops, te, OL_SETSEL_NORMAL, false); } } |