// headers
// ----------------------------------------------------------------------------
+#include "wx/defs.h"
+
#include "wx/menu.h"
#include "wx/menuitem.h"
#include "wx/utils.h"
// dynamic classes implementation
// ----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARY
- IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject)
-#endif //USE_SHARED_LIBRARY
+IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject)
// ----------------------------------------------------------------------------
// wxMenuItem
// ctor & dtor
// -----------
-wxMenuItem::wxMenuItem(wxMenu *pParentMenu, int id,
- const wxString& strName, const wxString& strHelp,
- bool bCheckable,
+wxMenuItem::wxMenuItem(wxMenu *pParentMenu,
+ int id,
+ const wxString& strName,
+ const wxString& strHelp,
+ wxItemKind kind,
wxMenu *pSubMenu)
+ : wxMenuItemBase(pParentMenu, id, strName, strHelp, kind, pSubMenu)
{
- wxASSERT_MSG( pParentMenu != NULL, wxT("menuitem should have a menu") );
-
- // common init
- m_parentMenu = pParentMenu;
- m_subMenu = pSubMenu;
- m_id = id;
- m_isEnabled = TRUE;
- m_isChecked = FALSE;
- m_help = strHelp;
- m_isCheckable = bCheckable;
- m_text = strName;
-
// Motif-specific
m_menuBar = NULL;
m_buttonWidget = (WXWidget) NULL;
void wxMenuItem::Enable(bool bDoEnable)
{
- if ( m_isChecked != bDoEnable )
+ if ( m_isEnabled != bDoEnable )
{
if ( !IsSubMenu() )
{
}
}
-wxString wxMenuItem::GetLabel() const
+/* static */
+wxString wxMenuItemBase::GetLabelFromText(const wxString& text)
{
- return wxStripMenuCodes(m_text);
+ return wxStripMenuCodes(text);
}
-
// ----------------------------------------------------------------------------
// wxMenuItemBase
// ----------------------------------------------------------------------------
int id,
const wxString& name,
const wxString& help,
- bool isCheckable,
+ wxItemKind kind,
wxMenu *subMenu)
{
- return new wxMenuItem(parentMenu, id, name, help, isCheckable, subMenu);
+ return new wxMenuItem(parentMenu, id, name, help, kind, subMenu);
}
// ----------------------------------------------------------------------------
item->GetMenuBar()->GetMenuBarFrame()->GetEventHandler()->ProcessEvent(commandEvent);
}
+ // this is the child of a popup menu
else if (item->GetTopMenu())
{
wxCommandEvent event (wxEVT_COMMAND_MENU_SELECTED, item->GetId());
event.SetInt( item->GetId() );
item->GetTopMenu()->ProcessCommand (event);
+
+ // Since PopupMenu under Motif stills grab right mouse
+ // button events after it was closed, we need to delete
+ // the associated widgets to allow next PopUpMenu to
+ // appear; this needs to be done there because doing it in
+ // a WorkProc as before may cause crashes if a menu item causes
+ // the parent window of the menu to be destroyed
+ item->GetTopMenu()->DestroyWidgetAndDetach();
}
}
}