diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py index 853dfccc626..9224f612510 100644 --- a/release/scripts/startup/bl_ui/space_view3d.py +++ b/release/scripts/startup/bl_ui/space_view3d.py @@ -551,6 +551,7 @@ class _draw_tool_settings_context_mode: row.prop(brush.curves_sculpt_settings, "density_mode", text="", expand=True) row = layout.row(align=True) row.prop(brush.curves_sculpt_settings, "minimum_distance") + row.operator_context = 'INVOKE_REGION_WIN' row.operator("sculpt_curves.min_distance_edit", text="", icon='DRIVER_DISTANCE') row = layout.row(align=True) row.enabled = brush.curves_sculpt_settings.density_mode != 'REMOVE' diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc b/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc index 32a6a7a9b0f..dae605f0164 100644 --- a/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc +++ b/source/blender/editors/sculpt_paint/curves_sculpt_ops.cc @@ -948,12 +948,16 @@ struct MinDistanceEditData { /** The operator uses a new cursor, but the existing cursors should be restored afterwards. */ ListBase orig_paintcursors; void *cursor; + + /** Store the viewport region in case the operator was called from the header. */ + ARegion *region; + RegionView3D *rv3d; }; static int calculate_points_per_side(bContext *C, MinDistanceEditData &op_data) { Scene *scene = CTX_data_scene(C); - ARegion *region = CTX_wm_region(C); + ARegion *region = op_data.region; const float min_distance = op_data.brush->curves_sculpt_settings->minimum_distance; float brush_radius = BKE_brush_size_get(scene, op_data.brush); @@ -1035,8 +1039,8 @@ static void min_distance_edit_draw(bContext *C, int UNUSED(x), int UNUSED(y), vo GPU_matrix_push_projection(); GPU_blend(GPU_BLEND_ALPHA); - RegionView3D *rv3d = CTX_wm_region_view3d(C); - ARegion *region = CTX_wm_region(C); + ARegion *region = op_data.region; + RegionView3D *rv3d = op_data.rv3d; wmWindow *win = CTX_wm_window(C); /* It does the same as: `view3d_operator_needs_opengl(C);`. */ @@ -1172,6 +1176,8 @@ static int min_distance_edit_invoke(bContext *C, wmOperator *op, const wmEvent * BLI_listbase_clear(&wm->paintcursors); /* Add minimum distance paint cursor. */ + op_data->region = CTX_wm_region(C); + op_data->rv3d = CTX_wm_region_view3d(C); op_data->cursor = WM_paint_cursor_activate( SPACE_TYPE_ANY, RGN_TYPE_ANY, op->type->poll, min_distance_edit_draw, op_data);