X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14f355c2b5c71fc7c3d680aea366582d2ac60f7b..7cc52cd8ddf618163923e0171a87b7dff2c4c869:/src/gtk1/frame.cpp?ds=sidebyside diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp index 4bdfe079d3..1bf86a39a5 100644 --- a/src/gtk1/frame.cpp +++ b/src/gtk1/frame.cpp @@ -24,6 +24,7 @@ #include "wx/defs.h" +#include "wx/frame.h" #include "wx/dialog.h" #include "wx/control.h" #include "wx/app.h" @@ -79,6 +80,7 @@ IMPLEMENT_DYNAMIC_CLASS(wxFrame, wxTopLevelWindow) // "child_attached" of menu bar //----------------------------------------------------------------------------- +extern "C" { static void gtk_menu_attached_callback( GtkWidget *WXUNUSED(widget), GtkWidget *WXUNUSED(child), wxFrame *win ) { if (!win->m_hasVMT) return; @@ -86,11 +88,13 @@ static void gtk_menu_attached_callback( GtkWidget *WXUNUSED(widget), GtkWidget * win->m_menuBarDetached = FALSE; win->GtkUpdateSize(); } +} //----------------------------------------------------------------------------- // "child_detached" of menu bar //----------------------------------------------------------------------------- +extern "C" { static void gtk_menu_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget *WXUNUSED(child), wxFrame *win ) { if (g_isIdle) @@ -104,6 +108,7 @@ static void gtk_menu_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget * win->m_menuBarDetached = TRUE; win->GtkUpdateSize(); } +} #endif // wxUSE_MENUS_NATIVE @@ -112,6 +117,7 @@ static void gtk_menu_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget * // "child_attached" of tool bar //----------------------------------------------------------------------------- +extern "C" { static void gtk_toolbar_attached_callback( GtkWidget *WXUNUSED(widget), GtkWidget *WXUNUSED(child), wxFrame *win ) { if (!win->m_hasVMT) return; @@ -119,11 +125,13 @@ static void gtk_toolbar_attached_callback( GtkWidget *WXUNUSED(widget), GtkWidge win->m_toolBarDetached = FALSE; win->GtkUpdateSize(); } +} //----------------------------------------------------------------------------- // "child_detached" of tool bar //----------------------------------------------------------------------------- +extern "C" { static void gtk_toolbar_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget *WXUNUSED(child), wxFrame *win ) { if (g_isIdle) @@ -137,6 +145,7 @@ static void gtk_toolbar_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidge win->m_toolBarDetached = TRUE; win->GtkUpdateSize(); } +} #endif // wxUSE_TOOLBAR @@ -150,7 +159,7 @@ static void gtk_toolbar_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidge /* Callback for wxFrame. This very strange beast has to be used because * C++ has no virtual methods in a constructor. We have to emulate a - * virtual function here as wxWindows requires different ways to insert + * virtual function here as wxWidgets requires different ways to insert * a child in container classes. */ static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child ) @@ -520,7 +529,20 @@ void wxFrame::OnInternalIdle() if (m_frameToolBar) m_frameToolBar->OnInternalIdle(); #endif #if wxUSE_STATUSBAR - if (m_frameStatusBar) m_frameStatusBar->OnInternalIdle(); + if (m_frameStatusBar) + { + m_frameStatusBar->OnInternalIdle(); + + // There may be controls in the status bar that + // need to be updated + for ( wxWindowList::compatibility_iterator node = m_frameStatusBar->GetChildren().GetFirst(); + node; + node = node->GetNext() ) + { + wxWindow *child = node->GetData(); + child->OnInternalIdle(); + } + } #endif } @@ -581,7 +603,7 @@ void wxFrame::AttachMenuBar( wxMenuBar *menuBar ) GTK_SIGNAL_FUNC(gtk_menu_detached_callback), (gpointer)this ); } - m_frameMenuBar->Show( TRUE ); + gtk_widget_show( m_frameMenuBar->m_widget ); UpdateMenuBarSize(); } @@ -594,13 +616,13 @@ void wxFrame::AttachMenuBar( wxMenuBar *menuBar ) void wxFrame::UpdateMenuBarSize() { - wxASSERT_MSG( m_frameMenuBar, _T("Updating non existant menubar?") ); - GtkRequisition req; req.width = 2; req.height = 2; - + + // this is called after Remove with a NULL m_frameMenuBar + if ( m_frameMenuBar ) (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_frameMenuBar->m_widget) )->size_request ) (m_frameMenuBar->m_widget, &req ); @@ -675,6 +697,16 @@ wxStatusBar* wxFrame::CreateStatusBar(int number, return wxFrameBase::CreateStatusBar( number, style, id, name ); } +void wxFrame::SetStatusBar(wxStatusBar *statbar) +{ + bool hadStatBar = m_frameStatusBar != NULL; + + wxFrameBase::SetStatusBar(statbar); + + if (hadStatBar && !m_frameStatusBar) + GtkUpdateSize(); +} + void wxFrame::PositionStatusBar() { if ( !m_frameStatusBar )