I feel like I'm close to understanding how the demo uses ApplicationCommandManager
void MainAppWindow::handleAsyncUpdate() { // This registers all of our commands with the command manager but has to be done after the window has // been created so we can find the number of rendering engines available ApplicationCommandManager& commandManager = MainAppWindow::getApplicationCommandManager(); commandManager.registerAllCommandsForTarget (contentComponent); commandManager.registerAllCommandsForTarget (JUCEApplication::getInstance()); }
So, I can place breakpoints at the start of
void getAllCommands (Array<CommandID>& commands) override {
(gets hit once), and
void getCommandInfo (CommandID commandID, ApplicationCommandInfo& result) override {
(gets hit about 20 times, obviously once for each command that getAllCommands returned)
So I understand 'commandManager.registerAllCommandsForTarget (contentComponent);'
But I don't get the next line: commandManager.registerAllCommandsForTarget (JUCEApplication::getInstance());
Why register the application itself to receive commands? JuceDemoApplication didn't override getAllCommands or getCommandInfo
I notice there is a default implementation in juce_application.cpp, which just creates a single "Quit" command.
So do we need to 'commandManager.registerAllCommandsForTarget (JUCEApplication::getInstance());' just for this to work? (Wouldn't it make more sense if the JUCEApplication constructor automatically did this?)
If I test the hypothesis by setting a breakpoint in:
// *** juce_application.cpp *** void JUCEApplication::getAllCommands (Array<CommandID>& commands) { commands.add (StandardApplicationCommandIDs::quit); }
I find to my surprise that this breakpoint doesn't get hit. Why not?