/////////////////////////////////////////////////////////////////////////////
-// Name: mdi.cpp
+// Name: src/gtk1/mdi.cpp
// Purpose:
// Author: Robert Roebling
// Id: $Id$
// 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"
+#if wxUSE_MDI
+
#include "wx/mdi.h"
-#if wxUSE_MDI
+#ifndef WX_PRECOMP
+ #include "wx/intl.h"
+ #include "wx/menu.h"
+ #include "wx/dialog.h"
+#endif
-#include "wx/dialog.h"
-#include "wx/menu.h"
-#include "wx/intl.h"
-#include "wx/gtk/private.h"
+#include "wx/notebook.h"
+#include "wx/gtk1/private.h"
#include <glib.h>
#include <gdk/gdk.h>
#include <gtk/gtk.h>
-#include "wx/gtk/win_gtk.h"
+#include "wx/gtk1/win_gtk.h"
//-----------------------------------------------------------------------------
// constants
// globals
//-----------------------------------------------------------------------------
-extern wxList wxPendingDelete;
-
//-----------------------------------------------------------------------------
// "switch_page"
//-----------------------------------------------------------------------------
+extern "C" {
static void
gtk_mdi_page_change_callback( GtkNotebook *WXUNUSED(widget),
GtkNotebookPage *page,
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)
{
event2.SetEventObject( child);
child->GetEventHandler()->ProcessEvent( event2 );
}
+}
//-----------------------------------------------------------------------------
// wxMDIParentFrame
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 */
+ /* need to set the menubar of the child */
wxMDIChildFrame *active_child_frame = GetActiveChild();
- wxMenuBar *menu_bar = active_child_frame->m_menuBar;
- 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);
-
+ 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;
}
// "size_allocate"
//-----------------------------------------------------------------------------
+extern "C" {
static void gtk_page_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* alloc, wxWindow *win )
{
if (g_isIdle) wxapp_install_idle_handler();
win->SetSize( alloc->x, alloc->y, alloc->width, alloc->height );
}
+}
//-----------------------------------------------------------------------------
// InsertChild callback for wxMDIClientWindow
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() );
wxMDIClientWindow::~wxMDIClientWindow()
{
+
}
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;