[Bf-blender-cvs] [b2fdc59] master: UI: restore confirmation popups for delete operators.

Brecht Van Lommel noreply at git.blender.org
Fri Dec 20 01:40:54 CET 2013


Commit: b2fdc591c36cf5125eaa528b7f735c3c4393d390
Author: Brecht Van Lommel
Date:   Fri Dec 20 01:38:07 2013 +0100
http://developer.blender.org/rBb2fdc591c36cf5125eaa528b7f735c3c4393d390

UI: restore confirmation popups for delete operators.

It turned out this was leading to accidental deleting in some cases when the
info message was missed by users. Fixes T37801.

===================================================================

M	source/blender/editors/animation/keyframing.c
M	source/blender/editors/armature/armature_edit.c
M	source/blender/editors/mask/mask_ops.c
M	source/blender/editors/object/object_add.c
M	source/blender/editors/space_action/action_edit.c
M	source/blender/editors/space_clip/clip_graph_ops.c
M	source/blender/editors/space_clip/tracking_ops.c
M	source/blender/editors/space_graph/graph_edit.c

===================================================================

diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c
index 968a3ff..1b77c15 100644
--- a/source/blender/editors/animation/keyframing.c
+++ b/source/blender/editors/animation/keyframing.c
@@ -1514,9 +1514,9 @@ void ANIM_OT_keyframe_delete(wmOperatorType *ot)
  * it is more useful for animators working in the 3D view.
  */
  
-static int clear_anim_v3d_exec(bContext *C, wmOperator *op)
+static int clear_anim_v3d_exec(bContext *C, wmOperator *UNUSED(op))
 {
-	int num_deleted = 0;
+	bool changed = false;
 
 	CTX_DATA_BEGIN (C, Object *, ob, selected_objects)
 	{
@@ -1557,18 +1557,17 @@ static int clear_anim_v3d_exec(bContext *C, wmOperator *op)
 				/* delete F-Curve completely */
 				if (can_delete) {
 					ANIM_fcurve_delete_from_animdata(NULL, adt, fcu);
-					num_deleted++;
+					DAG_id_tag_update(&ob->id, OB_RECALC_OB);
+					changed = true;
 				}
 			}
 		}
-
-		/* update... */
-		DAG_id_tag_update(&ob->id, OB_RECALC_OB);
 	}
 	CTX_DATA_END;
 
-	if (num_deleted > 0)
-		BKE_reportf(op->reports, RPT_INFO, "Deleted %d animation F-Curves from selected objects", num_deleted);
+	if (!changed) {
+		return OPERATOR_CANCELLED;
+	}
 
 	/* send updates */
 	WM_event_add_notifier(C, NC_OBJECT | ND_KEYS, NULL);
@@ -1584,6 +1583,7 @@ void ANIM_OT_keyframe_clear_v3d(wmOperatorType *ot)
 	ot->idname = "ANIM_OT_keyframe_clear_v3d";
 	
 	/* callbacks */
+	ot->invoke = WM_operator_confirm;
 	ot->exec = clear_anim_v3d_exec; 
 	
 	ot->poll = ED_operator_areaactive;
@@ -1647,6 +1647,7 @@ void ANIM_OT_keyframe_delete_v3d(wmOperatorType *ot)
 	ot->idname = "ANIM_OT_keyframe_delete_v3d";
 	
 	/* callbacks */
+	ot->invoke = WM_operator_confirm;
 	ot->exec = delete_key_v3d_exec; 
 	
 	ot->poll = ED_operator_areaactive;
diff --git a/source/blender/editors/armature/armature_edit.c b/source/blender/editors/armature/armature_edit.c
index 9bc94e0..8600fdc 100644
--- a/source/blender/editors/armature/armature_edit.c
+++ b/source/blender/editors/armature/armature_edit.c
@@ -1137,13 +1137,13 @@ void ARMATURE_OT_split(wmOperatorType *ot)
 
 /* previously delete_armature */
 /* only editmode! */
-static int armature_delete_selected_exec(bContext *C, wmOperator *op)
+static int armature_delete_selected_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	bArmature *arm;
 	EditBone *curBone, *ebone_next;
 	bConstraint *con;
 	Object *obedit = CTX_data_edit_object(C); // XXX get from context
-	int num_deleted = 0;
+	bool changed = false;
 	arm = obedit->data;
 
 	/* cancel if nothing selected */
@@ -1200,12 +1200,13 @@ static int armature_delete_selected_exec(bContext *C, wmOperator *op)
 			if (curBone->flag & BONE_SELECTED) {
 				if (curBone == arm->act_edbone) arm->act_edbone = NULL;
 				ED_armature_edit_bone_remove(arm, curBone);
-				num_deleted++;
+				changed = true;
 			}
 		}
 	}
 	
