diff --git a/src/gui/set/cards_panel.cpp b/src/gui/set/cards_panel.cpp index bb23cc85..2bda84c8 100644 --- a/src/gui/set/cards_panel.cpp +++ b/src/gui/set/cards_panel.cpp @@ -284,18 +284,38 @@ void CardsPanel::onUpdateUI(wxUpdateUIEvent& ev) { case ID_INSERT_SYMBOL: { wxMenu* menu = editor->getMenu(ID_INSERT_SYMBOL); ev.Enable(menu); + /* if (insertSymbolMenu->GetSubMenu() != menu || (menu && menu->GetParent() != menuFormat)) { // re-add the menu + fprintf(stderr,"insert1 %p %p\n", menuFormat,insertSymbolMenu);fflush(stderr); menuFormat->Remove(ID_INSERT_SYMBOL); + fprintf(stderr,"insert2\n");fflush(stderr); insertSymbolMenu->SetSubMenu(menu); + fprintf(stderr,"insert3\n");fflush(stderr); menuFormat->Append(insertSymbolMenu); - } + fprintf(stderr,"insert4\n");fflush(stderr); + }*/ break; } #endif } } +void CardsPanel::onMenuOpen(wxMenuEvent& ev) { + if (ev.GetMenu() != menuFormat) return; + wxMenu* menu = editor->getMenu(ID_INSERT_SYMBOL); + if (insertSymbolMenu->GetSubMenu() != menu || (menu && menu->GetParent() != menuFormat)) { + // re-add the menu + fprintf(stderr,"insert1 %p %p\n", menuFormat,insertSymbolMenu);fflush(stderr); + menuFormat->Remove(ID_INSERT_SYMBOL); + fprintf(stderr,"insert2\n");fflush(stderr); + insertSymbolMenu->SetSubMenu(menu); + fprintf(stderr,"insert3\n");fflush(stderr); + menuFormat->Append(insertSymbolMenu); + fprintf(stderr,"insert4\n");fflush(stderr); + } +} + void CardsPanel::onCommand(int id) { switch (id) { case ID_CARD_PREV: diff --git a/src/gui/set/cards_panel.hpp b/src/gui/set/cards_panel.hpp index 48446a3a..9dbd1b10 100644 --- a/src/gui/set/cards_panel.hpp +++ b/src/gui/set/cards_panel.hpp @@ -37,6 +37,7 @@ class CardsPanel : public SetWindowPanel { virtual void destroyUI(wxToolBar* tb, wxMenuBar* mb); virtual void onUpdateUI(wxUpdateUIEvent&); virtual void onCommand(int id); + virtual void onMenuOpen(wxMenuEvent&); // --------------------------------------------------- : Actions diff --git a/src/gui/set/panel.hpp b/src/gui/set/panel.hpp index 9bf95fc7..0f3706ce 100644 --- a/src/gui/set/panel.hpp +++ b/src/gui/set/panel.hpp @@ -44,6 +44,9 @@ class SetWindowPanel : public wxPanel, public SetView { /// Respond to one of those extra menu/tool items virtual void onCommand(int id) {} + /// Called before a menu is opened in the parent window + virtual void onMenuOpen(wxMenuEvent&) {} + // --------------------------------------------------- : Actions/Events /// Should return true if this panel wants to get focus to show an action diff --git a/src/gui/set/window.cpp b/src/gui/set/window.cpp index 1703569e..6b94a5bc 100644 --- a/src/gui/set/window.cpp +++ b/src/gui/set/window.cpp @@ -813,6 +813,11 @@ void SetWindow::onChildMenu(wxCommandEvent& ev) { current_panel->onCommand(ev.GetId()); } +void SetWindow::onMenuOpen(wxMenuEvent& ev) { + wxFrame::OnMenuOpen(ev); + current_panel->onMenuOpen(ev); +} + void SetWindow::onIdle(wxIdleEvent& ev) { // Stuff that must be done in the main thread show_update_dialog(this); @@ -856,6 +861,7 @@ BEGIN_EVENT_TABLE(SetWindow, wxFrame) EVT_MENU (ID_HELP_INDEX, SetWindow::onHelpIndex) EVT_MENU (ID_HELP_WEBSITE, SetWindow::onHelpWebsite) EVT_MENU (ID_HELP_ABOUT, SetWindow::onHelpAbout) + EVT_MENU_OPEN ( SetWindow::onMenuOpen) EVT_TOOL_RANGE (ID_CHILD_MIN, ID_CHILD_MAX, SetWindow::onChildMenu) EVT_COMMAND_RANGE (ID_CHILD_MIN, ID_CHILD_MAX, wxEVT_COMMAND_BUTTON_CLICKED, SetWindow::onChildMenu) EVT_COMMAND_RANGE (ID_CHILD_MIN, ID_CHILD_MAX, wxEVT_COMMAND_SPINCTRL_UPDATED, SetWindow::onChildMenu) diff --git a/src/gui/set/window.hpp b/src/gui/set/window.hpp index 6b3eb23a..8eeb9461 100644 --- a/src/gui/set/window.hpp +++ b/src/gui/set/window.hpp @@ -165,6 +165,7 @@ class SetWindow : public wxFrame, public SetView { // --------------------------------------------------- : Window events - other void onChildMenu (wxCommandEvent&); + void onMenuOpen (wxMenuEvent&); void onIdle (wxIdleEvent&);