Fix T48300: 3D view tools outside the 3d view crash
This commit is contained in:
parent
6976be7723
commit
a48d740798
Notes:
blender-bot
2023-10-18 15:23:11 +02:00
Referenced by issue #48300, Using the Search Menu (Spacebar) outside the 3D View can cause crashes, mouse pointer capture in certain cases
|
@ -137,8 +137,11 @@ static bool edbm_bevel_init(bContext *C, wmOperator *op, const bool is_modal)
|
|||
opdata->mesh_backup = EDBM_redo_state_store(em);
|
||||
opdata->draw_handle_pixel = ED_region_draw_cb_activate(ar->type, ED_region_draw_mouse_line_cb, opdata->mcenter, REGION_DRAW_POST_PIXEL);
|
||||
G.moving = G_TRANSFORM_EDIT;
|
||||
opdata->twtype = v3d->twtype;
|
||||
v3d->twtype = 0;
|
||||
|
||||
if (v3d) {
|
||||
opdata->twtype = v3d->twtype;
|
||||
v3d->twtype = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -206,7 +209,9 @@ static void edbm_bevel_exit(bContext *C, wmOperator *op)
|
|||
ARegion *ar = CTX_wm_region(C);
|
||||
EDBM_redo_state_free(&opdata->mesh_backup, NULL, false);
|
||||
ED_region_draw_cb_exit(ar->type, opdata->draw_handle_pixel);
|
||||
v3d->twtype = opdata->twtype;
|
||||
if (v3d) {
|
||||
v3d->twtype = opdata->twtype;
|
||||
}
|
||||
G.moving = 0;
|
||||
}
|
||||
MEM_freeN(opdata);
|
||||
|
|
|
@ -673,7 +673,7 @@ void MESH_OT_dupli_extrude_cursor(wmOperatorType *ot)
|
|||
|
||||
/* api callbacks */
|
||||
ot->invoke = edbm_dupli_extrude_cursor_invoke;
|
||||
ot->poll = ED_operator_editmesh;
|
||||
ot->poll = ED_operator_editmesh_region_view3d;
|
||||
|
||||
/* flags */
|
||||
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
|
||||
|
@ -732,8 +732,17 @@ static int edbm_spin_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(e
|
|||
View3D *v3d = CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d = ED_view3d_context_rv3d(C);
|
||||
|
||||
RNA_float_set_array(op->ptr, "center", ED_view3d_cursor3d_get(scene, v3d));
|
||||
RNA_float_set_array(op->ptr, "axis", rv3d->viewinv[2]);
|
||||
PropertyRNA *prop;
|
||||
prop = RNA_struct_find_property(op->ptr, "center");
|
||||
if (!RNA_property_is_set(op->ptr, prop)) {
|
||||
RNA_property_float_set_array(op->ptr, prop, ED_view3d_cursor3d_get(scene, v3d));
|
||||
}
|
||||
if (rv3d) {
|
||||
prop = RNA_struct_find_property(op->ptr, "axis");
|
||||
if (!RNA_property_is_set(op->ptr, prop)) {
|
||||
RNA_property_float_set_array(op->ptr, prop, rv3d->viewinv[1]);
|
||||
}
|
||||
}
|
||||
|
||||
return edbm_spin_exec(C, op);
|
||||
}
|
||||
|
@ -859,8 +868,17 @@ static int edbm_screw_invoke(bContext *C, wmOperator *op, const wmEvent *UNUSED(
|
|||
View3D *v3d = CTX_wm_view3d(C);
|
||||
RegionView3D *rv3d = ED_view3d_context_rv3d(C);
|
||||
|
||||
RNA_float_set_array(op->ptr, "center", ED_view3d_cursor3d_get(scene, v3d));
|
||||
RNA_float_set_array(op->ptr, "axis", rv3d->viewinv[1]);
|
||||
PropertyRNA *prop;
|
||||
prop = RNA_struct_find_property(op->ptr, "center");
|
||||
if (!RNA_property_is_set(op->ptr, prop)) {
|
||||
RNA_property_float_set_array(op->ptr, prop, ED_view3d_cursor3d_get(scene, v3d));
|
||||
}
|
||||
if (rv3d) {
|
||||
prop = RNA_struct_find_property(op->ptr, "axis");
|
||||
if (!RNA_property_is_set(op->ptr, prop)) {
|
||||
RNA_property_float_set_array(op->ptr, prop, rv3d->viewinv[1]);
|
||||
}
|
||||
}
|
||||
|
||||
return edbm_screw_exec(C, op);
|
||||
}
|
||||
|
|
|
@ -143,8 +143,10 @@ static bool edbm_inset_init(bContext *C, wmOperator *op, const bool is_modal)
|
|||
opdata->mesh_backup = EDBM_redo_state_store(em);
|
||||
opdata->draw_handle_pixel = ED_region_draw_cb_activate(ar->type, ED_region_draw_mouse_line_cb, opdata->mcenter, REGION_DRAW_POST_PIXEL);
|
||||
G.moving = G_TRANSFORM_EDIT;
|
||||
opdata->twtype = v3d->twtype;
|
||||
v3d->twtype = 0;
|
||||
if (v3d) {
|
||||
opdata->twtype = v3d->twtype;
|
||||
v3d->twtype = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
@ -162,7 +164,9 @@ static void edbm_inset_exit(bContext *C, wmOperator *op)
|
|||
ARegion *ar = CTX_wm_region(C);
|
||||
EDBM_redo_state_free(&opdata->mesh_backup, NULL, false);
|
||||
ED_region_draw_cb_exit(ar->type, opdata->draw_handle_pixel);
|
||||
v3d->twtype = opdata->twtype;
|
||||
if (v3d) {
|
||||
v3d->twtype = opdata->twtype;
|
||||
}
|
||||
G.moving = 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue