diff options
author | Campbell Barton <campbell@blender.org> | 2022-08-28 13:08:18 +0300 |
---|---|---|
committer | Campbell Barton <campbell@blender.org> | 2022-08-28 13:18:12 +0300 |
commit | 7de290ea086cbcd063a2d5668a74e0f23bc28339 (patch) | |
tree | 175c9960d0fc04a7b0553c0195f7aba97d3abe3d /source/blender/editors/util/ed_draw.c | |
parent | 219d1095756fda2e54b6168eb65c93e3869722a6 (diff) |
Fix crashes running operators in invalid contexts
Fix for running operators outside of expected contexts.
- UI_OT_view_drop (poll)
- UI_OT_view_item_rename (poll)
- OBJECT_OT_gpencil_modifier_move_to_index
- OBJECT_OT_modifier_move_to_index
- OBJECT_OT_geometry_nodes_input_attribute_toggle
- OBJECT_OT_geometry_node_tree_copy_assign
- OBJECT_OT_shaderfx_remove
- OBJECT_OT_shaderfx_copy
- POSE_OT_relax (& other pose slide operators).
Diffstat (limited to 'source/blender/editors/util/ed_draw.c')
-rw-r--r-- | source/blender/editors/util/ed_draw.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/source/blender/editors/util/ed_draw.c b/source/blender/editors/util/ed_draw.c index 1b6a3efe19c..0fec8349796 100644 --- a/source/blender/editors/util/ed_draw.c +++ b/source/blender/editors/util/ed_draw.c @@ -370,11 +370,13 @@ tSlider *ED_slider_create(struct bContext *C) slider->factor = 0.5; /* Add draw callback. Always in header. */ - LISTBASE_FOREACH (ARegion *, region, &slider->area->regionbase) { - if (region->regiontype == RGN_TYPE_HEADER) { - slider->region_header = region; - slider->draw_handle = ED_region_draw_cb_activate( - region->type, slider_draw, slider, REGION_DRAW_POST_PIXEL); + if (slider->area) { + LISTBASE_FOREACH (ARegion *, region, &slider->area->regionbase) { + if (region->regiontype == RGN_TYPE_HEADER) { + slider->region_header = region; + slider->draw_handle = ED_region_draw_cb_activate( + region->type, slider_draw, slider, REGION_DRAW_POST_PIXEL); + } } } @@ -465,7 +467,9 @@ void ED_slider_status_string_get(const struct tSlider *slider, void ED_slider_destroy(struct bContext *C, tSlider *slider) { /* Remove draw callback. */ - ED_region_draw_cb_exit(slider->region_header->type, slider->draw_handle); + if (slider->draw_handle) { + ED_region_draw_cb_exit(slider->region_header->type, slider->draw_handle); + } ED_area_status_text(slider->area, NULL); ED_workspace_status_text(C, NULL); MEM_freeN(slider); |