- 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;
- };
-
- gtk_widget_set_uposition( GTK_WIDGET(m_wxwindow), main_x, main_y );
- gtk_widget_set_usize( GTK_WIDGET(m_wxwindow), main_width, main_height );
-
- if (m_frameMenuBar)
- {
- gtk_widget_set_uposition( m_frameMenuBar->m_widget, 1, 1 );
- gtk_widget_set_usize( m_frameMenuBar->m_widget, width-2, wxMENU_HEIGHT-2 );
- };
-
- 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 );
-};
+ // 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_wxwindow) return;
+
+ m_width = width;
+ m_height = height;
+
+ if ((m_minWidth != -1) && (m_width < m_minWidth)) m_width = m_minWidth;
+ if ((m_minHeight != -1) && (m_height < m_minHeight)) m_height = m_minHeight;
+ if ((m_maxWidth != -1) && (m_width > m_maxWidth)) m_width = m_minWidth;
+ if ((m_maxHeight != -1) && (m_height > m_maxHeight)) m_height = m_minHeight;
+
+ gtk_widget_set_usize( m_widget, m_width, m_height );
+
+ // This emulates the new wxMSW behaviour
+
+ if (m_frameMenuBar)
+ {
+ m_frameMenuBar->m_x = 1;
+ m_frameMenuBar->m_y = 1;
+ m_frameMenuBar->m_width = m_width-2;
+ m_frameMenuBar->m_height = wxMENU_HEIGHT-2;
+ gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameMenuBar->m_widget, 1, 1 );
+ gtk_widget_set_usize( m_frameMenuBar->m_widget, m_width-2, wxMENU_HEIGHT-2 );
+ }
+
+ if (m_frameToolBar)
+ {
+ int y = 0;
+ if (m_frameMenuBar) y = wxMENU_HEIGHT;
+ int h = m_frameToolBar->m_height;
+
+ m_frameToolBar->m_x = 2;
+ gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameToolBar->m_widget, 2, y );
+ gtk_widget_set_usize( m_frameToolBar->m_widget, m_width-3, h );
+ }
+
+ if (m_frameStatusBar)
+ {
+ // OK, this hurts in the eye, but I don't want to call SetSize()
+ // because I don't want to call any non-native functions here.
+ m_frameStatusBar->m_x = 0;
+ m_frameStatusBar->m_y = m_height-wxSTATUS_HEIGHT;
+ m_frameStatusBar->m_width = m_width;
+ m_frameStatusBar->m_height = wxSTATUS_HEIGHT;
+ gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameStatusBar->m_widget, 0, m_height-wxSTATUS_HEIGHT );
+ gtk_widget_set_usize( m_frameStatusBar->m_widget, m_width, wxSTATUS_HEIGHT );
+ }
+
+ m_sizeSet = TRUE;
+
+ wxSizeEvent event( wxSize(m_width,m_height), GetId() );
+ event.SetEventObject( this );
+ ProcessEvent( event );
+}