Browse Source

Merge pull request #2198 from Areloch/MenuBarMoreFixup

Fixes up some menubar issues.
Areloch 7 years ago
parent
commit
cd5b0a0612

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

@@ -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

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

@@ -198,6 +198,7 @@ protected:
 	static CanvasSizeChangeSignal smCanvasSizeChangeSignal;
 
    GuiControl *mMenuBarCtrl;
+   GuiControl* mMenuBackground;
 
 public:
    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);
 }
 
-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();