From 3f5770f4df9d1ab998b30f529441a07284660f85 Mon Sep 17 00:00:00 2001
From: Sebastian Pape <pape@vr.rwth-aachen.de>
Date: Fri, 17 Nov 2023 17:47:27 +0100
Subject: [PATCH] Fixing some input handling

---
 Source/DasherVR/Private/SDasherWidget.cpp | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/Source/DasherVR/Private/SDasherWidget.cpp b/Source/DasherVR/Private/SDasherWidget.cpp
index cdf2cbe..0aff028 100644
--- a/Source/DasherVR/Private/SDasherWidget.cpp
+++ b/Source/DasherVR/Private/SDasherWidget.cpp
@@ -38,13 +38,13 @@ FReply SDasherWidget::OnMouseButtonDown(const FGeometry& MyGeometry, const FPoin
 
 	FMouseState& MouseState = GetMouseState(MouseEvent.GetPointerIndex());
 
-	if(MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
+	if(MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton && !MouseState.PrimaryButtonPressed)
 	{
 		DasherMainInterface->KeyDown(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input);
 		MouseState.PrimaryButtonPressed = true;
 		MouseListeners.ExecuteIfBound(MouseEvent.GetPointerIndex(), MouseState.PrimaryButtonPressed);
 	}
-	else if(MouseEvent.GetEffectingButton() == EKeys::RightMouseButton)
+	else if(MouseEvent.GetEffectingButton() == EKeys::RightMouseButton && !MouseState.SecondaryButtonPressed)
 	{
 		DasherMainInterface->KeyDown(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Secondary_Input);
 		MouseState.SecondaryButtonPressed = true;
@@ -127,9 +127,10 @@ void SDasherWidget::OnMouseLeave(const FPointerEvent& MouseEvent)
 {
 	SWidget::OnMouseLeave(MouseEvent);
 
-    if (InputPaused) return;
-
 	FMouseState& MouseState = GetMouseState(MouseEvent.GetPointerIndex());
+	MouseState.CurrentlyHovering = false;
+
+	if (InputPaused) return;
 
 	if(MouseState.PrimaryButtonPressed)
 	{
@@ -144,8 +145,6 @@ void SDasherWidget::OnMouseLeave(const FPointerEvent& MouseEvent)
 		BoostListeners.ExecuteIfBound(MouseEvent.GetPointerIndex(), false);
 		MouseState.DisabledDueToMouseLeave = true;
 	}
-
-	MouseState.CurrentlyHovering = false;
 }
 
 FReply SDasherWidget::OnMouseButtonDoubleClick(const FGeometry& InMyGeometry, const FPointerEvent& InMouseEvent)
@@ -157,13 +156,13 @@ FReply SDasherWidget::OnMouseButtonUp(const FGeometry& MyGeometry, const FPointe
 {
 	FMouseState& MouseState = GetMouseState(MouseEvent.GetPointerIndex());
 
-	if(MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton)
+	if(MouseEvent.GetEffectingButton() == EKeys::LeftMouseButton && MouseState.PrimaryButtonPressed)
 	{
 		DasherMainInterface->KeyUp(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Primary_Input);
 		MouseState.PrimaryButtonPressed = false;
 		MouseListeners.ExecuteIfBound(MouseEvent.GetPointerIndex(), MouseState.PrimaryButtonPressed);
 	}
-	else if(MouseEvent.GetEffectingButton() == EKeys::RightMouseButton)
+	else if(MouseEvent.GetEffectingButton() == EKeys::RightMouseButton && MouseState.SecondaryButtonPressed)
 	{
 		DasherMainInterface->KeyUp(FDateTime::Now().GetSecond() + FDateTime::Now().GetMillisecond(), Dasher::Keys::Secondary_Input);
 		MouseState.SecondaryButtonPressed = false;
-- 
GitLab