Browse Source

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.
Areloch 7 years ago
parent
commit
f237caff5e

+ 15 - 8
Engine/source/gui/core/guiCanvas.cpp

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

+ 1 - 0
Engine/source/gui/core/guiCanvas.h

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

+ 3 - 2
Engine/source/gui/editor/guiMenuBar.cpp

@@ -1519,9 +1519,10 @@ DefineConsoleMethod(GuiMenuBar, insert, void, (SimObject* pObject, S32 pos), (nu
    object->insert(pObject, pos);
    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)
    if (menu)
       return menu->getId();
       return menu->getId();