From 5818b89b047c55ae622b41b50fdcc44e7351cd44 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 1 Oct 2013 19:54:35 +0100 Subject: [PATCH] Altered the method by which plugin UIs re-post carbon keyboard events. --- modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm | 2 +- .../RTAS/juce_RTAS_MacUtilities.mm | 2 +- modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm | 2 +- .../utility/juce_IncludeModuleHeaders.h | 5 +++++ modules/juce_events/native/juce_mac_MessageManager.mm | 8 ++++++++ 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index 076a57e592..053ddf15a4 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -1479,7 +1479,7 @@ private: lastEventTime = eventTime; [[hostWindow parentWindow] makeKeyWindow]; - [NSApp postEvent: [NSApp currentEvent] atStart: YES]; + repostCurrentNSEvent(); } } diff --git a/modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm b/modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm index 9cb42bc6b7..22c35754a9 100644 --- a/modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm +++ b/modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm @@ -162,7 +162,7 @@ void forwardCurrentKeyEventToHostWindow() if (! isJuceWindow (w)) { ActivateWindow (w, true); - [NSApp postEvent: [NSApp currentEvent] atStart: YES]; + repostCurrentNSEvent(); } } diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm index 57abfb8e5f..a9dfca3911 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm @@ -254,7 +254,7 @@ bool forwardCurrentKeyEventToHost (Component* comp) #else NSWindow* win = [(NSView*) comp->getWindowHandle() window]; [[win parentWindow] makeKeyWindow]; - [NSApp postEvent: [NSApp currentEvent] atStart: YES]; + repostCurrentNSEvent(); return true; #endif } diff --git a/modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h b/modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h index 69b15589af..8e62206b97 100644 --- a/modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h +++ b/modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h @@ -29,6 +29,11 @@ using namespace juce; #if JUCE_MAC && ! DOXYGEN #define Point juce::Point #define Component juce::Component + + namespace juce + { + void repostCurrentNSEvent(); + } #endif extern AudioProcessor* JUCE_CALLTYPE createPluginFilterOfType (AudioProcessor::WrapperType); diff --git a/modules/juce_events/native/juce_mac_MessageManager.mm b/modules/juce_events/native/juce_mac_MessageManager.mm index 29336640f5..f10f8aaa92 100644 --- a/modules/juce_events/native/juce_mac_MessageManager.mm +++ b/modules/juce_events/native/juce_mac_MessageManager.mm @@ -328,3 +328,11 @@ void MessageManager::broadcastMessage (const String& message) object: nil userInfo: info]; } + +// Special function used by some plugin classes to re-post carbon events +void repostCurrentNSEvent(); +void repostCurrentNSEvent() +{ + NSEvent* e = [NSApp currentEvent]; + [[NSOperationQueue mainQueue] addOperationWithBlock: ^{ [NSApp postEvent: e atStart: YES]; }]; +}