X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..cb0b7b7d811356f729315fc14c7e0d311f43384d:/src/gtk1/mdi.cpp diff --git a/src/gtk1/mdi.cpp b/src/gtk1/mdi.cpp index d2de112f36..9f853fcae7 100644 --- a/src/gtk1/mdi.cpp +++ b/src/gtk1/mdi.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: mdi.cpp +// Name: src/gtk1/mdi.cpp // Purpose: // Author: Robert Roebling // Id: $Id$ @@ -7,26 +7,23 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "mdi.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #include "wx/mdi.h" +#include "wx/notebook.h" #if wxUSE_MDI #include "wx/dialog.h" #include "wx/menu.h" #include "wx/intl.h" -#include "wx/gtk/private.h" +#include "wx/gtk1/private.h" #include #include #include -#include "wx/gtk/win_gtk.h" +#include "wx/gtk1/win_gtk.h" //----------------------------------------------------------------------------- // constants @@ -51,6 +48,7 @@ extern wxList wxPendingDelete; // "switch_page" //----------------------------------------------------------------------------- +extern "C" { static void gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), GtkNotebookPage *page, @@ -82,8 +80,11 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), while (node) { wxMDIChildFrame *child_frame = wxDynamicCast( node->GetData(), wxMDIChildFrame ); - - wxASSERT_MSG( child_frame, _T("child is not a wxMDIChildFrame") ); + // CE: we come here in the destructor with a null child_frame - I think because + // gtk_signal_connect( GTK_OBJECT(m_widget), "switch_page", (see below) + // isn't deleted early enough + if (!child_frame) + return ; if (child_frame->m_page == page) { @@ -100,6 +101,7 @@ gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget), event2.SetEventObject( child); child->GetEventHandler()->ProcessEvent( event2 ); } +} //----------------------------------------------------------------------------- // wxMDIParentFrame @@ -164,6 +166,21 @@ void wxMDIParentFrame::OnInternalIdle() GtkNotebook *notebook = GTK_NOTEBOOK(m_clientWindow->m_widget); gtk_notebook_set_page( notebook, g_list_length( notebook->children ) - 1 ); + /* need to set the menubar of the child */ + wxMDIChildFrame *active_child_frame = GetActiveChild(); + if (active_child_frame != NULL) + { + wxMenuBar *menu_bar = active_child_frame->m_menuBar; + if (menu_bar) + { + menu_bar->m_width = m_width; + menu_bar->m_height = wxMENU_HEIGHT; + gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), + menu_bar->m_widget, + 0, 0, m_width, wxMENU_HEIGHT ); + menu_bar->SetInvokingWindow(active_child_frame); + } + } m_justInserted = false; return; } @@ -416,6 +433,7 @@ void wxMDIChildFrame::SetTitle( const wxString &title ) // "size_allocate" //----------------------------------------------------------------------------- +extern "C" { static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win ) { if (g_isIdle) wxapp_install_idle_handler(); @@ -431,6 +449,7 @@ static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* win->SetSize( alloc->x, alloc->y, alloc->width, alloc->height ); } +} //----------------------------------------------------------------------------- // InsertChild callback for wxMDIClientWindow @@ -438,7 +457,7 @@ static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* static void wxInsertChildInMDI( wxMDIClientWindow* parent, wxMDIChildFrame* child ) { - wxString s = child->m_title; + wxString s = child->GetTitle(); if (s.IsNull()) s = _("MDI child"); GtkWidget *label_widget = gtk_label_new( s.mbc_str() ); @@ -474,6 +493,7 @@ wxMDIClientWindow::wxMDIClientWindow( wxMDIParentFrame *parent, long style ) wxMDIClientWindow::~wxMDIClientWindow() { + } bool wxMDIClientWindow::CreateClient( wxMDIParentFrame *parent, long style ) @@ -483,7 +503,7 @@ bool wxMDIClientWindow::CreateClient( wxMDIParentFrame *parent, long style ) m_insertCallback = (wxInsertChildFunction)wxInsertChildInMDI; if (!PreCreation( parent, wxDefaultPosition, wxDefaultSize ) || - !CreateBase( parent, -1, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("wxMDIClientWindow") )) + !CreateBase( parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, style, wxDefaultValidator, wxT("wxMDIClientWindow") )) { wxFAIL_MSG( wxT("wxMDIClientWindow creation failed") ); return false;