X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/cc47eed9ca8bbdff1bd3b1f8082d515598c121b1..ea19087eec7e491376d1a666b3eb450c4cdd8c96:/src/gtk1/menu.cpp diff --git a/src/gtk1/menu.cpp b/src/gtk1/menu.cpp index 029aa9c12f..fd598295af 100644 --- a/src/gtk1/menu.cpp +++ b/src/gtk1/menu.cpp @@ -322,7 +322,7 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title) entry.accelerator = (gchar*) NULL; entry.callback = (GtkItemFactoryCallback) NULL; entry.callback_action = 0; - entry.item_type = ""; + entry.item_type = (char *)""; gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */ /* in order to get the pointer to the item we need the item text _without_ underscores */ @@ -578,12 +578,14 @@ void wxMenuBar::SetLabelTop( size_t pos, const wxString& label ) static void gtk_menu_clicked_callback( GtkWidget *widget, wxMenu *menu ) { - if (g_isIdle) wxapp_install_idle_handler(); + if (g_isIdle) + wxapp_install_idle_handler(); int id = menu->FindMenuIdByMenuItem(widget); /* should find it for normal (not popup) menu */ - wxASSERT( (id != -1) || (menu->GetInvokingWindow() != NULL) ); + wxASSERT_MSG( (id != -1) || (menu->GetInvokingWindow() != NULL), + _T("menu item not found in gtk_menu_clicked_callback") ); if (!menu->IsEnabled(id)) return; @@ -607,25 +609,7 @@ static void gtk_menu_clicked_callback( GtkWidget *widget, wxMenu *menu ) } } - wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, id ); - event.SetEventObject( menu ); - if (item->IsCheckable()) - event.SetInt( item->IsChecked() ); - -#if wxUSE_MENU_CALLBACK - if (menu->GetCallback()) - { - (void) (*(menu->GetCallback())) (*menu, event); - return; - } -#endif // wxUSE_MENU_CALLBACK - - if (menu->GetEventHandler()->ProcessEvent(event)) - return; - - wxWindow *win = menu->GetInvokingWindow(); - if (win) - win->GetEventHandler()->ProcessEvent( event ); + menu->SendEvent(item->GetId(), item->IsCheckable() ? item->IsChecked() : -1); } //----------------------------------------------------------------------------- @@ -683,7 +667,7 @@ static void gtk_menu_nolight_callback( GtkWidget *widget, wxMenu *menu ) // wxMenuItem //----------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxMenuItemBase) +IMPLEMENT_DYNAMIC_CLASS(wxMenuItem, wxObject) wxMenuItem *wxMenuItemBase::New(wxMenu *parentMenu, int id, @@ -726,21 +710,25 @@ wxMenuItem::~wxMenuItem() wxString wxMenuItemBase::GetLabelFromText(const wxString& text) { wxString label; -#if (GTK_MINOR_VERSION > 0) + for ( const wxChar *pc = text.c_str(); *pc; pc++ ) { - if ( *pc == wxT('_') || *pc == wxT('&') ) + if ( *pc == wxT('_') ) { - // '_' is the escape character for GTK+ and '&' is the one for - // wxWindows - skip both of them + // wxGTK escapes "xxx_xxx" to "xxx__xxx" + pc++; + label += *pc; + continue; + } + + if ( *pc == wxT('&') ) + { + // wxMSW escapes & continue; } label += *pc; } -#else // GTK+ 1.0 - label = text; -#endif // GTK+ 1.2/1.0 return label; } @@ -855,11 +843,21 @@ bool wxMenuItem::IsChecked() const wxString wxMenuItem::GetFactoryPath() const { - /* in order to get the pointer to the item we need the item text _without_ - underscores */ + /* in order to get the pointer to the item we need the item text + _without_ underscores */ wxString path( wxT("
/") ); - path += GetLabel(); + for ( const wxChar *pc = m_text.c_str(); *pc; pc++ ) + { + if ( *pc == wxT('_') || *pc == wxT('&') ) + { + // remove '_' and '&' unconditionally + continue; + } + + path += *pc; + } + return path; } @@ -888,10 +886,10 @@ void wxMenu::Init() if(m_style & wxMENU_TEAROFF) { GtkItemFactoryEntry entry; - entry.path = "/tearoff"; + entry.path = (char *)"/tearoff"; entry.callback = (GtkItemFactoryCallback) NULL; entry.callback_action = 0; - entry.item_type = ""; + entry.item_type = (char *)""; entry.accelerator = (gchar*) NULL; gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */ //GtkWidget *menuItem = gtk_item_factory_get_widget( m_factory, "
/tearoff" ); @@ -925,10 +923,10 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem) { #if (GTK_MINOR_VERSION > 0) GtkItemFactoryEntry entry; - entry.path = "/sep"; + entry.path = (char *)"/sep"; entry.callback = (GtkItemFactoryCallback) NULL; entry.callback_action = 0; - entry.item_type = ""; + entry.item_type = (char *)""; entry.accelerator = (gchar*) NULL; gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */ @@ -954,7 +952,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem) entry.path = buf; entry.callback = (GtkItemFactoryCallback) 0; entry.callback_action = 0; - entry.item_type = ""; + entry.item_type = (char *)""; entry.accelerator = (gchar*) NULL; gtk_item_factory_create_item( m_factory, &entry, (gpointer) this, 2 ); /* what is 2 ? */ @@ -1024,9 +1022,9 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem) entry.callback = (GtkItemFactoryCallback) gtk_menu_clicked_callback; entry.callback_action = 0; if ( mitem->IsCheckable() ) - entry.item_type = ""; + entry.item_type = (char *)""; else - entry.item_type = ""; + entry.item_type = (char *)""; entry.accelerator = (gchar*) NULL; #if wxUSE_ACCEL @@ -1253,6 +1251,9 @@ static wxString GetHotKey( const wxMenuItem& item ) #include #include +extern "C" +{ + static void gtk_pixmap_menu_item_class_init (GtkPixmapMenuItemClass *klass); static void gtk_pixmap_menu_item_init (GtkPixmapMenuItem *menu_item); static void gtk_pixmap_menu_item_draw (GtkWidget *widget, @@ -1278,6 +1279,8 @@ static void changed_have_pixmap_status (GtkPixmapMenuItem *menu_item); static GtkMenuItemClass *parent_class = NULL; +} + #define BORDER_SPACING 3 #define PMAP_WIDTH 20 @@ -1290,7 +1293,7 @@ gtk_pixmap_menu_item_get_type (void) { GtkTypeInfo pixmap_menu_item_info = { - "GtkPixmapMenuItem", + (char *)"GtkPixmapMenuItem", sizeof (GtkPixmapMenuItem), sizeof (GtkPixmapMenuItemClass), (GtkClassInitFunc) gtk_pixmap_menu_item_class_init,