I’m working on a plugin wrapper project, the idea is to add external connectivity to a regular plugin. My wrapper is implementing an AudioProcessor and an AudioProcessorListener to ensure tunneling between the host and the “normal” plugin. My wrapper’s editor is of course based on an AudioProcessorEditor and just contain a simple child component which is the AudioProcessorEditor related to the “normal” plugin. My editor is a little bit larger than the “normal” editor to display some extra information from the paint method.
Everything is working perfectly under Windows, but I have an issue related to the GUI on Mac with some AU plugins… and I’m completely lost since I’m definitely not used with things related to Cocoa/Carbon/ObjectiveC.
It is working with some plugins such as ACE, Addictive Drums… I can load my wrapper in any host and see the extended editor view including the regular plugin’s GUI. But with some other plugins (Sawer for example) I just get the wrapper’s editor GUI (the result of my editor’s paint). I ran the code step by step to check if some error occurs around JuceAUView during the plugin’s editor creation. Nope… It seems that the “child NSWindow in front of a HIView” (cf a comment in juce_AU_Wrapper.mm) is not visible. Something interesting: after activating the JUCE_ENABLE_REPAINT_DEBUGGING define, I succeeded accidentally to get the plugin’s GUI visible after a pause on a breakpoint. I say “accidentally” because I can’t reproduce it. But at this time, the plugin’s editor was visible on the screen, in front of my wrapper’s editor window, and unanchored from this window! I was able to move my editor’s window on the screen, but the plugin’s GUI didn’t move. But at this time, the editor was fully functional and replicating the parameter changes I was sending remotely from the network.
I’m using the latest Juce code, my wrapper pass successfully the auval check, and something important: I don’t have the issue if I load the plugin in a standalone application implementing the same code than my wrapper minus the plugin client part.
This issue is related to some plugins and occurs within a host execution context (I tried with several hosts such as AU Lab, Numerology, Mainstage, Garage Band…) It’s not due to some incompatibility since I got the GUI on screen once after activating repaint debugging (strange window behavior, but working). So I guess it is related to something from within the “normal” plugin, maybe the library used for the GUI (cocoa or carbon)? Is it something possible? Or maybe a timing issue? a threading issue? what else? any idea?