diff --git a/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp b/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp index 3312f99a6c..5bb71d29bd 100644 --- a/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp +++ b/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp @@ -211,7 +211,8 @@ public: if (auto* current = getComponentUnderMouse()) { - registerMouseDown (screenPos, time, *current, buttonState); + registerMouseDown (screenPos, time, *current, buttonState, + inputType == MouseInputSource::InputSourceType::touch); sendMouseDown (*current, screenPos, time); } } @@ -522,23 +523,26 @@ private: Time time; ModifierKeys buttons; uint32 peerID = 0; + bool isTouch = false; bool canBePartOfMultipleClickWith (const RecentMouseDown& other, int maxTimeBetweenMs) const noexcept { return time - other.time < RelativeTime::milliseconds (maxTimeBetweenMs) - && std::abs (position.x - other.position.x) < 8 - && std::abs (position.y - other.position.y) < 8 + && std::abs (position.x - other.position.x) < getPositionToleranceForInputType() + && std::abs (position.y - other.position.y) < getPositionToleranceForInputType() && buttons == other.buttons && peerID == other.peerID; } + + int getPositionToleranceForInputType() const noexcept { return isTouch ? 25 : 8; } }; RecentMouseDown mouseDowns[4]; Time lastTime; bool mouseMovedSignificantlySincePressed = false; - void registerMouseDown (Point screenPos, Time time, - Component& component, const ModifierKeys modifiers) noexcept + void registerMouseDown (Point screenPos, Time time, Component& component, + const ModifierKeys modifiers, bool isTouchSource) noexcept { for (int i = numElementsInArray (mouseDowns); --i > 0;) mouseDowns[i] = mouseDowns[i - 1]; @@ -546,6 +550,7 @@ private: mouseDowns[0].position = screenPos; mouseDowns[0].time = time; mouseDowns[0].buttons = modifiers.withOnlyMouseButtons(); + mouseDowns[0].isTouch = isTouchSource; if (auto* peer = component.getPeer()) mouseDowns[0].peerID = peer->getUniqueID();