- int h = height;
- if (m_frameMenuBar) h += wxMENU_HEIGHT;
- if (m_frameStatusBar) h += wxSTATUS_HEIGHT;
- if (m_frameToolBar)
- {
- int y = 0;
- m_frameToolBar->GetSize( NULL, &y );
- h += y;
- }
- wxWindow::SetClientSize( width, h );
-}
-
-void wxFrame::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int width, int height )
-{
- // due to a bug in gtk, x,y are always 0
- // m_x = x;
- // m_y = y;
-
- if ((m_height == height) && (m_width == width) &&
- (m_sizeSet)) return;
- if (!m_mainWindow) return;
- if (!m_wxwindow) return;
-
- m_width = width;
- m_height = height;
-
- gtk_widget_set_usize( m_widget, width, height );
-
- int main_x = 0;
- int main_y = 0;
- int main_height = height;
- int main_width = width;
-
- // This emulates Windows behaviour:
- // The menu bar is part of the main window, but the status bar
- // is on the implementation side in the client area. The
- // function GetClientSize returns the size of the client area
- // minus the status bar height. Under wxGTK, the main window
- // is represented by m_mainWindow. The menubar is inserted
- // into m_mainWindow whereas the statusbar is insertes into
- // m_wxwindow just like any other window.
-
-// not really needed
-// gtk_widget_set_usize( m_mainWindow, width, height );
-
- if (m_frameMenuBar)
- {
- main_y = wxMENU_HEIGHT;
- main_height -= wxMENU_HEIGHT;
- }
-
- int toolbar_height = 0;
- if (m_frameToolBar) m_frameToolBar->GetSize( NULL, &toolbar_height );
-
- main_y += toolbar_height;
- main_height -= toolbar_height;
-
- gtk_myfixed_move( GTK_MYFIXED(m_mainWindow), m_wxwindow, main_x, main_y );
- gtk_widget_set_usize( m_wxwindow, main_width, main_height );
-
- if (m_frameMenuBar)
- {
- gtk_myfixed_move( GTK_MYFIXED(m_mainWindow), m_frameMenuBar->m_widget, 1, 1 );
- gtk_widget_set_usize( m_frameMenuBar->m_widget, width-2, wxMENU_HEIGHT-2 );
- }
-
- if (m_frameToolBar)
- {
- gtk_myfixed_move( GTK_MYFIXED(m_mainWindow), m_frameToolBar->m_widget, 1, wxMENU_HEIGHT );
- gtk_widget_set_usize( m_frameToolBar->m_widget, width-2, toolbar_height );
- }
-
- if (m_frameStatusBar)
- {
- m_frameStatusBar->SetSize( 0, main_height-wxSTATUS_HEIGHT, width, wxSTATUS_HEIGHT );
- }
-
- m_sizeSet = TRUE;
-
- wxSizeEvent event( wxSize(m_width,m_height), GetId() );
- event.SetEventObject( this );
- ProcessEvent( event );
-}
-
-void wxFrame::OnSize( wxSizeEvent &WXUNUSED(event) )
-{
- if ( GetAutoLayout() )
- Layout();
- else {
- // no child: go out !
- if (!GetChildren()->First())
- return;
-
- // do we have exactly one child?
- wxWindow *child = NULL;
- for(wxNode *node = GetChildren()->First(); node; node = node->Next())
+ wxFAIL_MSG( wxT("DoMoveWindow called for wxFrame") );
+}
+
+void wxFrame::DoSetSize( int x, int y, int width, int height, int sizeFlags )
+{
+ wxASSERT_MSG( (m_widget != NULL), wxT("invalid frame") );
+
+ /* this shouldn't happen: wxFrame, wxMDIParentFrame and wxMDIChildFrame have m_wxwindow */
+ wxASSERT_MSG( (m_wxwindow != NULL), wxT("invalid frame") );
+
+ /* avoid recursions */
+ if (m_resizing)
+ return;
+ m_resizing = TRUE;
+
+ int old_x = m_x;
+ int old_y = m_y;
+
+ int old_width = m_width;
+ int old_height = m_height;
+
+ if ((sizeFlags & wxSIZE_ALLOW_MINUS_ONE) == 0)