Klaus Schmidinger wrote:
Am I missing something here?
This is mostly about plugins that expect their MainMenuAction to be called. A plugin may catch this call and display a message instead of the default menu. If the call is canceled, the message will unexpectedly appear the next time the user selects the main menu item. (As I said before, I would suggest signaling and timeouts anyway)
Things might get useful with another patch I wouldn't dare to suggest before 1.4 ;)
This is current code:
DELETE_MENU; if (cControl::Control()) cControl::Control()->Hide(); cPlugin *plugin = cPluginManager::GetPlugin(cRemote::GetPlugin()); if (plugin) { Menu = plugin->MainMenuAction(); if (Menu) Menu->Show(); }
This is my idea:
cPlugin *plugin = cPluginManager::GetPlugin(cRemote::GetPlugin()); if (plugin) { cMenu *NewMenu = plugin->MainMenuAction(); if (NewMenu) { DELETE_MENU; if (cControl::Control()) cControl::Control()->Hide(); Menu = NewMenu; Menu->Show(); } }
That way, the old OSD/menu will be destroyed only if MainMenuAction returned a new menu. If MainMenuAction returns NULL, nothing should happen. This would be a nice dirty trick to catch the main thread from a plugin. I don't know whether that change has bad side effects though.
Cheers,
Udo