mirror of
https://github.com/SpartanJ/eepp.git
synced 2026-07-16 15:52:55 +03:00
Fix crash when clicked a menu sub-menu button form the code editor context menu.
This commit is contained in:
@@ -34,10 +34,11 @@ class EE_API UIMenuSubMenu : public UIMenuItem {
|
||||
virtual UIWidget* getExtraInnerWidget() const;
|
||||
|
||||
protected:
|
||||
UIMenu* mSubMenu;
|
||||
UIWidget* mArrow;
|
||||
UIMenu* mSubMenu{ nullptr };
|
||||
UIWidget* mArrow{ nullptr };
|
||||
Time mMaxTime;
|
||||
Action* mCurWait;
|
||||
Action* mCurWait{ nullptr };
|
||||
Uint32 mSubMenuCloseCb{ 0 };
|
||||
|
||||
UIMenuSubMenu();
|
||||
|
||||
@@ -55,6 +56,8 @@ class EE_API UIMenuSubMenu : public UIMenuItem {
|
||||
|
||||
virtual void onAlphaChange();
|
||||
|
||||
virtual void onClose();
|
||||
|
||||
void onSubMenuFocusLoss( const Event* Event );
|
||||
};
|
||||
|
||||
|
||||
@@ -1481,8 +1481,10 @@ bool UICodeEditor::onCreateContextMenu( const Vector2i& position, const Uint32&
|
||||
UICodeEditor* editor = this;
|
||||
const auto registerMenu = [editor, this]( UIMenu* menu ) {
|
||||
menu->on( Event::OnItemClicked, [this, menu, editor]( const Event* event ) {
|
||||
if ( !event->getNode()->isType( UI_TYPE_MENUITEM ) )
|
||||
if ( !event->getNode()->isType( UI_TYPE_MENUITEM ) ||
|
||||
event->getNode()->isType( UI_TYPE_MENUSUBMENU ) ) {
|
||||
return;
|
||||
}
|
||||
UIMenuItem* item = event->getNode()->asType<UIMenuItem>();
|
||||
std::string txt( item->getId() );
|
||||
mDoc->execute( txt, editor );
|
||||
|
||||
@@ -25,7 +25,13 @@ UIMenuSubMenu::UIMenuSubMenu() :
|
||||
mArrow->setEnabled( false );
|
||||
}
|
||||
|
||||
UIMenuSubMenu::~UIMenuSubMenu() {}
|
||||
UIMenuSubMenu::~UIMenuSubMenu() {
|
||||
if ( mSubMenu ) {
|
||||
if ( mSubMenuCloseCb )
|
||||
mSubMenu->removeEventListener( mSubMenuCloseCb );
|
||||
mSubMenu->setOwnerNode( nullptr );
|
||||
}
|
||||
}
|
||||
|
||||
Uint32 UIMenuSubMenu::getType() const {
|
||||
return UI_TYPE_MENUSUBMENU;
|
||||
@@ -77,11 +83,15 @@ UIWidget* UIMenuSubMenu::getExtraInnerWidget() const {
|
||||
void UIMenuSubMenu::setSubMenu( UIMenu* subMenu ) {
|
||||
if ( nullptr != mSubMenu && mSubMenu != subMenu ) {
|
||||
getActionManager()->removeActionsByTagFromTarget( this, String::hash( "subMenu" ) );
|
||||
if ( mSubMenuCloseCb )
|
||||
mSubMenu->removeEventListener( mSubMenuCloseCb );
|
||||
mSubMenu->setOwnerNode( nullptr );
|
||||
}
|
||||
mSubMenu = subMenu;
|
||||
if ( nullptr != mSubMenu )
|
||||
if ( nullptr != mSubMenu ) {
|
||||
mSubMenu->setOwnerNode( this );
|
||||
mSubMenuCloseCb = mSubMenu->on( Event::OnClose, [this]( auto ) { mSubMenu = nullptr; } );
|
||||
}
|
||||
}
|
||||
|
||||
UIMenu* UIMenuSubMenu::getSubMenu() const {
|
||||
@@ -148,4 +158,9 @@ void UIMenuSubMenu::setMouseOverTimeShowMenu( const Time& maxTime ) {
|
||||
mMaxTime = maxTime;
|
||||
}
|
||||
|
||||
void UIMenuSubMenu::onClose() {
|
||||
if ( mSubMenu )
|
||||
mSubMenu->setOwnerNode( nullptr );
|
||||
}
|
||||
|
||||
}} // namespace EE::UI
|
||||
|
||||
Reference in New Issue
Block a user