SetPositionInVieport don't work correctly

I’m trying to make an inventory item management widget that should appear when you right click on an item. I create this widget and set the mouse position to the widget. The problem is that the widget does not appear near the cursor but somewhere below.
Code.
// EContext_Menu_Actions
//-------------------------------------------------------------------------------------
UENUM() enum class EContext_Menu_Actions: int32
{

  • Use,*
  • Drop,*
    };
    //-------------------------------------------------------------------------------------

// UContext_Menu_Widget
//-------------------------------------------------------------------------------------
UCLASS(Abstract) class UContext_Menu_Widget : public UUserWidget
{

  • GENERATED_BODY()*

public:

  • virtual void NativeConstruct();*
  • void Create_Action_Button(const EContext_Menu_Actions &action);*

protected:

  • UPROPERTY(meta = (BindWidget) ) UVerticalBox *Action_List; *

private:

  • UFUNCTION() void On_Action_Use();*
  • UFUNCTION() void On_Action_Drop();*
    };
    //-------------------------------------------------------------------------------------

// UContext_Menu_Widget
//------------------------------------------------------------------------------------------------------------
void UContext_Menu_Widget::NativeConstruct()
{
}
//------------------------------------------------------------------------------------------------------------
void UContext_Menu_Widget::Create_Action_Button(const EContext_Menu_Actions &action)
{

  • UButton new_button_widget = NewObject(this);

  • UTextBlock button_text_widget = NewObject(this);

  • switch(action)*

  • {*

  • case EContext_Menu_Actions::Use:*

  •   button_text_widget->SetText(FText::FromString(TEXT("USE") ) );*
    
  •   new_button_widget->OnClicked.AddDynamic(this, &UContext_Menu_Widget::On_Action_Use);*
    
  •   break;*
    
  • case EContext_Menu_Actions::Drop:*

  •   button_text_widget->SetText(FText::FromString(TEXT("Drop") ) );*
    
  •   new_button_widget->OnClicked.AddDynamic(this, &UContext_Menu_Widget::On_Action_Drop);*
    
  •   break;*
    
  • default:*

  •   AsToolkit::Throw();*
    
  • }*

  • new_button_widget->AddChild(button_text_widget);*

  • Action_List->AddChild(new_button_widget);*
    }
    //----------------------------------------------------------------------------------------------------
    void UContext_Menu_Widget::On_Action_Use()
    {

  • UE_LOG(LogTemp, Log, TEXT(“Use Item!!!”) );*
    }
    //----------------------------------------------------------------------------------------------------
    void UContext_Menu_Widget::On_Action_Drop()
    {

  • UE_LOG(LogTemp, Log, TEXT(“Drop Item!!!”) );*
    }
    //----------------------------------------------------------------------------------------------------

FReply UInventory_Item_Widget::NativeOnMouseButtonDown(const FGeometry &in_geometry, const FPointerEvent &in_mouse_event)
{

  • FVector2D screen_mouse_pos;*

  • FKey key = in_mouse_event.GetEffectingButton();*

  • FReply reply = Super::NativeOnMouseButtonDown(in_geometry, in_mouse_event);*

  • if (key == EKeys::LeftMouseButton)*

  •   return reply.Handled().DetectDrag(TakeWidget(), EKeys::LeftMouseButton);*
    
  • else*

  •   if (key == EKeys::RightMouseButton)*
    
  •   {*
    
  •   	screen_mouse_pos = in_mouse_event.GetScreenSpacePosition();*
    
  •   	Show_Item_Context_Menu(screen_mouse_pos);*
    
  •   	return reply.Handled();*
    
  •   }*
    
  • return reply.Unhandled();*
    }
    //----------------------------------------------------------------------------------------------------
    void UInventory_Item_Widget::Show_Item_Context_Menu(FVector2D &screen_pos)
    {

  • UContext_Menu_Widget context_menu_widget = CreateWidget<UContext_Menu_Widget>(GetWorld(), Context_Menu_Widget_Class);

  • if (context_menu_widget == 0)*

  •   AsToolkit::Throw();*
    
  • context_menu_widget->Create_Action_Button(EContext_Menu_Actions::Drop);*

  • context_menu_widget->Create_Action_Button(EContext_Menu_Actions::Use);*

  • context_menu_widget->AddToViewport();*

  • context_menu_widget->SetVisibility(ESlateVisibility::Visible);*

  • context_menu_widget->SetPositionInViewport(screen_pos);*
    }
    //----------------------------------------------------------------------------------------------------