diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index ba4bfb25e5..8987a60f14 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -1324,9 +1324,9 @@ public: if (auto keyCode = getKeyCodeFromEvent (ev)) { if (isKeyDown) - keysCurrentlyDown.addIfNotAlreadyThere (keyCode); + keysCurrentlyDown.insert (keyCode); else - keysCurrentlyDown.removeFirstMatchingValue (keyCode); + keysCurrentlyDown.erase (keyCode); } } @@ -1601,7 +1601,7 @@ public: uint32 lastRepaintTime; static ComponentPeer* currentlyFocusedPeer; - static Array keysCurrentlyDown; + static std::set keysCurrentlyDown; static int insideToFrontCall; static const SEL dismissModalsSelector; @@ -2556,20 +2556,25 @@ NSWindow* NSViewComponentPeer::createWindowInstance() //============================================================================== ComponentPeer* NSViewComponentPeer::currentlyFocusedPeer = nullptr; -Array NSViewComponentPeer::keysCurrentlyDown; +std::set NSViewComponentPeer::keysCurrentlyDown; //============================================================================== bool KeyPress::isKeyCurrentlyDown (int keyCode) { - if (NSViewComponentPeer::keysCurrentlyDown.contains (keyCode)) + const auto isDown = [] (int k) + { + return NSViewComponentPeer::keysCurrentlyDown.find (k) != NSViewComponentPeer::keysCurrentlyDown.cend(); + }; + + if (isDown (keyCode)) return true; if (keyCode >= 'A' && keyCode <= 'Z' - && NSViewComponentPeer::keysCurrentlyDown.contains ((int) CharacterFunctions::toLowerCase ((juce_wchar) keyCode))) + && isDown ((int) CharacterFunctions::toLowerCase ((juce_wchar) keyCode))) return true; if (keyCode >= 'a' && keyCode <= 'z' - && NSViewComponentPeer::keysCurrentlyDown.contains ((int) CharacterFunctions::toUpperCase ((juce_wchar) keyCode))) + && isDown ((int) CharacterFunctions::toUpperCase ((juce_wchar) keyCode))) return true; return false;