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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to