diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index 29c492c62d..9a4bd17c9b 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -78,6 +78,30 @@ static void gtk_menu_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget * } } +//----------------------------------------------------------------------------- +// "size-request" from menubar +//----------------------------------------------------------------------------- + +extern "C" { +static void menubar_size_request(GtkWidget* widget, GtkRequisition*, wxFrame* win) +{ + g_signal_handlers_disconnect_by_func( + widget, (void*)menubar_size_request, win); + win->UpdateMenuBarSize(); +} +} + +//----------------------------------------------------------------------------- +// "style-set" from menubar +//----------------------------------------------------------------------------- + +extern "C" { +static void menubar_style_set(GtkWidget* widget, GtkStyle*, wxFrame* win) +{ + g_signal_connect(widget, "size-request", + G_CALLBACK(menubar_size_request), win); +} +} #endif // wxUSE_MENUS_NATIVE #if wxUSE_TOOLBAR @@ -571,6 +595,9 @@ void wxFrame::DetachMenuBar() if ( m_frameMenuBar ) { + g_signal_handlers_disconnect_by_func( + m_frameMenuBar->m_widget, (void*)menubar_style_set, this); + m_frameMenuBar->UnsetInvokingWindow( this ); if (m_frameMenuBar->GetWindowStyle() & wxMB_DOCKABLE) @@ -621,6 +648,9 @@ void wxFrame::AttachMenuBar( wxMenuBar *menuBar ) gtk_widget_show( m_frameMenuBar->m_widget ); UpdateMenuBarSize(); + + g_signal_connect(menuBar->m_widget, "style-set", + G_CALLBACK(menubar_style_set), this); } else {