[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37246] trunk/blender/source/blender: Added cancel callbacks to modal operators which allocates memory

Sergey Sharybin g.ulairi at gmail.com
Mon Jun 6 13:04:54 CEST 2011


Revision: 37246
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37246
Author:   nazgul
Date:     2011-06-06 11:04:54 +0000 (Mon, 06 Jun 2011)
Log Message:
-----------
Added cancel callbacks to modal operators which allocates memory
in invoke callback. This prevents unfreed memory blocks when quiting
Bledner with modal operator running.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/anim_channels_edit.c
    trunk/blender/source/blender/editors/animation/anim_markers.c
    trunk/blender/source/blender/editors/animation/anim_ops.c
    trunk/blender/source/blender/editors/interface/view2d_ops.c
    trunk/blender/source/blender/editors/mesh/editmesh_loop.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h
    trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
    trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
    trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
    trunk/blender/source/blender/editors/space_action/action_select.c
    trunk/blender/source/blender/editors/space_file/file_ops.c
    trunk/blender/source/blender/editors/space_graph/graph_select.c
    trunk/blender/source/blender/editors/space_image/image_ops.c
    trunk/blender/source/blender/editors/space_info/info_report.c
    trunk/blender/source/blender/editors/space_logic/logic_buttons.c
    trunk/blender/source/blender/editors/space_nla/nla_select.c
    trunk/blender/source/blender/editors/space_node/node_edit.c
    trunk/blender/source/blender/editors/space_node/node_select.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_edit.c
    trunk/blender/source/blender/editors/space_sequencer/sequencer_select.c
    trunk/blender/source/blender/editors/space_view3d/view3d_edit.c
    trunk/blender/source/blender/editors/space_view3d/view3d_select.c
    trunk/blender/source/blender/editors/uvedit/uvedit_ops.c
    trunk/blender/source/blender/windowmanager/WM_api.h
    trunk/blender/source/blender/windowmanager/intern/wm_operators.c

Modified: trunk/blender/source/blender/editors/animation/anim_channels_edit.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_channels_edit.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/animation/anim_channels_edit.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -1881,6 +1881,7 @@
 	ot->invoke= WM_border_select_invoke;
 	ot->exec= animchannels_borderselect_exec;
 	ot->modal= WM_border_select_modal;
+	ot->cancel= WM_border_select_cancel;
 	
 	ot->poll= animedit_poll_channels_nla_tweakmode_off;
 	

Modified: trunk/blender/source/blender/editors/animation/anim_markers.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_markers.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/animation/anim_markers.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -717,7 +717,7 @@
 }
 
 /* only for modal */
-static void ed_marker_move_cancel(bContext *C, wmOperator *op)
+static int ed_marker_move_cancel(bContext *C, wmOperator *op)
 {
 	RNA_int_set(op->ptr, "frames", 0);
 	ed_marker_move_apply(op);
@@ -725,6 +725,8 @@
 	
 	WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL);
 	WM_event_add_notifier(C, NC_ANIMATION|ND_MARKERS, NULL);
+
+	return OPERATOR_CANCELLED;
 }
 
 
@@ -886,6 +888,7 @@
 	ot->invoke= ed_marker_move_invoke_wrapper;
 	ot->modal= ed_marker_move_modal;
 	ot->poll= ed_markers_poll_selected_markers;
+	ot->cancel= ed_marker_move_cancel;
 	
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING|OPTYPE_GRAB_POINTER;
@@ -980,6 +983,7 @@
 	ot->invoke= ed_marker_duplicate_invoke_wrapper;
 	ot->modal= ed_marker_move_modal;
 	ot->poll= ed_markers_poll_selected_markers;
+	ot->cancel= ed_marker_move_cancel;
 	
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1185,6 +1189,7 @@
 	ot->exec= ed_marker_border_select_exec;
 	ot->invoke= ed_marker_select_border_invoke_wrapper;
 	ot->modal= WM_border_select_modal;
+	ot->cancel= WM_border_select_cancel;
 	
 	ot->poll= ed_markers_poll_markers_exist;
 	

Modified: trunk/blender/source/blender/editors/animation/anim_ops.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_ops.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/animation/anim_ops.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -224,6 +224,7 @@
 	ot->invoke= WM_border_select_invoke;
 	ot->exec= previewrange_define_exec;
 	ot->modal= WM_border_select_modal;
+	ot->cancel= WM_border_select_cancel;
 	
 	ot->poll= ED_operator_animview_active;
 	

Modified: trunk/blender/source/blender/editors/interface/view2d_ops.c
===================================================================
--- trunk/blender/source/blender/editors/interface/view2d_ops.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/interface/view2d_ops.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -876,6 +876,13 @@
 	}
 } 
 
+static int view_zoomdrag_cancel(bContext *C, wmOperator *op)
+{
+	view_zoomdrag_exit(C, op);
+
+	return OPERATOR_CANCELLED;
+}
+
 /* for 'redo' only, with no user input */
 static int view_zoomdrag_exec(bContext *C, wmOperator *op)
 {
@@ -1065,6 +1072,7 @@
 	ot->exec= view_zoomdrag_exec;
 	ot->invoke= view_zoomdrag_invoke;
 	ot->modal= view_zoomdrag_modal;
+	ot->cancel= view_zoomdrag_cancel;
 	
 	ot->poll= view_zoom_poll;
 	
@@ -1165,6 +1173,7 @@
 	ot->invoke= WM_border_select_invoke;
 	ot->exec= view_borderzoom_exec;
 	ot->modal= WM_border_select_modal;
+	ot->cancel= WM_border_select_cancel;
 	
 	ot->poll= view_zoom_poll;
 	
@@ -1352,8 +1361,15 @@
 		
 		ED_region_tag_redraw(CTX_wm_region(C));
 	}
-} 
+}
 
+static int scroller_activate_cancel(bContext *C, wmOperator *op)
+{
+	scroller_activate_exit(C, op);
+
+	return OPERATOR_CANCELLED;
+}
+
 /* apply transform to view (i.e. adjust 'cur' rect) */
 static void scroller_activate_apply(bContext *C, wmOperator *op)
 {
@@ -1561,6 +1577,8 @@
 	/* api callbacks */
 	ot->invoke= scroller_activate_invoke;
 	ot->modal= scroller_activate_modal;
+	ot->cancel= scroller_activate_cancel;
+
 	ot->poll= view2d_poll;
 }
 

Modified: trunk/blender/source/blender/editors/mesh/editmesh_loop.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_loop.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/mesh/editmesh_loop.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -716,6 +716,7 @@
 	ot->invoke= WM_gesture_lines_invoke;
 	ot->modal= WM_gesture_lines_modal;
 	ot->exec= knife_cut_exec;
+	ot->cancel= WM_gesture_lines_cancel;
 	
 	ot->poll= EM_view3d_poll;
 	

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -627,6 +627,13 @@
 	return OPERATOR_RUNNING_MODAL;
 }
 
+static int actionzone_cancel(bContext *UNUSED(C), wmOperator *op)
+{
+	actionzone_exit(op);
+
+	return OPERATOR_CANCELLED;
+}
+
 static void SCREEN_OT_actionzone(wmOperatorType *ot)
 {
 	/* identifiers */
@@ -637,6 +644,7 @@
 	ot->invoke= actionzone_invoke;
 	ot->modal= actionzone_modal;
 	ot->poll= actionzone_area_poll;
+	ot->cancel= actionzone_cancel;
 	
 	ot->flag= OPTYPE_BLOCKING;
 	
@@ -759,6 +767,7 @@
 	ot->invoke= area_swap_invoke;
 	ot->modal= area_swap_modal;
 	ot->poll= ED_operator_areaactive;
+	ot->cancel= area_swap_cancel;
 	
 	ot->flag= OPTYPE_BLOCKING;
 }
@@ -1494,6 +1503,7 @@
 	ot->exec= area_split_exec;
 	ot->invoke= area_split_invoke;
 	ot->modal= area_split_modal;
+	ot->cancel= area_split_cancel;
 	
 	ot->poll= screen_active_editable;
 	ot->flag= OPTYPE_BLOCKING;
@@ -1693,7 +1703,14 @@
 	return OPERATOR_RUNNING_MODAL;
 }
 
+int region_scale_cancel(bContext *UNUSED(C), wmOperator *op)
+{
+	MEM_freeN(op->customdata);
+	op->customdata = NULL;
 
+	return OPERATOR_CANCELLED;
+}
+
 static void SCREEN_OT_region_scale(wmOperatorType *ot)
 {
 	/* identifiers */
@@ -1703,6 +1720,7 @@
 	
 	ot->invoke= region_scale_invoke;
 	ot->modal= region_scale_modal;
+	ot->cancel= region_scale_cancel;
 	
 	ot->poll= ED_operator_areaactive;
 	
@@ -2257,6 +2275,7 @@
 	ot->invoke= area_join_invoke;
 	ot->modal= area_join_modal;
 	ot->poll= screen_active_editable;
+	ot->cancel= area_join_cancel;
 	
 	ot->flag= OPTYPE_BLOCKING;
 	
@@ -3053,6 +3072,7 @@
 	ot->exec= border_select_do;
 	ot->invoke= WM_border_select_invoke;
 	ot->modal= WM_border_select_modal;
+	ot->cancel= WM_border_select_cancel;
 	
 	ot->poll= ED_operator_areaactive;
 	

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_intern.h	2011-06-06 11:04:54 UTC (rev 37246)
@@ -65,6 +65,7 @@
 
 int paint_stroke_modal(struct bContext *C, struct wmOperator *op, struct wmEvent *event);
 int paint_stroke_exec(struct bContext *C, struct wmOperator *op);
+int paint_stroke_cancel(struct bContext *C, struct wmOperator *op);
 struct ViewContext *paint_stroke_view_context(struct PaintStroke *stroke);
 void *paint_stroke_mode_data(struct PaintStroke *stroke);
 void paint_stroke_set_mode_data(struct PaintStroke *stroke, void *mode_data);

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_stroke.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -916,6 +916,19 @@
 	return OPERATOR_FINISHED;
 }
 
+int paint_stroke_cancel(bContext *C, wmOperator *op)
+{
+	PaintStroke *stroke = op->customdata;
+
+	if(stroke->done)
+		stroke->done(C, stroke);
+
+	MEM_freeN(stroke);
+	op->customdata = NULL;
+
+	return OPERATOR_CANCELLED;
+}
+
 ViewContext *paint_stroke_view_context(PaintStroke *stroke)
 {
 	return &stroke->vc;

Modified: trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/sculpt_paint/paint_vertex.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -1600,6 +1600,13 @@
 	return OPERATOR_RUNNING_MODAL;
 }
 
+static int wpaint_cancel(bContext *C, wmOperator *op)
+{
+	paint_stroke_cancel(C, op);
+
+	return OPERATOR_CANCELLED;
+}
+
 void PAINT_OT_weight_paint(wmOperatorType *ot)
 {
 	
@@ -1612,6 +1619,7 @@
 	ot->modal= paint_stroke_modal;
 	/* ot->exec= vpaint_exec; <-- needs stroke property */
 	ot->poll= weight_paint_poll;
+	ot->cancel= wpaint_cancel;
 	
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;
@@ -1892,6 +1900,13 @@
 	return OPERATOR_RUNNING_MODAL;
 }
 
+static int vpaint_cancel(bContext *C, wmOperator *op)
+{
+	paint_stroke_cancel(C, op);
+
+	return OPERATOR_CANCELLED;
+}
+
 void PAINT_OT_vertex_paint(wmOperatorType *ot)
 {
 	/* identifiers */
@@ -1903,6 +1918,7 @@
 	ot->modal= paint_stroke_modal;
 	/* ot->exec= vpaint_exec; <-- needs stroke property */
 	ot->poll= vertex_paint_poll;
+	ot->cancel= vpaint_cancel;
 	
 	/* flags */
 	ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO|OPTYPE_BLOCKING;

Modified: trunk/blender/source/blender/editors/sculpt_paint/sculpt.c
===================================================================
--- trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2011-06-06 10:08:27 UTC (rev 37245)
+++ trunk/blender/source/blender/editors/sculpt_paint/sculpt.c	2011-06-06 11:04:54 UTC (rev 37246)
@@ -3559,6 +3559,24 @@
 	return OPERATOR_FINISHED;
 }
 
+static int sculpt_brush_stroke_cacel(bContext *C, wmOperator *op)
+{
+	Object *ob= CTX_data_active_object(C);
+	SculptSession *ss = ob->sculpt;
+	Sculpt *sd = CTX_data_tool_settings(C)->sculpt;
+
+	paint_stroke_cancel(C, op);
+
+	if(ss->cache) {
+		sculpt_cache_free(ss->cache);
+		ss->cache = NULL;
+	}
+
+	sculpt_brush_exit_tex(sd);
+
+	return OPERATOR_CANCELLED;
+}
+
 static void SCULPT_OT_brush_stroke(wmOperatorType *ot)
 {
 	static EnumPropertyItem stroke_mode_items[] = {
@@ -3577,6 +3595,7 @@

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list