X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/222ed1d678dff2f5c3c4164321dd05e8f47de487..e9b964cfe591532f21c31204032357899cc2cbad:/src/gtk/menu.cpp diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index c3593081d8..2c148ae7b8 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -7,11 +7,14 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ -#pragma implementation "menu.h" -#pragma implementation "menuitem.h" +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) + #pragma implementation "menu.h" + #pragma implementation "menuitem.h" #endif +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + #include "wx/log.h" #include "wx/intl.h" #include "wx/app.h" @@ -169,7 +172,7 @@ static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu ) { if (g_isIdle) wxapp_install_idle_handler(); - wxMenuEvent event( wxEVT_MENU_OPEN, -1 ); + wxMenuEvent event( wxEVT_MENU_OPEN, -1, menu ); event.SetEventObject( menu ); wxEvtHandler* handler = menu->GetEventHandler(); @@ -729,6 +732,10 @@ static void gtk_menu_clicked_callback( GtkWidget *widget, wxMenu *menu ) pm = pm->GetParent(); } + // FIXME: why do we have to call wxFrame::GetEventHandler() directly here? + // normally wxMenu::SendEvent() should be enough, if it doesn't work + // in wxGTK then we have a bug in wxMenu::GetInvokingWindow() which + // should be fixed instead of working around it here... if (frame) { // If it is attached then let the frame send the event. @@ -738,6 +745,7 @@ static void gtk_menu_clicked_callback( GtkWidget *widget, wxMenu *menu ) commandEvent.SetEventObject(frame); if (item->IsCheckable()) commandEvent.SetInt(item->IsChecked()); + commandEvent.SetEventObject(menu); frame->GetEventHandler()->ProcessEvent(commandEvent); } @@ -1350,21 +1358,23 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem) return TRUE; } -bool wxMenu::DoAppend(wxMenuItem *mitem) +wxMenuItem* wxMenu::DoAppend(wxMenuItem *mitem) { - return GtkAppend(mitem) && wxMenuBase::DoAppend(mitem); + if (!GtkAppend(mitem)) + return NULL; + return wxMenuBase::DoAppend(mitem); } -bool wxMenu::DoInsert(size_t pos, wxMenuItem *item) +wxMenuItem* wxMenu::DoInsert(size_t pos, wxMenuItem *item) { if ( !wxMenuBase::DoInsert(pos, item) ) - return FALSE; + return NULL; // GTK+ doesn't have a function to insert a menu using GtkItemFactory (as // of version 1.2.6), so we first append the item and then change its // index if ( !GtkAppend(item) ) - return FALSE; + return NULL; if ( m_style & wxMENU_TEAROFF ) { @@ -1377,7 +1387,7 @@ bool wxMenu::DoInsert(size_t pos, wxMenuItem *item) menu_shell->children = g_list_remove(menu_shell->children, data); menu_shell->children = g_list_insert(menu_shell->children, data, pos); - return TRUE; + return item; } wxMenuItem *wxMenu::DoRemove(wxMenuItem *item) @@ -1467,9 +1477,11 @@ static wxString GetHotKey( const wxMenuItem& item ) hotkey << wxT("Down" ); break; case WXK_PAGEUP: + case WXK_PRIOR: hotkey << wxT("Prior" ); break; case WXK_PAGEDOWN: + case WXK_NEXT: hotkey << wxT("Next" ); break; case WXK_LEFT: