- // 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 );
+ // due to a bug in gtk, x,y are always 0
+ // m_x = x;
+ // m_y = y;
+
+ if (m_resizing) return;
+ m_resizing = TRUE;
+
+ 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 of placing all
+ // frame-subwindows (menu, toolbar..) on one native window
+ // 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.
+
+ if (m_frameMenuBar)
+ {
+ int xx = m_miniEdge;
+ int yy = m_miniEdge + m_miniTitle;
+ int ww = m_width - 2*m_miniEdge;
+ int hh = wxMENU_HEIGHT;
+ m_frameMenuBar->m_x = xx;
+ m_frameMenuBar->m_y = yy;
+ m_frameMenuBar->m_width = ww;
+ m_frameMenuBar->m_height = hh;
+
+ gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameMenuBar->m_widget, xx, yy );
+ gtk_widget_set_usize( m_frameMenuBar->m_widget, ww, hh );
+ }
+
+ if (m_frameToolBar)
+ {
+ int xx = m_miniEdge;
+ int yy = m_miniEdge + m_miniTitle;
+ if (m_frameMenuBar) yy += wxMENU_HEIGHT;
+ int ww = m_width - 2*m_miniEdge;
+ int hh = m_frameToolBar->m_height;
+
+ m_frameToolBar->m_x = xx;
+ m_frameToolBar->m_y = yy;
+ m_frameToolBar->m_height = hh;
+ m_frameToolBar->m_width = ww;
+
+ gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameToolBar->m_widget, xx, yy );
+ gtk_widget_set_usize( m_frameToolBar->m_widget, ww, hh );
+ }
+
+ if (m_frameStatusBar)
+ {
+ int xx = 0 + m_miniEdge;
+ int yy = m_height - wxSTATUS_HEIGHT - m_miniEdge;
+ int ww = m_width - 2*m_miniEdge;
+ int hh = wxSTATUS_HEIGHT;
+
+ m_frameStatusBar->m_x = xx;
+ m_frameStatusBar->m_y = yy;
+ m_frameStatusBar->m_width = ww;
+ m_frameStatusBar->m_height = hh;
+
+ gtk_myfixed_move( GTK_MYFIXED(m_wxwindow), m_frameStatusBar->m_widget, xx, yy );
+ gtk_widget_set_usize( m_frameStatusBar->m_widget, ww, hh );
+ }
+
+ m_sizeSet = TRUE;
+
+ wxSizeEvent event( wxSize(m_width,m_height), GetId() );
+ event.SetEventObject( this );
+ GetEventHandler()->ProcessEvent( event );
+
+ m_resizing = FALSE;
+}
+
+void wxFrame::OnIdle(wxIdleEvent& WXUNUSED(event) )
+{
+ if (!m_sizeSet)
+ GtkOnSize( m_x, m_y, m_width, m_height );
+
+ DoMenuUpdates();