diff --git a/include/eepp/ui/uinode.hpp b/include/eepp/ui/uinode.hpp index 925fc8dbd..eebdd7634 100644 --- a/include/eepp/ui/uinode.hpp +++ b/include/eepp/ui/uinode.hpp @@ -22,8 +22,6 @@ using namespace EE::Scene; namespace EE { namespace UI { class UITheme; -class UISkin; -class UISkinState; class EE_API UINode : public Node { public: diff --git a/include/eepp/ui/uiwinmenu.hpp b/include/eepp/ui/uiwinmenu.hpp index 0e9a0f20a..22f8cd248 100644 --- a/include/eepp/ui/uiwinmenu.hpp +++ b/include/eepp/ui/uiwinmenu.hpp @@ -82,6 +82,8 @@ class EE_API UIWinMenu : public UIWidget { void onMenuFocusLoss( const Event * Event ); + void onHideByClick( const Event * Event ); + void unselectButtons(); void destroyMenues(); diff --git a/src/eepp/ui/uilistboxitem.cpp b/src/eepp/ui/uilistboxitem.cpp index 38aea2da2..ebe5c7164 100644 --- a/src/eepp/ui/uilistboxitem.cpp +++ b/src/eepp/ui/uilistboxitem.cpp @@ -1,5 +1,6 @@ #include #include +#include namespace EE { namespace UI { diff --git a/src/eepp/ui/uimenu.cpp b/src/eepp/ui/uimenu.cpp index e88a8c8d0..0a947f119 100644 --- a/src/eepp/ui/uimenu.cpp +++ b/src/eepp/ui/uimenu.cpp @@ -287,6 +287,8 @@ Uint32 UIMenu::onMessage( const NodeMessage * Msg ) { Node * FocusCtrl = getEventDispatcher()->getFocusControl(); if ( this != FocusCtrl && !isParentOf( FocusCtrl ) && !isSubMenu( FocusCtrl ) ) { + mClickHide = true; + onWidgetFocusLoss(); } diff --git a/src/eepp/ui/uimenusubmenu.cpp b/src/eepp/ui/uimenusubmenu.cpp index 8da347b98..8c17ff938 100644 --- a/src/eepp/ui/uimenusubmenu.cpp +++ b/src/eepp/ui/uimenusubmenu.cpp @@ -138,8 +138,9 @@ void UIMenuSubMenu::onSubMenuFocusLoss( const Event * ) { } if ( mSubMenu->mClickHide ) { - reinterpret_cast( getParent() )->hide(); - + UIMenu * parentMenu = reinterpret_cast( getParent() ); + parentMenu->sendCommonEvent( Event::OnHideByClick ); + parentMenu->hide(); mSubMenu->mClickHide = false; } } @@ -148,6 +149,7 @@ void UIMenuSubMenu::onHideByClick( const Event * ) { UIMenu * tMenu = reinterpret_cast( getParent() ); tMenu->mClickHide = true; + tMenu->sendCommonEvent( Event::OnHideByClick ); tMenu->hide(); } diff --git a/src/eepp/ui/uiwinmenu.cpp b/src/eepp/ui/uiwinmenu.cpp index d807d4e80..016440c2b 100644 --- a/src/eepp/ui/uiwinmenu.cpp +++ b/src/eepp/ui/uiwinmenu.cpp @@ -51,6 +51,7 @@ void UIWinMenu::addMenuButton( const String& ButtonText, UIPopUpMenu * Menu ) { Menu->setEnabled( false ); Menu->setParent( getWindowContainer() ); Menu->addEventListener( Event::OnWidgetFocusLoss, cb::Make1( this, &UIWinMenu::onMenuFocusLoss ) ); + Menu->addEventListener( Event::OnHideByClick, cb::Make1( this, &UIWinMenu::onHideByClick ) ); mButtons.push_back( std::make_pair( Button, Menu ) ); @@ -240,10 +241,17 @@ Uint32 UIWinMenu::onMessage( const NodeMessage * Msg ) { } } else { if ( Msg->getFlags() & EE_BUTTON_LMASK ) { - mCurrentMenu = tpop; + if ( mCurrentMenu != tpop ) { + mCurrentMenu = tpop; - tbut->select(); - tpop->show(); + tbut->select(); + tpop->show(); + } else { + mCurrentMenu = NULL; + + tbut->unselect(); + tpop->hide(); + } } } @@ -321,6 +329,10 @@ void UIWinMenu::onMenuFocusLoss( const Event * ) { } } +void UIWinMenu::onHideByClick( const Event * ) { + onWidgetFocusLoss(); +} + void UIWinMenu::onWidgetFocusLoss() { UIWidget::onWidgetFocusLoss();