Fix #136077: Crash transforming in background mode with an active region

Don't attempt to add region draw callbacks in background mode.
This caused by the regions runtime being null.

Even if the runtime was initialized, drawing callbacks aren't needed
in background mode.

Ref !136078
This commit is contained in:
Campbell Barton
2025-03-17 21:41:34 +11:00
parent 103826d7ab
commit 044b8ab6f0

View File

@@ -11,6 +11,7 @@
#include "BKE_context.hh"
#include "BKE_editmesh.hh"
#include "BKE_global.hh"
#include "BKE_layer.hh"
#include "BKE_mask.h"
#include "BKE_screen.hh"
@@ -1891,26 +1892,28 @@ bool initTransform(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
initTransInfo(C, t, op, event);
if (t->spacetype == SPACE_VIEW3D) {
t->draw_handle_view = ED_region_draw_cb_activate(
t->region->runtime->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
t->draw_handle_pixel = ED_region_draw_cb_activate(
t->region->runtime->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
t->draw_handle_cursor = WM_paint_cursor_activate(
SPACE_TYPE_ANY, RGN_TYPE_ANY, transform_draw_cursor_poll, transform_draw_cursor_draw, t);
}
else if (ELEM(t->spacetype,
SPACE_IMAGE,
SPACE_CLIP,
SPACE_NODE,
SPACE_GRAPH,
SPACE_ACTION,
SPACE_SEQ))
{
t->draw_handle_view = ED_region_draw_cb_activate(
t->region->runtime->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
t->draw_handle_cursor = WM_paint_cursor_activate(
SPACE_TYPE_ANY, RGN_TYPE_ANY, transform_draw_cursor_poll, transform_draw_cursor_draw, t);
if (!G.background) {
if (t->spacetype == SPACE_VIEW3D) {
t->draw_handle_view = ED_region_draw_cb_activate(
t->region->runtime->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
t->draw_handle_pixel = ED_region_draw_cb_activate(
t->region->runtime->type, drawTransformPixel, t, REGION_DRAW_POST_PIXEL);
t->draw_handle_cursor = WM_paint_cursor_activate(
SPACE_TYPE_ANY, RGN_TYPE_ANY, transform_draw_cursor_poll, transform_draw_cursor_draw, t);
}
else if (ELEM(t->spacetype,
SPACE_IMAGE,
SPACE_CLIP,
SPACE_NODE,
SPACE_GRAPH,
SPACE_ACTION,
SPACE_SEQ))
{
t->draw_handle_view = ED_region_draw_cb_activate(
t->region->runtime->type, drawTransformView, t, REGION_DRAW_POST_VIEW);
t->draw_handle_cursor = WM_paint_cursor_activate(
SPACE_TYPE_ANY, RGN_TYPE_ANY, transform_draw_cursor_poll, transform_draw_cursor_draw, t);
}
}
create_trans_data(C, t); /* Make #TransData structs from selection. */