Bladeren bron

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 jaren geleden
bovenliggende
commit
f237caff5e
3 gewijzigde bestanden met toevoegingen van 19 en 10 verwijderingen
  1. 15 8
      Engine/source/gui/core/guiCanvas.cpp
  2. 1 0
      Engine/source/gui/core/guiCanvas.h
  3. 3 2
      Engine/source/gui/editor/guiMenuBar.cpp

+ 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();