X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/02a8e64ca3a617d776e6e5f881f915aadbd47c4c..b9efe021b554fa3967d1442cf758435c5cd5ae8f:/src/gtk1/frame.cpp diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp index a53ad607c0..2e602ab9dc 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" @@ -57,7 +58,6 @@ const int wxPLACE_HOLDER = 0; extern void wxapp_install_idle_handler(); extern bool g_isIdle; -extern int g_openDialogs; // ---------------------------------------------------------------------------- // event tables @@ -79,18 +79,21 @@ 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; - win->m_menuBarDetached = FALSE; + 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) @@ -101,9 +104,10 @@ static void gtk_menu_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidget * // Raise the client area area gdk_window_raise( win->m_wxwindow->window ); - win->m_menuBarDetached = TRUE; + win->m_menuBarDetached = true; win->GtkUpdateSize(); } +} #endif // wxUSE_MENUS_NATIVE @@ -112,18 +116,21 @@ 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; - win->m_toolBarDetached = FALSE; + 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) @@ -134,9 +141,10 @@ static void gtk_toolbar_detached_callback( GtkWidget *WXUNUSED(widget), GtkWidge // Raise the client area area gdk_window_raise( win->m_wxwindow->window ); - win->m_toolBarDetached = TRUE; + win->m_toolBarDetached = true; win->GtkUpdateSize(); } +} #endif // wxUSE_TOOLBAR @@ -150,7 +158,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 ) @@ -167,7 +175,7 @@ static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child ) child->m_y, child->m_width, child->m_height ); - + #if wxUSE_TOOLBAR_NATIVE // We connect to these events for recalculating the client area // space when the toolbar is floating @@ -195,7 +203,7 @@ static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child ) child->m_width, child->m_height ); } - + // Resize on OnInternalIdle parent->GtkUpdateSize(); } @@ -206,8 +214,8 @@ static void wxInsertChildInFrame( wxFrame* parent, wxWindow* child ) void wxFrame::Init() { - m_menuBarDetached = FALSE; - m_toolBarDetached = FALSE; + m_menuBarDetached = false; + m_toolBarDetached = false; m_menuBarHeight = 2; } @@ -222,13 +230,13 @@ bool wxFrame::Create( wxWindow *parent, bool rt = wxTopLevelWindow::Create(parent, id, title, pos, sizeOrig, style, name); m_insertCallback = (wxInsertChildFunction) wxInsertChildInFrame; - + return rt; } wxFrame::~wxFrame() { - m_isBeingDeleted = TRUE; + m_isBeingDeleted = true; DeleteAllBars(); } @@ -343,7 +351,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), // avoid recursions if (m_resizing) return; - m_resizing = TRUE; + m_resizing = true; // this shouldn't happen: wxFrame, wxMDIParentFrame and wxMDIChildFrame have m_wxwindow wxASSERT_MSG( (m_wxwindow != NULL), wxT("invalid frame") ); @@ -489,7 +497,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), } #endif // wxUSE_STATUSBAR - m_sizeSet = TRUE; + m_sizeSet = true; // send size event to frame wxSizeEvent event( wxSize(m_width,m_height), GetId() ); @@ -506,7 +514,7 @@ void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), } #endif // wxUSE_STATUSBAR - m_resizing = FALSE; + m_resizing = false; } void wxFrame::OnInternalIdle() @@ -520,7 +528,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 } @@ -580,7 +601,7 @@ void wxFrame::AttachMenuBar( wxMenuBar *menuBar ) gtk_signal_connect( GTK_OBJECT(menuBar->m_widget), "child_detached", GTK_SIGNAL_FUNC(gtk_menu_detached_callback), (gpointer)this ); } - + gtk_widget_show( m_frameMenuBar->m_widget ); UpdateMenuBarSize(); @@ -594,13 +615,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 ); @@ -619,11 +640,11 @@ wxToolBar* wxFrame::CreateToolBar( long style, wxWindowID id, const wxString& na { wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") ); - m_insertInClientArea = FALSE; + m_insertInClientArea = false; m_frameToolBar = wxFrameBase::CreateToolBar( style, id, name ); - m_insertInClientArea = TRUE; + m_insertInClientArea = true; GtkUpdateSize(); @@ -675,6 +696,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 )