X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b2fcdf2b61d0a95c84371509160894861413b1cb..ce22ac4592fccaedd8324e7a8f08b510748827e4:/src/gtk/toplevel.cpp diff --git a/src/gtk/toplevel.cpp b/src/gtk/toplevel.cpp index 3ee1c1efe0..7b883348dc 100644 --- a/src/gtk/toplevel.cpp +++ b/src/gtk/toplevel.cpp @@ -202,7 +202,9 @@ static gboolean gtk_frame_focus_out_callback( GtkWidget *widget, //----------------------------------------------------------------------------- extern "C" { -static gboolean gtk_frame_focus_callback( GtkWidget *widget, GtkDirectionType WXUNUSED(d), wxWindow *WXUNUSED(win) ) +static gboolean gtk_frame_focus_callback( GtkWidget *WXUNUSED(widget), + GtkDirectionType WXUNUSED(d), + wxWindow *WXUNUSED(win) ) { if (g_isIdle) wxapp_install_idle_handler(); @@ -237,8 +239,13 @@ static void gtk_frame_size_callback( GtkWidget *WXUNUSED(widget), GtkAllocation* (int)alloc->height ); */ + // Tell the wxWindow class about the new size win->m_width = alloc->width; win->m_height = alloc->height; + + if (win->m_mainWidget) + GTK_PIZZA(win->m_mainWidget)->m_width = win->m_width; + win->GtkUpdateSize(); } } @@ -559,6 +566,8 @@ bool wxTopLevelWindowGTK::Create( wxWindow *parent, GTK_WIDGET_UNSET_FLAGS( m_mainWidget, GTK_CAN_FOCUS ); gtk_container_add( GTK_CONTAINER(m_widget), m_mainWidget ); + GTK_PIZZA(m_mainWidget)->m_width = m_width; + if (m_miniEdge == 0) // wxMiniFrame has its own version. { // For m_mainWidget themes @@ -800,7 +809,7 @@ bool wxTopLevelWindowGTK::Show( bool show ) much ugly flicker or from within the size_allocate handler, because GTK 1.1.X forbids that. */ - GtkOnSize( m_x, m_y, m_width, m_height ); + GtkOnSize(); } // This seems no longer to be needed and the call @@ -852,6 +861,9 @@ void wxTopLevelWindowGTK::DoSetSize( int x, int y, int width, int height, int si } if (width != -1) m_width = width; if (height != -1) m_height = height; + + if (m_mainWidget) + GTK_PIZZA(m_mainWidget)->m_width = m_width; /* if ((sizeFlags & wxSIZE_AUTO_WIDTH) == wxSIZE_AUTO_WIDTH) @@ -915,18 +927,16 @@ void wxTopLevelWindowGTK::DoGetClientSize( int *width, int *height ) const if (height) { - *height = m_height; - - // mini edge - *height -= m_miniEdge*2 + m_miniTitle; + *height = m_height - 2 * m_miniEdge + m_miniTitle; + if (*height < 0) + *height = 0; } if (width) { - *width = m_width; - - *width -= m_miniEdge*2; + *width = m_width - 2 * m_miniEdge; + if (*width < 0) + *width = 0; } - } void wxTopLevelWindowGTK::DoSetClientSize( int width, int height ) @@ -937,22 +947,14 @@ void wxTopLevelWindowGTK::DoSetClientSize( int width, int height ) width + m_miniEdge*2, height + m_miniEdge*2 + m_miniTitle, 0); } -void wxTopLevelWindowGTK::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), - int width, int height ) +void wxTopLevelWindowGTK::GtkOnSize() { - // due to a bug in gtk, x,y are always 0 - // m_x = x; - // m_y = y; - // avoid recursions if (m_resizing) return; m_resizing = true; if ( m_wxwindow == NULL ) return; - m_width = width; - m_height = height; - /* wxMDIChildFrame derives from wxFrame but it _is_ a wxWindow as it uses wxWindow::Create to create it's GTK equivalent. m_mainWidget is only set in wxFrame::Create so it is used to check what kind of frame we @@ -1029,7 +1031,12 @@ void wxTopLevelWindowGTK::GtkOnSize( int WXUNUSED(x), int WXUNUSED(y), int client_y = m_miniEdge + m_miniTitle; int client_w = m_width - 2*m_miniEdge; int client_h = m_height - 2*m_miniEdge - m_miniTitle; + if (client_w < 0) + client_w = 0; + if (client_h < 0) + client_h = 0; + // Let the parent perform the resize gtk_pizza_set_size( GTK_PIZZA(m_mainWidget), m_wxwindow, client_x, client_y, client_w, client_h ); @@ -1054,7 +1061,7 @@ void wxTopLevelWindowGTK::OnInternalIdle() { if (!m_sizeSet && GTK_WIDGET_REALIZED(m_wxwindow)) { - GtkOnSize( m_x, m_y, m_width, m_height ); + GtkOnSize(); // we'll come back later if (g_isIdle)