X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b1ad1424b90dae37fa980059a8e6c8f4f3fd801d..dcbd3762e86258781ed81202977f680665190528:/src/gtk1/menu.cpp diff --git a/src/gtk1/menu.cpp b/src/gtk1/menu.cpp index d957352dbf..00919081b2 100644 --- a/src/gtk1/menu.cpp +++ b/src/gtk1/menu.cpp @@ -15,11 +15,11 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" +#include "wx/menu.h" #include "wx/log.h" #include "wx/intl.h" #include "wx/app.h" #include "wx/bitmap.h" -#include "wx/menu.h" #if wxUSE_ACCEL #include "wx/accel.h" @@ -96,12 +96,14 @@ struct _GtkPixmapMenuItemClass guint have_pixmap_count; }; - +extern "C" { GtkType gtk_pixmap_menu_item_get_type (void); GtkWidget* gtk_pixmap_menu_item_new (void); void gtk_pixmap_menu_item_set_pixmap (GtkPixmapMenuItem *menu_item, - GtkWidget *pixmap); -#endif // GTK 2.0 + GtkWidget *pixmap); +} + +#endif // !__WXGTK20__ //----------------------------------------------------------------------------- // idle system @@ -149,6 +151,7 @@ static wxString wxReplaceUnderscore( const wxString& title ) // activate message from GTK //----------------------------------------------------------------------------- +extern "C" { static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu ) { if (g_isIdle) wxapp_install_idle_handler(); @@ -163,6 +166,7 @@ static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu ) wxWindow *win = menu->GetInvokingWindow(); if (win) win->GetEventHandler()->ProcessEvent( event ); } +} //----------------------------------------------------------------------------- // wxMenuBar @@ -170,7 +174,7 @@ static void gtk_menu_open_callback( GtkWidget *widget, wxMenu *menu ) IMPLEMENT_DYNAMIC_CLASS(wxMenuBar,wxWindow) -wxMenuBar::wxMenuBar( long style ) +void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long style) { // the parent window is known after wxFrame::SetMenu() m_needParent = FALSE; @@ -203,32 +207,24 @@ wxMenuBar::wxMenuBar( long style ) PostCreation(); ApplyWidgetStyle(); + + for (size_t i = 0; i < n; ++i ) + Append(menus[i], titles[i]); } -wxMenuBar::wxMenuBar() +wxMenuBar::wxMenuBar(size_t n, wxMenu *menus[], const wxString titles[], long style) { - // the parent window is known after wxFrame::SetMenu() - m_needParent = FALSE; - m_style = 0; - m_invokingWindow = (wxWindow*) NULL; - - if (!PreCreation( (wxWindow*) NULL, wxDefaultPosition, wxDefaultSize ) || - !CreateBase( (wxWindow*) NULL, -1, wxDefaultPosition, wxDefaultSize, 0, wxDefaultValidator, wxT("menubar") )) - { - wxFAIL_MSG( wxT("wxMenuBar creation failed") ); - return; - } - - m_menubar = gtk_menu_bar_new(); -#ifndef __WXGTK20__ - m_accel = gtk_accel_group_new(); -#endif - - m_widget = GTK_WIDGET(m_menubar); + Init(n, menus, titles, style); +} - PostCreation(); +wxMenuBar::wxMenuBar(long style) +{ + Init(0, NULL, NULL, style); +} - ApplyWidgetStyle(); +wxMenuBar::wxMenuBar() +{ + Init(0, NULL, NULL, 0); } wxMenuBar::~wxMenuBar() @@ -589,6 +585,7 @@ void wxMenuBar::SetLabelTop( size_t pos, const wxString& label ) // "activate" //----------------------------------------------------------------------------- +extern "C" { static void gtk_menu_clicked_callback( GtkWidget *widget, wxMenu *menu ) { if (g_isIdle) @@ -659,11 +656,13 @@ static void gtk_menu_clicked_callback( GtkWidget *widget, wxMenu *menu ) menu->SendEvent(id, item->IsCheckable() ? item->IsChecked() : -1); } } +} //----------------------------------------------------------------------------- // "select" //----------------------------------------------------------------------------- +extern "C" { static void gtk_menu_hilight_callback( GtkWidget *widget, wxMenu *menu ) { if (g_isIdle) wxapp_install_idle_handler(); @@ -685,11 +684,13 @@ static void gtk_menu_hilight_callback( GtkWidget *widget, wxMenu *menu ) wxWindow *win = menu->GetInvokingWindow(); if (win) win->GetEventHandler()->ProcessEvent( event ); } +} //----------------------------------------------------------------------------- // "deselect" //----------------------------------------------------------------------------- +extern "C" { static void gtk_menu_nolight_callback( GtkWidget *widget, wxMenu *menu ) { if (g_isIdle) wxapp_install_idle_handler(); @@ -712,6 +713,7 @@ static void gtk_menu_nolight_callback( GtkWidget *widget, wxMenu *menu ) if (win) win->GetEventHandler()->ProcessEvent( event ); } +} //----------------------------------------------------------------------------- // wxMenuItem @@ -1533,7 +1535,7 @@ static void changed_have_pixmap_status (GtkPixmapMenuItem *menu_item); static GtkMenuItemClass *parent_class = NULL; -} +} // extern "C" #define BORDER_SPACING 3 #define PMAP_WIDTH 20 @@ -1564,6 +1566,8 @@ gtk_pixmap_menu_item_get_type (void) return pixmap_menu_item_type; } +extern "C" { + /** * gtk_pixmap_menu_item_new * @@ -1842,5 +1846,7 @@ changed_have_pixmap_status (GtkPixmapMenuItem *menu_item) gtk_widget_queue_resize(GTK_WIDGET(menu_item)); } -#endif +} // extern "C" + +#endif // !__WXGTK20__