diff --git a/modules/juce_gui_basics/components/juce_Desktop.cpp b/modules/juce_gui_basics/components/juce_Desktop.cpp index 9317213fe2..8fe1dafb83 100644 --- a/modules/juce_gui_basics/components/juce_Desktop.cpp +++ b/modules/juce_gui_basics/components/juce_Desktop.cpp @@ -183,6 +183,7 @@ MouseInputSource* Desktop::getMouseSource (int index) const noexcept MouseInputSource* Desktop::getDraggingMouseSource (int index) const noexcept { return mouseSources->getDraggingMouseSource (index); } MouseInputSource Desktop::getMainMouseSource() const noexcept { return MouseInputSource (mouseSources->sources.getUnchecked(0)); } void Desktop::beginDragAutoRepeat (int interval) { mouseSources->beginDragAutoRepeat (interval); } +void Desktop::clearAllTouchSources() { mouseSources->clearTouches(); } //============================================================================== void Desktop::addFocusChangeListener (FocusChangeListener* const listener) { focusListeners.add (listener); } diff --git a/modules/juce_gui_basics/components/juce_Desktop.h b/modules/juce_gui_basics/components/juce_Desktop.h index 3677263296..ec7367eb00 100644 --- a/modules/juce_gui_basics/components/juce_Desktop.h +++ b/modules/juce_gui_basics/components/juce_Desktop.h @@ -288,6 +288,8 @@ public: */ void beginDragAutoRepeat (int millisecondsBetweenCallbacks); + /** Removes all touch input sources from the mouse sources array. */ + void clearAllTouchSources(); //============================================================================== /** In a tablet device which can be turned around, this is used to inidicate the orientation. */ enum DisplayOrientation diff --git a/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp b/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp index 13b8d9d461..658d8caf95 100644 --- a/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp +++ b/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp @@ -684,6 +684,21 @@ struct MouseInputSource::SourceList : public Timer return nullptr; } + void clearTouches() + { + for (auto i = sourceArray.size(); --i >= 0;) + { + if (sourceArray.getUnchecked (i).getType() == MouseInputSource::InputSourceType::touch) + sourceArray.remove (i); + } + + for (auto i = sources.size(); --i >= 0;) + { + if (sources.getUnchecked (i)->inputType == MouseInputSource::InputSourceType::touch) + sources.remove (i); + } + } + int getNumDraggingMouseSources() const noexcept { int num = 0; diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index 206cb78977..5b65ba8e40 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -2326,6 +2326,7 @@ private: if (isCancel) { currentTouches.clear(); + Desktop::getInstance().clearAllTouchSources(); currentModifiers = currentModifiers.withoutMouseButtons(); }