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);