From 03642632f55f1d265bf0d02f8e2a430316a96426 Mon Sep 17 00:00:00 2001 From: minebill Date: Sun, 8 Oct 2023 21:45:34 +0300 Subject: [PATCH] Use a maximum distance between clicks, when detecting a double click --- Source/Engine/Platform/Linux/LinuxWindow.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Platform/Linux/LinuxWindow.cpp b/Source/Engine/Platform/Linux/LinuxWindow.cpp index e6fe63f9c..5f8a471b8 100644 --- a/Source/Engine/Platform/Linux/LinuxWindow.cpp +++ b/Source/Engine/Platform/Linux/LinuxWindow.cpp @@ -41,8 +41,10 @@ extern Dictionary KeyNameMap; extern Array KeyCodeMap; extern X11::Cursor Cursors[(int32)CursorType::MAX]; -static const uint32 MouseDoubleClickTime = 500; +static constexpr uint32 MouseDoubleClickTime = 500; +static constexpr uint32 MaxDoubleClickDistanceSquared = 10; static X11::Time MouseLastButtonPressTime = 0; +static Float2 OldMouseClickPosition; LinuxWindow::LinuxWindow(const CreateWindowSettings& settings) : WindowBase(settings) @@ -597,15 +599,19 @@ void LinuxWindow::OnButtonPress(void* event) // Handle double-click if (buttonEvent->button == Button1) { - if (buttonEvent->time < (MouseLastButtonPressTime + MouseDoubleClickTime)) + if ( + buttonEvent->time < (MouseLastButtonPressTime + MouseDoubleClickTime) && + Float2::DistanceSquared(mousePos, OldMouseClickPosition) < MaxDoubleClickDistanceSquared) { Input::Mouse->OnMouseDoubleClick(ClientToScreen(mousePos), mouseButton, this); MouseLastButtonPressTime = 0; + OldMouseClickPosition = mousePos; return; } else { MouseLastButtonPressTime = buttonEvent->time; + OldMouseClickPosition = mousePos; } }