From 081b1ff21618854b3592ad388e06f4683937bd28 Mon Sep 17 00:00:00 2001 From: reuk Date: Wed, 29 Mar 2023 19:33:53 +0100 Subject: [PATCH] PopupMenu: Avoid dismissing menu in response to mouse events over the menu In cases where no JUCE component had keyboard focus, clicking a menu item would cause the menu to be dismissed instead of triggering the item's action. --- modules/juce_gui_basics/menus/juce_PopupMenu.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 913f0d8683..952608e765 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -1407,7 +1407,9 @@ private: && (ModifierKeys::currentModifiers.isAnyMouseButtonDown() || ComponentPeer::getCurrentModifiersRealtime().isAnyMouseButtonDown()); - if (! window.doesAnyJuceCompHaveFocus()) + const auto reallyContained = window.reallyContains (localMousePos, true); + + if (! window.doesAnyJuceCompHaveFocus() && ! reallyContained) { if (timeNow > window.lastFocusedTime + 10) { @@ -1416,10 +1418,9 @@ private: // Note: This object may have been deleted by the previous call. } } - else if (wasDown && timeNow > window.windowCreationTime + 250 - && ! (isDown || overScrollArea)) + else if (wasDown && timeNow > window.windowCreationTime + 250 && ! isDown && ! overScrollArea) { - if (window.reallyContains (localMousePos, true)) + if (reallyContained) window.triggerCurrentlyHighlightedItem(); else if ((window.hasBeenOver || ! window.dismissOnMouseUp) && ! isOverAny) window.dismissMenu (nullptr);