From c06a40006d6ce6a12eecb63dfe1b8d502efcc4af Mon Sep 17 00:00:00 2001 From: Nathan Craddock Date: Fri, 1 May 2020 20:06:38 -0600 Subject: Outliner: Fix selection sync for various operators Add missing outliner selection sync tagging for various non-outliner operators. * Curve separate * Grease Pencil separate * Mesh separate * Make instances real * 3D view paste * Sequencer paste * Armature delete, dissolve, separate, duplicate, subdivide, extrude, click extrude, primitive add * Pose Group select, delete Resolves T71404 --- source/blender/editors/armature/armature_add.c | 14 +++++++++++++- source/blender/editors/armature/armature_edit.c | 3 +++ source/blender/editors/armature/armature_relations.c | 2 ++ source/blender/editors/armature/pose_group.c | 3 +++ source/blender/editors/curve/editcurve.c | 3 +++ source/blender/editors/gpencil/gpencil_edit.c | 2 ++ source/blender/editors/include/ED_outliner.h | 3 ++- source/blender/editors/mesh/editmesh_tools.c | 2 ++ source/blender/editors/object/object_add.c | 1 + source/blender/editors/space_sequencer/sequencer_edit.c | 2 ++ source/blender/editors/space_view3d/view3d_ops.c | 2 ++ 11 files changed, 35 insertions(+), 2 deletions(-) (limited to 'source/blender/editors') diff --git a/source/blender/editors/armature/armature_add.c b/source/blender/editors/armature/armature_add.c index dfb274fdefe..d941f8ce95f 100644 --- a/source/blender/editors/armature/armature_add.c +++ b/source/blender/editors/armature/armature_add.c @@ -53,6 +53,7 @@ #include "WM_types.h" #include "ED_armature.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "ED_view3d.h" @@ -222,6 +223,7 @@ static int armature_click_extrude_exec(bContext *C, wmOperator *UNUSED(op)) WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); DEG_id_tag_update(&obedit->id, ID_RECALC_SELECT); + ED_outliner_select_sync_from_edit_bone_tag(C); return OPERATOR_FINISHED; } @@ -1049,6 +1051,8 @@ static int armature_duplicate_selected_exec(bContext *C, wmOperator *op) } MEM_freeN(objects); + ED_outliner_select_sync_from_edit_bone_tag(C); + return OPERATOR_FINISHED; } @@ -1521,7 +1525,13 @@ static int armature_extrude_exec(bContext *C, wmOperator *op) } MEM_freeN(objects); - return changed_multi ? OPERATOR_FINISHED : OPERATOR_CANCELLED; + if (!changed_multi) { + return OPERATOR_CANCELLED; + } + + ED_outliner_select_sync_from_edit_bone_tag(C); + + return OPERATOR_FINISHED; } void ARMATURE_OT_extrude(wmOperatorType *ot) @@ -1592,6 +1602,7 @@ static int armature_bone_primitive_add_exec(bContext *C, wmOperator *op) /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); DEG_id_tag_update(&obedit->id, ID_RECALC_SELECT); + ED_outliner_select_sync_from_edit_bone_tag(C); return OPERATOR_FINISHED; } @@ -1682,6 +1693,7 @@ static int armature_subdivide_exec(bContext *C, wmOperator *op) /* note, notifier might evolve */ WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); DEG_id_tag_update(&obedit->id, ID_RECALC_SELECT); + ED_outliner_select_sync_from_edit_bone_tag(C); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/armature/armature_edit.c b/source/blender/editors/armature/armature_edit.c index 8a7afe13a2f..a7a705a6202 100644 --- a/source/blender/editors/armature/armature_edit.c +++ b/source/blender/editors/armature/armature_edit.c @@ -54,6 +54,7 @@ #include "WM_types.h" #include "ED_armature.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "ED_view3d.h" @@ -1283,6 +1284,7 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op)) BKE_pose_tag_recalc(CTX_data_main(C), obedit->pose); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); + ED_outliner_select_sync_from_edit_bone_tag(C); } } MEM_freeN(objects); @@ -1458,6 +1460,7 @@ static int armature_dissolve_selected_exec(bContext *C, wmOperator *UNUSED(op)) ED_armature_edit_refresh_layer_used(arm); WM_event_add_notifier(C, NC_OBJECT | ND_BONE_SELECT, obedit); DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); + ED_outliner_select_sync_from_edit_bone_tag(C); } } MEM_freeN(objects); diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c index 644e466e904..bc854747a68 100644 --- a/source/blender/editors/armature/armature_relations.c +++ b/source/blender/editors/armature/armature_relations.c @@ -58,6 +58,7 @@ #include "ED_armature.h" #include "ED_object.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "UI_interface.h" @@ -707,6 +708,7 @@ static int separate_armature_exec(bContext *C, wmOperator *op) if (ok) { BKE_report(op->reports, RPT_INFO, "Separated bones"); + ED_outliner_select_sync_from_object_tag(C); } return OPERATOR_FINISHED; diff --git a/source/blender/editors/armature/pose_group.c b/source/blender/editors/armature/pose_group.c index 9cd87f476d4..c10e204e3a4 100644 --- a/source/blender/editors/armature/pose_group.c +++ b/source/blender/editors/armature/pose_group.c @@ -44,6 +44,7 @@ #include "WM_types.h" #include "ED_armature.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "UI_interface.h" @@ -484,6 +485,7 @@ static int pose_group_select_exec(bContext *C, wmOperator *UNUSED(op)) bArmature *arm = ob->data; DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob); + ED_outliner_select_sync_from_pose_bone_tag(C); return OPERATOR_FINISHED; } @@ -518,6 +520,7 @@ static int pose_group_deselect_exec(bContext *C, wmOperator *UNUSED(op)) bArmature *arm = ob->data; DEG_id_tag_update(&arm->id, ID_RECALC_SELECT); WM_event_add_notifier(C, NC_OBJECT | ND_POSE, ob); + ED_outliner_select_sync_from_pose_bone_tag(C); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index c0e5e11ac22..818acd28ecd 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -58,6 +58,7 @@ #include "ED_curve.h" #include "ED_object.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "ED_transform.h" #include "ED_transform_snap_object_context.h" @@ -1500,6 +1501,8 @@ static int separate_exec(bContext *C, wmOperator *op) return OPERATOR_CANCELLED; } + ED_outliner_select_sync_from_object_tag(C); + return OPERATOR_FINISHED; } diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index 947da9e7877..77e45642939 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -77,6 +77,7 @@ #include "ED_gpencil.h" #include "ED_object.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "ED_select_utils.h" #include "ED_space_api.h" @@ -4365,6 +4366,7 @@ static int gp_stroke_separate_exec(bContext *C, wmOperator *op) WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL); WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_EDITED, NULL); WM_event_add_notifier(C, NC_GPENCIL | ND_DATA | NA_SELECTED, NULL); + ED_outliner_select_sync_from_object_tag(C); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/include/ED_outliner.h b/source/blender/editors/include/ED_outliner.h index be1ee786a75..beed0f98fb5 100644 --- a/source/blender/editors/include/ED_outliner.h +++ b/source/blender/editors/include/ED_outliner.h @@ -29,12 +29,13 @@ extern "C" { struct ListBase; struct bContext; +struct Base; bool ED_outliner_collections_editor_poll(struct bContext *C); void ED_outliner_selected_objects_get(const struct bContext *C, struct ListBase *objects); -Base *ED_outliner_give_base_under_cursor(struct bContext *C, const int mval[2]); +struct Base *ED_outliner_give_base_under_cursor(struct bContext *C, const int mval[2]); void ED_outliner_select_sync_from_object_tag(struct bContext *C); void ED_outliner_select_sync_from_edit_bone_tag(struct bContext *C); diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index 37b0cd447b6..24c5cbb8573 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -69,6 +69,7 @@ #include "ED_mesh.h" #include "ED_object.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "ED_transform.h" #include "ED_uvedit.h" @@ -4404,6 +4405,7 @@ static int edbm_separate_exec(bContext *C, wmOperator *op) /* delay depsgraph recalc until all objects are duplicated */ DEG_relations_tag_update(bmain); WM_event_add_notifier(C, NC_OBJECT | ND_DRAW, NULL); + ED_outliner_select_sync_from_object_tag(C); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index 9e0a6d51614..64abd01983c 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -2048,6 +2048,7 @@ static int object_duplicates_make_real_exec(bContext *C, wmOperator *op) DEG_relations_tag_update(bmain); WM_event_add_notifier(C, NC_SCENE, scene); WM_main_add_notifier(NC_OBJECT | ND_DRAW, NULL); + ED_outliner_select_sync_from_object_tag(C); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c index 83671a0d600..e615e7be92f 100644 --- a/source/blender/editors/space_sequencer/sequencer_edit.c +++ b/source/blender/editors/space_sequencer/sequencer_edit.c @@ -56,6 +56,7 @@ #include "ED_anim_api.h" #include "ED_numinput.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "ED_sequencer.h" #include "ED_space_api.h" @@ -3561,6 +3562,7 @@ static int sequencer_paste_exec(bContext *C, wmOperator *UNUSED(op)) DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS); WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene); + ED_outliner_select_sync_from_sequence_tag(C); return OPERATOR_FINISHED; } diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index a53262df267..1ad3f8bb1f5 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -47,6 +47,7 @@ #include "WM_api.h" #include "WM_types.h" +#include "ED_outliner.h" #include "ED_screen.h" #include "ED_select_utils.h" #include "ED_transform.h" @@ -117,6 +118,7 @@ static int view3d_pastebuffer_exec(bContext *C, wmOperator *op) } WM_event_add_notifier(C, NC_WINDOW, NULL); + ED_outliner_select_sync_from_object_tag(C); BKE_reportf(op->reports, RPT_INFO, "%d object(s) pasted", num_pasted); -- cgit v1.2.3