-	BKE_reportf(op->reports, RPT_INFO, "Deleted %d bones", num_deleted);
+	if (!changed)
+		return OPERATOR_CANCELLED;
 	
 	ED_armature_sync_selection(arm->edbo);
 
@@ -1222,6 +1223,7 @@ void ARMATURE_OT_delete(wmOperatorType *ot)
 	ot->description = "Remove selected bones from the armature";
 	
 	/* api callbacks */
+	ot->invoke = WM_operator_confirm;
 	ot->exec = armature_delete_selected_exec;
 	ot->poll = ED_operator_editarmature;
 	
diff --git a/source/blender/editors/mask/mask_ops.c b/source/blender/editors/mask/mask_ops.c
index 7d7960d..5bc3928 100644
--- a/source/blender/editors/mask/mask_ops.c
+++ b/source/blender/editors/mask/mask_ops.c
@@ -38,7 +38,6 @@
 #include "BKE_depsgraph.h"
 #include "BKE_main.h"
 #include "BKE_mask.h"
-#include "BKE_report.h"
 
 #include "DNA_scene_types.h"
 #include "DNA_mask_types.h"
@@ -943,12 +942,12 @@ static void delete_feather_points(MaskSplinePoint *point)
 	}
 }
 
-static int delete_exec(bContext *C, wmOperator *op)
+static int delete_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	Scene *scene = CTX_data_scene(C);
 	Mask *mask = CTX_data_edit_mask(C);
 	MaskLayer *masklay;
-	int num_deleted = 0;
+	bool changed = false;
 
 	for (masklay = mask->masklayers.first; masklay; masklay = masklay->next) {
 		MaskSpline *spline;
@@ -984,8 +983,6 @@ static int delete_exec(bContext *C, wmOperator *op)
 				}
 
 				BKE_mask_layer_shape_changed_remove(masklay, mask_layer_shape_ofs, tot_point_orig);
-
-				num_deleted++;
 			}
 			else {
 				MaskSplinePoint *new_points;
@@ -1013,8 +1010,6 @@ static int delete_exec(bContext *C, wmOperator *op)
 						spline->tot_point--;
 
 						BKE_mask_layer_shape_changed_remove(masklay, mask_layer_shape_ofs + j, 1);
-
-						num_deleted++;
 					}
 				}
 
@@ -1026,6 +1021,7 @@ static int delete_exec(bContext *C, wmOperator *op)
 				ED_mask_select_flush_all(mask);
 			}
 
+			changed = true;
 			spline = next_spline;
 		}
 
@@ -1036,16 +1032,15 @@ static int delete_exec(bContext *C, wmOperator *op)
 		}
 	}
 
-	if (num_deleted == 0)
+	if (!changed) {
 		return OPERATOR_CANCELLED;
+	}
 
 	/* TODO: only update edited splines */
 	BKE_mask_update_display(mask, CFRA);
 
 	WM_event_add_notifier(C, NC_MASK | NA_EDITED, mask);
 
-	BKE_reportf(op->reports, RPT_INFO, "Deleted %d control points from mask '%s'", num_deleted, mask->id.name);
-
 	return OPERATOR_FINISHED;
 }
 
@@ -1057,6 +1052,7 @@ void MASK_OT_delete(wmOperatorType *ot)
 	ot->idname = "MASK_OT_delete";
 
 	/* api callbacks */
+	ot->invoke = WM_operator_confirm;
 	ot->exec = delete_exec;
 	ot->poll = ED_maskedit_mask_poll;
 
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 7e55d08..c67d389 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -1057,7 +1057,7 @@ static int object_delete_exec(bContext *C, wmOperator *op)
 	wmWindowManager *wm = CTX_wm_manager(C);
 	wmWindow *win;
 	const short use_global = RNA_boolean_get(op->ptr, "use_global");
-	int num_deleted = 0;
+	bool changed = false;
 
 	if (CTX_data_edit_object(C)) 
 		return OPERATOR_CANCELLED;
@@ -1069,7 +1069,7 @@ static int object_delete_exec(bContext *C, wmOperator *op)
 
 		/* remove from current scene only */
 		ED_base_object_free_and_unlink(bmain, scene, base);
-		num_deleted++;
+		changed = true;
 
 		if (use_global) {
 			Scene *scene_iter;
@@ -1089,6 +1089,9 @@ static int object_delete_exec(bContext *C, wmOperator *op)
 	}
 	CTX_DATA_END;
 
+	if (!changed)
+		return OPERATOR_CANCELLED;
+
 	/* delete has to handle all open scenes */
 	flag_listbase_ids(&bmain->scene, LIB_DOIT, 1);
 	for (win = wm->windows.first; win; win = win->next) {
@@ -1104,9 +1107,6 @@ static int object_delete_exec(bContext *C, wmOperator *op)
 		}
 	}
 
