BMenu: Automatically invoke _Install and _Uninstall in Attached/Detached.
This way, we can't inadvertently end up in a state where the window is deleted but some things are still attached to it. Fixes #19662. Change-Id: I3ce7b5ccffc8cf12670209f3023613b32e31c41c Reviewed-on: https://review.haiku-os.org/c/haiku/+/9437 Reviewed-by: waddlesplash <[email protected]> Reviewed-by: John Scipione <[email protected]>
This commit is contained in:
committed by
waddlesplash
parent
45f3d65457
commit
987a07492e
@@ -415,6 +415,9 @@ BMenu::AttachedToWindow()
|
|||||||
_GetOptionKey(sOptionKey);
|
_GetOptionKey(sOptionKey);
|
||||||
_GetMenuKey(sMenuKey);
|
_GetMenuKey(sMenuKey);
|
||||||
|
|
||||||
|
if (Superitem() == NULL)
|
||||||
|
_Install(Window());
|
||||||
|
|
||||||
// The menu should be added to the menu hierarchy and made visible if:
|
// The menu should be added to the menu hierarchy and made visible if:
|
||||||
// * the mouse is over the menu,
|
// * the mouse is over the menu,
|
||||||
// * the user has requested the menu via the keyboard.
|
// * the user has requested the menu via the keyboard.
|
||||||
@@ -436,6 +439,9 @@ void
|
|||||||
BMenu::DetachedFromWindow()
|
BMenu::DetachedFromWindow()
|
||||||
{
|
{
|
||||||
BView::DetachedFromWindow();
|
BView::DetachedFromWindow();
|
||||||
|
|
||||||
|
if (Superitem() == NULL)
|
||||||
|
_Uninstall();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1383,7 +1389,6 @@ BMenu::Show()
|
|||||||
void
|
void
|
||||||
BMenu::Show(bool selectFirst)
|
BMenu::Show(bool selectFirst)
|
||||||
{
|
{
|
||||||
_Install(NULL);
|
|
||||||
_Show(selectFirst);
|
_Show(selectFirst);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1391,7 +1396,6 @@ BMenu::Show(bool selectFirst)
|
|||||||
void
|
void
|
||||||
BMenu::Hide()
|
BMenu::Hide()
|
||||||
{
|
{
|
||||||
_Uninstall();
|
|
||||||
_Hide();
|
_Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1648,9 +1652,6 @@ BMenu::_Show(bool selectFirstItem, bool keyDown)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ourWindow)
|
|
||||||
_Install(window);
|
|
||||||
|
|
||||||
_UpdateWindowViewSize(true);
|
_UpdateWindowViewSize(true);
|
||||||
window->Show();
|
window->Show();
|
||||||
|
|
||||||
|
|||||||
@@ -140,7 +140,6 @@ BMenuBar::Archive(BMessage* data, bool deep) const
|
|||||||
void
|
void
|
||||||
BMenuBar::AttachedToWindow()
|
BMenuBar::AttachedToWindow()
|
||||||
{
|
{
|
||||||
_Install(Window());
|
|
||||||
Window()->SetKeyMenuBar(this);
|
Window()->SetKeyMenuBar(this);
|
||||||
|
|
||||||
BMenu::AttachedToWindow();
|
BMenu::AttachedToWindow();
|
||||||
|
|||||||
Reference in New Issue
Block a user