X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/defdd888002f2dabf2228a4e4b58d4e7a0b56eda..b7c542d5c6104aa3a52b0cafda59dff03510e888:/src/gtk/menu.cpp diff --git a/src/gtk/menu.cpp b/src/gtk/menu.cpp index af9c1f6738..0178cad93d 100644 --- a/src/gtk/menu.cpp +++ b/src/gtk/menu.cpp @@ -44,11 +44,6 @@ // we use normal item but with a special id for the menu title static const int wxGTK_TITLE_ID = -3; -// defined in window.cpp -#ifndef __WXGTK20__ - extern guint32 wxGtkTimeLastClick; -#endif - //----------------------------------------------------------------------------- // idle system //----------------------------------------------------------------------------- @@ -167,9 +162,6 @@ void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long st } m_menubar = gtk_menu_bar_new(); -#ifndef __WXGTK20__ - m_accel = gtk_accel_group_new(); -#endif if (style & wxMB_DOCKABLE) { @@ -193,10 +185,8 @@ void wxMenuBar::Init(size_t n, wxMenu *menus[], const wxString titles[], long st // don't get it when the menu is dismissed by clicking outside the // toolbar) so we connect to the global one, even if it means that we // can't pass the menu which was closed in wxMenuEvent object - gtk_signal_connect( GTK_OBJECT(GTK_MENU_SHELL(m_menubar)), - "deactivate", - GTK_SIGNAL_FUNC(gtk_menu_close_callback), - (gpointer)this ); + g_signal_connect (m_menubar, "deactivate", + G_CALLBACK (gtk_menu_close_callback), this); } @@ -227,11 +217,6 @@ static void wxMenubarUnsetInvokingWindow( wxMenu *menu, wxWindow *win ) while (top_frame->GetParent() && !(top_frame->IsTopLevel())) top_frame = top_frame->GetParent(); -#ifndef __WXGTK20__ - // support for native hot keys - gtk_accel_group_detach( menu->m_accel, ACCEL_OBJ_CAST(top_frame->m_widget) ); -#endif - wxMenuItemList::compatibility_iterator node = menu->GetMenuItems().GetFirst(); while (node) { @@ -272,13 +257,6 @@ void wxMenuBar::SetInvokingWindow( wxWindow *win ) while (top_frame->GetParent() && !(top_frame->IsTopLevel())) top_frame = top_frame->GetParent(); -#ifndef __WXGTK20__ - // support for native key accelerators indicated by underscroes - ACCEL_OBJECT *obj = ACCEL_OBJ_CAST(top_frame->m_widget); - if ( !g_slist_find( ACCEL_OBJECTS(m_accel), obj ) ) - gtk_accel_group_attach( m_accel, obj ); -#endif - wxMenuList::compatibility_iterator node = m_menus.GetFirst(); while (node) { @@ -295,11 +273,6 @@ void wxMenuBar::UnsetInvokingWindow( wxWindow *win ) while (top_frame->GetParent() && !(top_frame->IsTopLevel())) top_frame = top_frame->GetParent(); -#ifndef __WXGTK20__ - // support for native key accelerators indicated by underscroes - gtk_accel_group_detach( m_accel, ACCEL_OBJ_CAST(top_frame->m_widget) ); -#endif - wxMenuList::compatibility_iterator node = m_menus.GetFirst(); while (node) { @@ -325,25 +298,7 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos) menu->SetTitle( str ); // The "m_owner" is the "menu item" -#ifdef __WXGTK20__ menu->m_owner = gtk_menu_item_new_with_mnemonic( wxGTK_CONV( str ) ); -#else - menu->m_owner = gtk_menu_item_new_with_label( wxGTK_CONV( str ) ); - GtkLabel *label = GTK_LABEL( GTK_BIN(menu->m_owner)->child ); - // set new text - gtk_label_set_text( label, wxGTK_CONV( str ) ); - // reparse key accel - guint accel_key = gtk_label_parse_uline (GTK_LABEL(label), wxGTK_CONV( str ) ); - if (accel_key != GDK_VoidSymbol) - { - gtk_widget_add_accelerator (menu->m_owner, - "activate_item", - m_accel, //gtk_menu_ensure_uline_accel_group(GTK_MENU(m_menubar)), - accel_key, - GDK_MOD1_MASK, - GTK_ACCEL_LOCKED); - } -#endif gtk_widget_show( menu->m_owner ); @@ -354,9 +309,9 @@ bool wxMenuBar::GtkAppend(wxMenu *menu, const wxString& title, int pos) else gtk_menu_shell_insert( GTK_MENU_SHELL(m_menubar), menu->m_owner, pos ); - gtk_signal_connect( GTK_OBJECT(menu->m_owner), "activate", - GTK_SIGNAL_FUNC(gtk_menu_open_callback), - (gpointer)menu ); + g_signal_connect (menu->m_owner, "activate", + G_CALLBACK (gtk_menu_open_callback), + menu); // m_invokingWindow is set after wxFrame::SetMenuBar(). This call enables // addings menu later on. @@ -556,17 +511,7 @@ void wxMenuBar::SetLabelTop( size_t pos, const wxString& label ) menu->SetTitle( str ); if (menu->m_owner) - { - GtkLabel *glabel = GTK_LABEL( GTK_BIN(menu->m_owner)->child ); - - /* set new text */ - gtk_label_set( glabel, wxGTK_CONV( str ) ); - - /* reparse key accel */ - (void)gtk_label_parse_uline (GTK_LABEL(glabel), wxGTK_CONV( str ) ); - gtk_accel_label_refetch( GTK_ACCEL_LABEL(glabel) ); - } - + gtk_label_set_text_with_mnemonic( GTK_LABEL( GTK_BIN(menu->m_owner)->child), wxGTK_CONV(str) ); } //----------------------------------------------------------------------------- @@ -774,7 +719,6 @@ wxString wxMenuItemBase::GetLabelFromText(const wxString& text) continue; } -#ifdef __WXGTK20__ if ( *pc == wxT('\\') ) { // GTK 2.0 escapes "xxx/xxx" to "xxx\/xxx" @@ -782,7 +726,6 @@ wxString wxMenuItemBase::GetLabelFromText(const wxString& text) label += *pc; continue; } -#endif if ( (*pc == wxT('&')) && (*(pc+1) != wxT('&')) ) { @@ -823,16 +766,7 @@ void wxMenuItem::SetText( const wxString& str ) else label = GTK_LABEL( GTK_BIN(m_menuItem)->child ); -#ifdef __WXGTK20__ gtk_label_set_text_with_mnemonic( GTK_LABEL(label), wxGTK_CONV(m_text) ); -#else - // set new text - gtk_label_set( label, wxGTK_CONV( m_text ) ); - - // reparse key accel - (void)gtk_label_parse_uline (GTK_LABEL(label), wxGTK_CONV(m_text) ); - gtk_accel_label_refetch( GTK_ACCEL_LABEL(label) ); -#endif } guint accel_key; @@ -931,7 +865,7 @@ void wxMenuItem::Check( bool check ) { case wxITEM_CHECK: case wxITEM_RADIO: - gtk_check_menu_item_set_state( (GtkCheckMenuItem*)m_menuItem, (gint)check ); + gtk_check_menu_item_set_active( (GtkCheckMenuItem*)m_menuItem, (gint)check ); break; default: @@ -980,7 +914,7 @@ void wxMenu::Init() { GtkWidget *tearoff = gtk_tearoff_menu_item_new(); - gtk_menu_append(GTK_MENU(m_menu), tearoff); + gtk_menu_shell_append(GTK_MENU_SHELL(m_menu), tearoff); } m_prevRadio = NULL; @@ -1013,25 +947,16 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) GtkWidget *menuItem; wxString text; -#ifndef __WXGTK20__ - GtkLabel* label; -#endif if ( mitem->IsSeparator() ) { -#ifdef __WXGTK20__ menuItem = gtk_separator_menu_item_new(); -#else - // TODO - menuItem = gtk_menu_item_new(); -#endif } else if (mitem->GetBitmap().Ok()) { text = mitem->GetText(); const wxBitmap *bitmap = &mitem->GetBitmap(); -#ifdef __WXGTK20__ menuItem = gtk_image_menu_item_new_with_mnemonic( wxGTK_CONV( text ) ); GtkWidget *image; @@ -1052,13 +977,6 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM(menuItem), image ); -#else - // TODO - wxUnusedVar(bitmap); - menuItem = gtk_menu_item_new_with_label( wxGTK_CONV( text ) ); - label = GTK_LABEL( GTK_BIN(menuItem)->child ); -#endif - m_prevRadio = NULL; } else // a normal item @@ -1070,14 +988,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) { case wxITEM_CHECK: { -#ifdef __WXGTK20__ menuItem = gtk_check_menu_item_new_with_mnemonic( wxGTK_CONV( text ) ); -#else - menuItem = gtk_check_menu_item_new_with_label( wxGTK_CONV( text ) ); - label = GTK_LABEL( GTK_BIN(menuItem)->child ); - // set new text - gtk_label_set_text( label, wxGTK_CONV( text ) ); -#endif m_prevRadio = NULL; break; } @@ -1088,25 +999,12 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) if ( m_prevRadio == NULL ) { // start of a new radio group -#ifdef __WXGTK20__ m_prevRadio = menuItem = gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV( text ) ); -#else - m_prevRadio = menuItem = gtk_radio_menu_item_new_with_label( group, wxGTK_CONV( text ) ); - label = GTK_LABEL( GTK_BIN(menuItem)->child ); - // set new text - gtk_label_set_text( label, wxGTK_CONV( text ) ); -#endif } else // continue the radio group { -#ifdef __WXGTK20__ group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (m_prevRadio)); m_prevRadio = menuItem = gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV( text ) ); -#else - group = gtk_radio_menu_item_group (GTK_RADIO_MENU_ITEM (m_prevRadio)); - m_prevRadio = menuItem = gtk_radio_menu_item_new_with_label( group, wxGTK_CONV( text ) ); - label = GTK_LABEL( GTK_BIN(menuItem)->child ); -#endif } break; } @@ -1117,12 +1015,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) case wxITEM_NORMAL: { -#ifdef __WXGTK20__ menuItem = gtk_menu_item_new_with_mnemonic( wxGTK_CONV( text ) ); -#else - menuItem = gtk_menu_item_new_with_label( wxGTK_CONV( text ) ); - label = GTK_LABEL( GTK_BIN(menuItem)->child ); -#endif m_prevRadio = NULL; break; } @@ -1157,13 +1050,10 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) { wxASSERT_MSG( menuItem, wxT("invalid menuitem") ); - gtk_signal_connect( GTK_OBJECT(menuItem), "select", - GTK_SIGNAL_FUNC(gtk_menu_hilight_callback), - (gpointer)this ); - - gtk_signal_connect( GTK_OBJECT(menuItem), "deselect", - GTK_SIGNAL_FUNC(gtk_menu_nolight_callback), - (gpointer)this ); + g_signal_connect (menuItem, "select", + G_CALLBACK (gtk_menu_hilight_callback), this); + g_signal_connect (menuItem, "deselect", + G_CALLBACK (gtk_menu_nolight_callback), this); if ( mitem->IsSubMenu() && mitem->GetKind() != wxITEM_RADIO && mitem->GetKind() != wxITEM_CHECK ) { @@ -1179,23 +1069,10 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos) } else { - gtk_signal_connect( GTK_OBJECT(menuItem), "activate", - GTK_SIGNAL_FUNC(gtk_menu_clicked_callback), - (gpointer)this ); - } - -#ifndef __WXGTK20__ - guint accel_key = gtk_label_parse_uline (GTK_LABEL(label), wxGTK_CONV( text ) ); - if (accel_key != GDK_VoidSymbol) - { - gtk_widget_add_accelerator (menuItem, - "activate_item", - gtk_menu_ensure_uline_accel_group(GTK_MENU(m_menu)), - accel_key, - GDK_MOD1_MASK, - GTK_ACCEL_LOCKED); + g_signal_connect (menuItem, "activate", + G_CALLBACK (gtk_menu_clicked_callback), + this); } -#endif } mitem->SetMenuItem(menuItem); @@ -1540,7 +1417,7 @@ void gtk_pop_hide_callback( GtkWidget *WXUNUSED(widget), bool* is_waiting ) *is_waiting = FALSE; } -static void SetInvokingWindow( wxMenu *menu, wxWindow* win ) +void SetInvokingWindow( wxMenu *menu, wxWindow* win ) { menu->SetInvokingWindow( win ); @@ -1560,9 +1437,7 @@ static void SetInvokingWindow( wxMenu *menu, wxWindow* win ) extern "C" void wxPopupMenuPositionCallback( GtkMenu *menu, gint *x, gint *y, -#ifdef __WXGTK20__ gboolean * WXUNUSED(whatever), -#endif gpointer user_data ) { // ensure that the menu appears entirely on screen @@ -1595,10 +1470,9 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y ) bool is_waiting = true; - gulong handler = gtk_signal_connect( GTK_OBJECT(menu->m_menu), - "hide", - GTK_SIGNAL_FUNC(gtk_pop_hide_callback), - (gpointer)&is_waiting ); + gulong handler = g_signal_connect (menu->m_menu, "hide", + G_CALLBACK (gtk_pop_hide_callback), + &is_waiting); wxPoint pos; gpointer userdata; @@ -1626,11 +1500,7 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y ) posfunc, // function to position it userdata, // client data 0, // button used to activate it -#ifdef __WXGTK20__ gtk_get_current_event_time() -#else - wxGtkTimeLastClick // the time of activation -#endif ); while (is_waiting) @@ -1638,7 +1508,7 @@ bool wxWindowGTK::DoPopupMenu( wxMenu *menu, int x, int y ) gtk_main_iteration(); } - gtk_signal_disconnect(GTK_OBJECT(menu->m_menu), handler); + g_signal_handler_disconnect (menu->m_menu, handler); wxMenuEvent eventClose(wxEVT_MENU_CLOSE, -1, menu); DoCommonMenuCallbackCode(menu, eventClose);