Combo box UI item anomaly on iOS AUv3

Hi,

I am working on an iOS app and I have discovered that the Juce combo box menus won’t open on AUM when press on them, this is eventually the AUv3 version of the app. They work OK on the standalone version. Any experiences about this ? What would be a solution / replacement ?

1 Like

I have tried to put a combo box on the AUv3SynthPlugin demo of Juce and this error pops up on Xcode output window, when I try to open the ComboBox on AUM.

This is OSX Catalina, Xcode 11.6, iOS13, and JUCE 5.4.4

AUv3SynthPlugin[5401:2259218] [Window] Manually adding the rootViewController’s view to the view hierarchy is no longer supported. Please allow UIWindow to add the rootViewController’s view to the view hierarchy itself.

You can’t open desktop windows in an AUv3 plug-in - see this post:

As for the error shown in the console, this is unrelated but has been fixed on develop.

1 Like

do we have a replacement to the Combobox UI element of JUCE for AUv3 then ? Basically will Combobox UI work on AUv3 with this develop version as it works on standlalone ? What is the fix here on the licenced users level ( not the Juce developer level ) ?

Did you read the linked post? There is a solution for AUv3 plug-ins in there that uses a custom LookAndFeel which overrides the getParentComponentForMenuOptions() method.

What do you mean by “licensed”/“JUCE developer” levels?

Hi Ed,

I assume that you are a member of JUCE developer team. If not, I am sorry in advance.

ComboBox UI item is a very fundamental element in JUCE UI category. My apps use it a lot and in different designs and I assume I am not alone.

I have announced that ComboBox does not work on AUv3 ( was not even sure if it was an issue of AUM or not ) where AUv3 is one of the product destinations of the JUCE multiplatfrom audio develpment framework.

You have replied this as I could not open desktop windows on AUv3 and popup a menu ? Well, I am trying to use the ComboBox UI item as I do use it on OSX, Windows and I see that there is no problem with iOS standalone neither.

Is there any JUCE documentation that I cannot use the ComboBox as it is on AUv3 ? Is there any replacement for this important UI item ? Should we find a way ourselves ?

And for your question regarding licenced user / JUCE developer : I am licenced user of JUCE , and am a professional. But I am not developing JUCE. I just expect that the responsibles take care of this multi platform framework and all these functionalities and methods keep working, especially for the most basic elements. It is not really anything special. My work will go on without any problem if these methods keep working , I will keep paying JUCE and it is as easy as it can be.

Sure, JUCE is a multiplatform framework and therefore it tries to be the lowest common denominator for all of the platforms and plug-in APIs that it supports. AUv3 plug-ins have some quirks that don’t quite fit in nicely with the general “JUCE-y” API and one of these is that since AUv3s run in a separate, sandboxed process to the one that the actual plug-in window resides, opening “desktop” windows (like the PopupMenu that a ComboBox shows when it is opened) isn’t going to work.

One way of resolving this is to redesign your UI to only use sub-components of your editor window but, like you said, that would involve a lot of work on your end if you have an existing app which uses ComboBox in many places. Therefore there is a method in JUCE to allow you to open PopupMenus as sub-components of a parent component instead of adding them directly to the desktop: overriding PopupMenu::LookAndFeelMethods::getParentComponentForMenuOptions() in a custom LookAndFeel class in your application, and applying this LookAndFeel to the app. Fabian added a nice piece of example code in the post I linked earlier which shows how to do this in a portable way which will use the default behaviour when not running as an AUv3 plug-in.

2 Likes

well, that is wonderful news. Let’s get around this with the least amount of loss and work !

many thanks

OK, it works. So I have to put that method below in all my LookAndFeel subclasses ?
How about the future version of Juce ? I guess I will let know by then anyways.

cheers,

Component* getParentComponentForMenuOptions (const PopupMenu::Options& options) override
{
#if JUCE_IOS
if (PluginHostType::getPluginLoadedAs() == AudioProcessor::wrapperType_AudioUnitv3)
{
if (options.getParentComponent() == nullptr && options.getTargetComponent() != nullptr)
return options.getTargetComponent()->getTopLevelComponent();
}
#endif

       return LookAndFeel_V2::getParentComponentForMenuOptions (options);
     }
1 Like