| @@ -1324,9 +1324,9 @@ public: | |||||
| if (auto keyCode = getKeyCodeFromEvent (ev)) | if (auto keyCode = getKeyCodeFromEvent (ev)) | ||||
| { | { | ||||
| if (isKeyDown) | if (isKeyDown) | ||||
| keysCurrentlyDown.addIfNotAlreadyThere (keyCode); | |||||
| keysCurrentlyDown.insert (keyCode); | |||||
| else | else | ||||
| keysCurrentlyDown.removeFirstMatchingValue (keyCode); | |||||
| keysCurrentlyDown.erase (keyCode); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1601,7 +1601,7 @@ public: | |||||
| uint32 lastRepaintTime; | uint32 lastRepaintTime; | ||||
| static ComponentPeer* currentlyFocusedPeer; | static ComponentPeer* currentlyFocusedPeer; | ||||
| static Array<int> keysCurrentlyDown; | |||||
| static std::set<int> keysCurrentlyDown; | |||||
| static int insideToFrontCall; | static int insideToFrontCall; | ||||
| static const SEL dismissModalsSelector; | static const SEL dismissModalsSelector; | ||||
| @@ -2556,20 +2556,25 @@ NSWindow* NSViewComponentPeer::createWindowInstance() | |||||
| //============================================================================== | //============================================================================== | ||||
| ComponentPeer* NSViewComponentPeer::currentlyFocusedPeer = nullptr; | ComponentPeer* NSViewComponentPeer::currentlyFocusedPeer = nullptr; | ||||
| Array<int> NSViewComponentPeer::keysCurrentlyDown; | |||||
| std::set<int> NSViewComponentPeer::keysCurrentlyDown; | |||||
| //============================================================================== | //============================================================================== | ||||
| bool KeyPress::isKeyCurrentlyDown (int keyCode) | 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; | return true; | ||||
| if (keyCode >= 'A' && keyCode <= 'Z' | if (keyCode >= 'A' && keyCode <= 'Z' | ||||
| && NSViewComponentPeer::keysCurrentlyDown.contains ((int) CharacterFunctions::toLowerCase ((juce_wchar) keyCode))) | |||||
| && isDown ((int) CharacterFunctions::toLowerCase ((juce_wchar) keyCode))) | |||||
| return true; | return true; | ||||
| if (keyCode >= 'a' && keyCode <= 'z' | if (keyCode >= 'a' && keyCode <= 'z' | ||||
| && NSViewComponentPeer::keysCurrentlyDown.contains ((int) CharacterFunctions::toUpperCase ((juce_wchar) keyCode))) | |||||
| && isDown ((int) CharacterFunctions::toUpperCase ((juce_wchar) keyCode))) | |||||
| return true; | return true; | ||||
| return false; | return false; | ||||