Fix T48300: 3D view tools outside the 3d view crash
This commit is contained in:
		@@ -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;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user