diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-09-23 09:33:23 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-09-23 09:33:23 +0400 |
commit | 3e9a09d385b1e070b9bf30864c0f5d974f80b80a (patch) | |
tree | 3bea048a4e3fd103f02414c2f4ae6755b521daac | |
parent | 3e6340214d55650ac1560ca16e7e3a239ae889b2 (diff) |
fix for some crashes running operators in background mode.
5 files changed, 12 insertions, 4 deletions
diff --git a/source/blender/editors/sculpt_paint/paint_hide.c b/source/blender/editors/sculpt_paint/paint_hide.c index 25957157aa6..2970bdfb5a4 100644 --- a/source/blender/editors/sculpt_paint/paint_hide.c +++ b/source/blender/editors/sculpt_paint/paint_hide.c @@ -388,7 +388,7 @@ void PAINT_OT_hide_show(struct wmOperatorType *ot) ot->modal = WM_border_select_modal; ot->exec = hide_show_exec; /* sculpt-only for now */ - ot->poll = sculpt_mode_poll; + ot->poll = sculpt_mode_poll_view3d; ot->flag = OPTYPE_REGISTER; diff --git a/source/blender/editors/sculpt_paint/paint_stroke.c b/source/blender/editors/sculpt_paint/paint_stroke.c index 7657f78596a..7fabaf7f23d 100644 --- a/source/blender/editors/sculpt_paint/paint_stroke.c +++ b/source/blender/editors/sculpt_paint/paint_stroke.c @@ -524,8 +524,10 @@ int paint_poll(bContext *C) { Paint *p = paint_get_active_from_context(C); Object *ob = CTX_data_active_object(C); + ScrArea *sa = CTX_wm_area(C); + ARegion *ar = CTX_wm_region(C); return p && ob && paint_brush(p) && - CTX_wm_area(C)->spacetype == SPACE_VIEW3D && - CTX_wm_region(C)->regiontype == RGN_TYPE_WINDOW; + (sa && sa->spacetype == SPACE_VIEW3D) && + (ar && ar->regiontype == RGN_TYPE_WINDOW); } diff --git a/source/blender/editors/sculpt_paint/paint_vertex.c b/source/blender/editors/sculpt_paint/paint_vertex.c index bd6ddd1b99a..8aed92df3af 100644 --- a/source/blender/editors/sculpt_paint/paint_vertex.c +++ b/source/blender/editors/sculpt_paint/paint_vertex.c @@ -134,7 +134,7 @@ int vertex_paint_poll(bContext *C) paint_brush(&CTX_data_tool_settings(C)->vpaint->paint)) { ScrArea *sa = CTX_wm_area(C); - if (sa->spacetype == SPACE_VIEW3D) { + if (sa && sa->spacetype == SPACE_VIEW3D) { ARegion *ar = CTX_wm_region(C); if (ar->regiontype == RGN_TYPE_WINDOW) return 1; diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c index 2a778ada16a..05b5b90344c 100644 --- a/source/blender/editors/sculpt_paint/sculpt.c +++ b/source/blender/editors/sculpt_paint/sculpt.c @@ -3139,6 +3139,11 @@ int sculpt_mode_poll(bContext *C) return ob && ob->mode & OB_MODE_SCULPT; } +int sculpt_mode_poll_view3d(bContext *C) +{ + return (sculpt_mode_poll(C) && CTX_wm_region_view3d(C)); +} + int sculpt_poll(bContext *C) { return sculpt_mode_poll(C) && paint_poll(C); diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h index f4467dc22fc..5e79616b0b0 100644 --- a/source/blender/editors/sculpt_paint/sculpt_intern.h +++ b/source/blender/editors/sculpt_paint/sculpt_intern.h @@ -56,6 +56,7 @@ struct MultiresModifierData *sculpt_multires_active(struct Scene *scene, struct void sculpt(struct Sculpt *sd); int sculpt_mode_poll(struct bContext *C); +int sculpt_mode_poll_view3d(struct bContext *C); int sculpt_poll(struct bContext *C); void sculpt_update_mesh_elements(struct Scene *scene, struct Sculpt *sd, struct Object *ob, int need_pmap); |