Merge branch 'menu_highlight_event' of https://github.com/imciner2/wxWidgets

Set menu object for the menu highlight events too.

See https://github.com/wxWidgets/wxWidgets/pull/1506
This commit is contained in:
Vadim Zeitlin
2019-08-27 13:13:23 +02:00
6 changed files with 30 additions and 24 deletions

View File

@@ -4501,13 +4501,16 @@ public:
wxMenuEvent(wxEventType type = wxEVT_NULL, int id = 0, wxMenu* menu = NULL);
/**
Returns the menu which is being opened or closed.
This method can only be used with the @c OPEN and @c CLOSE events.
Returns the menu which is being opened or closed, or the menu containing
the highlighted item.
Note that the returned value can be @NULL if the menu being opened
doesn't have a corresponding wxMenu, e.g. this happens when opening the
system menu in wxMSW port.
@remarks Since 3.1.3 this function can be used with @c OPEN, @c CLOSE
and @c HIGHLIGHT events. Before 3.1.3, this method can only be used
with the @c OPEN and @c CLOSE events.
*/
wxMenu* GetMenu() const;

View File

@@ -1235,19 +1235,21 @@ void MyFrame::LogMenuOpenCloseOrHighlight(const wxMenuEvent& event, const wxStri
if ( event.GetEventType() == wxEVT_MENU_HIGHLIGHT )
{
msg << " (id=" << event.GetId() << ")";
}
else // wxEVT_MENU_{OPEN,CLOSE}
{
wxMenu* const menu = event.GetMenu();
if ( menu )
{
msg << " (menu with title \"" << menu->GetTitle() << "\")";
msg << " (id=" << event.GetId() << " in ";
}
else
{
msg << " (no menu)";
msg << " (";
}
wxMenu* const menu = event.GetMenu();
if ( menu )
{
msg << "menu with title \"" << menu->GetTitle() << "\")";
}
else
{
msg << "no menu provided)";
}
msg << ".";

View File

@@ -560,7 +560,7 @@ static void menuitem_select(GtkWidget*, wxMenuItem* item)
if (!item->IsEnabled())
return;
wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, item->GetId());
wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, item->GetId(), item->GetMenu());
DoCommonMenuCallbackCode(item->GetMenu(), event);
}
}
@@ -575,7 +575,7 @@ static void menuitem_deselect(GtkWidget*, wxMenuItem* item)
if (!item->IsEnabled())
return;
wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, -1 );
wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, -1, item->GetMenu());
DoCommonMenuCallbackCode(item->GetMenu(), event);
}
}

View File

@@ -645,7 +645,7 @@ static void gtk_menu_hilight_callback( GtkWidget *widget, wxMenu *menu )
if (!menu->IsEnabled(id))
return;
wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, id );
wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, id, menu );
event.SetEventObject( menu );
wxEvtHandler* handler = menu->GetEventHandler();
@@ -673,7 +673,7 @@ static void gtk_menu_nolight_callback( GtkWidget *widget, wxMenu *menu )
if (!menu->IsEnabled(id))
return;
wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, -1 );
wxMenuEvent event( wxEVT_MENU_HIGHLIGHT, -1, menu );
event.SetEventObject( menu );
wxEvtHandler* handler = menu->GetEventHandler();

View File

@@ -385,7 +385,7 @@ void wxMenuItemArmCallback (Widget WXUNUSED(w), XtPointer clientData,
{
if (item->GetMenuBar() && item->GetMenuBar()->GetMenuBarFrame())
{
wxMenuEvent menuEvent(wxEVT_MENU_HIGHLIGHT, item->GetId());
wxMenuEvent menuEvent(wxEVT_MENU_HIGHLIGHT, item->GetId(), item->GetMenu());
menuEvent.SetEventObject(item->GetMenuBar()->GetMenuBarFrame());
item->GetMenuBar()->GetMenuBarFrame()
@@ -405,7 +405,7 @@ wxMenuItemDisarmCallback (Widget WXUNUSED(w), XtPointer clientData,
{
// TODO: not sure this is correct, since -1 means something
// special to event system
wxMenuEvent menuEvent(wxEVT_MENU_HIGHLIGHT, -1);
wxMenuEvent menuEvent(wxEVT_MENU_HIGHLIGHT, -1, item->GetMenu());
menuEvent.SetEventObject(item->GetMenuBar()->GetMenuBarFrame());
item->GetMenuBar()->GetMenuBarFrame()

View File

@@ -2420,8 +2420,9 @@ wxWindowMSW::HandleMenuSelect(WXWORD nItem, WXWORD flags, WXHMENU hMenu)
if ( flags & (MF_POPUP | MF_SEPARATOR) )
item = wxID_NONE;
wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, item);
if ( wxMenu::ProcessMenuEvent(MSWFindMenuFromHMENU(hMenu), event, this) )
wxMenu* menu = MSWFindMenuFromHMENU(hMenu);
wxMenuEvent event(wxEVT_MENU_HIGHLIGHT, item, menu);
if ( wxMenu::ProcessMenuEvent(menu, event, this) )
return true;
// by default, i.e. if the event wasn't handled above, clear the status bar