diff options
5 files changed, 28 insertions, 4 deletions
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 5ef14428cf9..5ecda0d063f 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -3245,9 +3245,9 @@ def km_object_mode(params): ("object.delete", {"type": 'X', "value": 'PRESS', "shift": True}, {"properties": [("use_global", True)]}), ("object.delete", {"type": 'DEL', "value": 'PRESS'}, - {"properties": [("use_global", False)]}), + {"properties": [("use_global", False), ("confirm", False)]}), ("object.delete", {"type": 'DEL', "value": 'PRESS', "shift": True}, - {"properties": [("use_global", True)]}), + {"properties": [("use_global", True), ("confirm", False)]}), op_menu("VIEW3D_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}), op_menu("VIEW3D_MT_object_apply", {"type": 'A', "value": 'PRESS', "ctrl": True}), op_menu("VIEW3D_MT_make_links", {"type": 'L', "value": 'PRESS', "ctrl": True}), diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c index ffb38ab3a7c..c4eb0aad337 100644 --- a/source/blender/editors/object/object_add.c +++ b/source/blender/editors/object/object_add.c @@ -1410,7 +1410,7 @@ void OBJECT_OT_delete(wmOperatorType *ot) ot->idname = "OBJECT_OT_delete"; /* api callbacks */ - ot->invoke = WM_operator_confirm; + ot->invoke = WM_operator_confirm_or_exec; ot->exec = object_delete_exec; ot->poll = ED_operator_objectmode; @@ -1420,6 +1420,7 @@ void OBJECT_OT_delete(wmOperatorType *ot) PropertyRNA *prop; prop = RNA_def_boolean(ot->srna, "use_global", 0, "Delete Globally", "Remove object from all scenes"); RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); + WM_operator_properties_confirm_or_exec(ot); } /**************************** Copy Utilities ******************************/ diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h index 7628217d88f..8e12ac96ea3 100644 --- a/source/blender/windowmanager/WM_api.h +++ b/source/blender/windowmanager/WM_api.h @@ -287,7 +287,8 @@ void WM_menu_name_call(struct bContext *C, const char *menu_name, short context int WM_enum_search_invoke_previews(struct bContext *C, struct wmOperator *op, short prv_cols, short prv_rows); int WM_enum_search_invoke(struct bContext *C, struct wmOperator *op, const struct wmEvent *event); /* invoke callback, confirm menu + exec */ -int WM_operator_confirm (struct bContext *C, struct wmOperator *op, const struct wmEvent *event); +int WM_operator_confirm(struct bContext *C, struct wmOperator *op, const struct wmEvent *event); +int WM_operator_confirm_or_exec(struct bContext *C, struct wmOperator *op, const struct wmEvent *event); /* invoke callback, file selector "filepath" unset + exec */ int WM_operator_filesel (struct bContext *C, struct wmOperator *op, const struct wmEvent *event); bool WM_operator_filesel_ensure_ext_imtype(wmOperator *op, const struct ImageFormatData *im_format); @@ -348,6 +349,7 @@ bool WM_operator_last_properties_store(struct wmOperator *op); /* wm_operator_props.c */ +void WM_operator_properties_confirm_or_exec(struct wmOperatorType *ot); void WM_operator_properties_filesel( struct wmOperatorType *ot, int filter, short type, short action, short flag, short display, short sort); diff --git a/source/blender/windowmanager/intern/wm_operator_props.c b/source/blender/windowmanager/intern/wm_operator_props.c index 4515223f829..f8fa652ed63 100644 --- a/source/blender/windowmanager/intern/wm_operator_props.c +++ b/source/blender/windowmanager/intern/wm_operator_props.c @@ -44,6 +44,15 @@ #include "WM_api.h" #include "WM_types.h" + +void WM_operator_properties_confirm_or_exec(wmOperatorType *ot) +{ + PropertyRNA *prop; + + prop = RNA_def_boolean(ot->srna, "confirm", true, "Confirm", "Prompt for confirmation"); + RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE); +} + /* default properties for fileselect */ void WM_operator_properties_filesel( wmOperatorType *ot, int filter, short type, short action, diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index 1bb79755e46..e0bd48dfec1 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -863,6 +863,18 @@ int WM_operator_confirm(bContext *C, wmOperator *op, const wmEvent *UNUSED(event return WM_operator_confirm_message(C, op, NULL); } +int WM_operator_confirm_or_exec(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) +{ + const bool confirm = RNA_boolean_get(op->ptr, "confirm"); + if (confirm) { + return WM_operator_confirm_message(C, op, NULL); + } + else { + return op->type->exec(C, op); + } +} + + /* op->invoke, opens fileselect if path property not set, otherwise executes */ int WM_operator_filesel(bContext *C, wmOperator *op, const wmEvent *UNUSED(event)) { |