-	if (num_deleted > 0)
-		BKE_reportf(op->reports, RPT_INFO, "Deleted %d objects", num_deleted);
-
 	return OPERATOR_FINISHED;
 }
 
@@ -1118,6 +1118,7 @@ void OBJECT_OT_delete(wmOperatorType *ot)
 	ot->idname = "OBJECT_OT_delete";
 
 	/* api callbacks */
+	ot->invoke = WM_operator_confirm;
 	ot->exec = object_delete_exec;
 	ot->poll = ED_operator_objectmode;
 
diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c
index aafbc6a..7142a63 100644
--- a/source/blender/editors/space_action/action_edit.c
+++ b/source/blender/editors/space_action/action_edit.c
@@ -823,17 +823,17 @@ static bool delete_action_keys(bAnimContext *ac)
 
 /* ------------------- */
 
-static int actkeys_delete_exec(bContext *C, wmOperator *op)
+static int actkeys_delete_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	bAnimContext ac;
-	bool changed;
 	
 	/* get editor data */
 	if (ANIM_animdata_get_context(C, &ac) == 0)
 		return OPERATOR_CANCELLED;
 		
 	/* delete keyframes */
-	changed = delete_action_keys(&ac);
+	if (!delete_action_keys(&ac))
+		return OPERATOR_CANCELLED;
 	
 	/* validate keyframes after editing */
 	if (!ELEM(ac.datatype, ANIMCONT_GPENCIL, ANIMCONT_MASK))
@@ -842,9 +842,6 @@ static int actkeys_delete_exec(bContext *C, wmOperator *op)
 	/* set notifier that keyframes have changed */
 	WM_event_add_notifier(C, NC_ANIMATION | ND_KEYFRAME | NA_EDITED, NULL);
 	
-	if (changed)
-		BKE_report(op->reports, RPT_INFO, "Deleted selected keyframes");
-
 	return OPERATOR_FINISHED;
 }
  
@@ -856,6 +853,7 @@ void ACTION_OT_delete(wmOperatorType *ot)
 	ot->description = "Remove all selected keyframes";
 	
 	/* api callbacks */
+	ot->invoke = WM_operator_confirm;
 	ot->exec = actkeys_delete_exec;
 	ot->poll = ED_operator_action_active;
 	
diff --git a/source/blender/editors/space_clip/clip_graph_ops.c b/source/blender/editors/space_clip/clip_graph_ops.c
index ffb805c..e0062ec 100644
--- a/source/blender/editors/space_clip/clip_graph_ops.c
+++ b/source/blender/editors/space_clip/clip_graph_ops.c
@@ -43,7 +43,6 @@
 #include "BKE_movieclip.h"
 #include "BKE_tracking.h"
 #include "BKE_depsgraph.h"
-#include "BKE_report.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -472,18 +471,17 @@ void CLIP_OT_graph_select_all_markers(wmOperatorType *ot)
 
 /******************** delete curve operator ********************/
 
-static int delete_curve_exec(bContext *C, wmOperator *op)
+static int delete_curve_exec(bContext *C, wmOperator *UNUSED(op))
 {
 	SpaceClip *sc = CTX_wm_space_clip(C);
 	MovieClip *clip = ED_space_clip_get_clip(sc);
 	MovieTracking *tracking = &clip->tracking;
 	MovieTrackingTrack *act_track = BKE_tracking_track_get_active(tracking);
 
-	if (act_track) {
-		clip_delete_track(C, clip, act_track);
+	if (!act_track)
+		return OPERATOR_CANCELLED;
 
-		BKE_report(op->reports, RPT_INFO, "Deleted track");
-	}
+	clip_delete_track(C, clip, act_track);
 
 	return OPERATOR_FINISHED;
 }
@@ -496,6 +494,7 @@ void CLIP_OT_graph_delete_curve(wmOperatorType *ot)
 	ot->idname = "CLIP_OT_graph_delete_curve";
 
 	/* api callbacks */
+	ot->invoke = WM_operator_confirm;
 	ot->exec = delete_curve_exec;
 	ot->poll = ED_space_clip_tracking_poll;
 
diff --git a/source/blender/editors/space_clip/tracking_ops.c b/source/blender/editors/space_clip/tracking_ops.c
index b198b68..00e470f 100644
--- a/source/blender/editors/space_clip/tracking_ops.c
+++ b/source/blender/editors/space_clip/tracking_ops.c
@@ -234,7 +234,7 @@ void CLIP_OT_add_marker_at_click(wmOperatorType *ot)
 
 /********************** delete track op

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list