Stabilizes the add/remove behavior of menubars by also tracking the modeless background control the menubars use for proper cleanup as well.

Also fixes an issue where the findMenu call wasn't properly translating the incoming string to StringTableEntry.
This commit is contained in:
Areloch 2018-02-08 16:00:11 -06:00
parent e4427b7654
commit f237caff5e
3 changed files with 19 additions and 10 deletions

View file

@ -133,7 +133,8 @@ GuiCanvas::GuiCanvas(): GuiControl(),
mLastRenderMs(0),
mPlatformWindow(NULL),
mDisplayWindow(true),
mMenuBarCtrl(NULL)
mMenuBarCtrl(nullptr),
mMenuBackground(nullptr)
{
setBounds(0, 0, 640, 480);
mAwake = true;
@ -296,8 +297,11 @@ void GuiCanvas::setMenuBar(SimObject *obj)
mMenuBarCtrl = dynamic_cast<GuiControl*>(obj);
//remove old menubar
if( oldMenuBar )
Parent::removeObject( oldMenuBar );
if (oldMenuBar)
{
Parent::removeObject(oldMenuBar);
Parent::removeObject(mMenuBackground); //also remove the modeless wrapper
}
// set new menubar
if (mMenuBarCtrl)
@ -312,14 +316,17 @@ void GuiCanvas::setMenuBar(SimObject *obj)
return;
}
GuiControl* menuBackground = new GuiControl();
menuBackground->registerObject();
if (mMenuBackground == nullptr)
{
mMenuBackground = new GuiControl();
mMenuBackground->registerObject();
menuBackground->setControlProfile(profile);
mMenuBackground->setControlProfile(profile);
}
menuBackground->addObject(mMenuBarCtrl);
mMenuBackground->addObject(mMenuBarCtrl);
Parent::addObject(menuBackground);
Parent::addObject(mMenuBackground);
}
// update window accelerator keys

View file

@ -198,6 +198,7 @@ protected:
static CanvasSizeChangeSignal smCanvasSizeChangeSignal;
GuiControl *mMenuBarCtrl;
GuiControl* mMenuBackground;
public:
DECLARE_CONOBJECT(GuiCanvas);

View file

@ -1519,9 +1519,10 @@ DefineConsoleMethod(GuiMenuBar, insert, void, (SimObject* pObject, S32 pos), (nu
object->insert(pObject, pos);
}
DefineConsoleMethod(GuiMenuBar, findMenu, S32, (StringTableEntry barTitle), (""), "(barTitle)")
DefineConsoleMethod(GuiMenuBar, findMenu, S32, (const char* barTitle), (""), "(barTitle)")
{
PopupMenu* menu = object->findMenu(barTitle);
StringTableEntry barTitleStr = StringTable->insert(barTitle);
PopupMenu* menu = object->findMenu(barTitleStr);
if (menu)
return menu->getId();