X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/3b7067a05dd2373eb4d6b1a2d6d5699232eaa333..11a23db53128bf244a089123b7fd27deb577a889:/src/gtk/frame.cpp diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index a44b4bf9ec..3f7ab5ab1d 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -2,7 +2,6 @@ // Name: src/gtk/frame.cpp // Purpose: // Author: Robert Roebling -// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,6 +18,7 @@ #endif // WX_PRECOMP #include +#include "wx/gtk/private/gtk2-compat.h" #if wxUSE_LIBHILDON #include @@ -73,16 +73,19 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const wxFrameBase::DoGetClientSize(width, height); + if (m_useCachedClientSize) + return; + if (height) { #if wxUSE_MENUS_NATIVE // menu bar if (m_frameMenuBar && m_frameMenuBar->IsShown()) { - GtkRequisition req; - gtk_widget_size_request(m_frameMenuBar->m_widget, &req); + int h; + gtk_widget_get_preferred_height(m_frameMenuBar->m_widget, NULL, &h); #if !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 - *height -= req.height; + *height -= h; #endif } #endif // wxUSE_MENUS_NATIVE @@ -98,17 +101,23 @@ void wxFrame::DoGetClientSize( int *width, int *height ) const // tool bar if (m_frameToolBar && m_frameToolBar->IsShown()) { - GtkRequisition req; - gtk_widget_size_request(m_frameToolBar->m_widget, &req); if (m_frameToolBar->IsVertical()) { if (width) - *width -= req.width; + { + int w; + gtk_widget_get_preferred_width(m_frameToolBar->m_widget, NULL, &w); + *width -= w; + } } else { if (height) - *height -= req.height; + { + int h; + gtk_widget_get_preferred_height(m_frameToolBar->m_widget, NULL, &h); + *height -= h; + } } } #endif // wxUSE_TOOLBAR @@ -280,7 +289,8 @@ void wxFrame::DetachMenuBar() wxFrameBase::DetachMenuBar(); // make sure next size_allocate causes a wxSizeEvent - m_oldClientWidth = 0; + m_useCachedClientSize = false; + m_clientWidth = 0; } void wxFrame::AttachMenuBar( wxMenuBar *menuBar ) @@ -291,9 +301,8 @@ void wxFrame::AttachMenuBar( wxMenuBar *menuBar ) { #if wxUSE_LIBHILDON || wxUSE_LIBHILDON2 hildon_window_set_menu(HILDON_WINDOW(m_widget), - GTK_MENU(m_frameMenuBar->m_menubar)); + GTK_MENU(m_frameMenuBar->m_widget)); #else // !wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 - m_frameMenuBar->SetParent(this); // menubar goes into top of vbox (m_mainWidget) gtk_box_pack_start( @@ -307,7 +316,8 @@ void wxFrame::AttachMenuBar( wxMenuBar *menuBar ) #endif // wxUSE_LIBHILDON || wxUSE_LIBHILDON2/!wxUSE_LIBHILDON && !wxUSE_LIBHILDON2 } // make sure next size_allocate causes a wxSizeEvent - m_oldClientWidth = 0; + m_useCachedClientSize = false; + m_clientWidth = 0; } #endif // wxUSE_MENUS_NATIVE @@ -323,11 +333,11 @@ void wxFrame::SetToolBar(wxToolBar *toolbar) // Vertical toolbar and m_wxwindow go into an hbox, inside the // vbox (m_mainWidget). hbox is created on demand. GtkWidget* hbox = gtk_widget_get_parent(m_wxwindow); - if (!GTK_IS_HBOX(hbox)) + if (hbox == m_mainWidget) { - hbox = gtk_hbox_new(false, 0); + hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show(hbox); - gtk_container_add(GTK_CONTAINER(m_mainWidget), hbox); + gtk_box_pack_start(GTK_BOX(m_mainWidget), hbox, true, true, 0); gtk_widget_reparent(m_wxwindow, hbox); } gtk_widget_reparent(toolbar->m_widget, hbox); @@ -358,7 +368,8 @@ void wxFrame::SetToolBar(wxToolBar *toolbar) gtk_widget_set_size_request(toolbar->m_widget, -1, -1); } // make sure next size_allocate causes a wxSizeEvent - m_oldClientWidth = 0; + m_useCachedClientSize = false; + m_clientWidth = 0; } #endif // wxUSE_TOOLBAR @@ -375,7 +386,8 @@ void wxFrame::SetStatusBar(wxStatusBar *statbar) gtk_box_set_child_packing(GTK_BOX(m_mainWidget), statbar->m_widget, false, false, 0, GTK_PACK_END); // make sure next size_allocate on statusbar causes a size event - statbar->m_oldClientWidth = 0; + statbar->m_useCachedClientSize = false; + statbar->m_clientWidth = 0; int h = -1; if (statbar->m_wxwindow) { @@ -385,6 +397,7 @@ void wxFrame::SetStatusBar(wxStatusBar *statbar) gtk_widget_set_size_request(statbar->m_widget, -1, h); } // make sure next size_allocate causes a wxSizeEvent - m_oldClientWidth = 0; + m_useCachedClientSize = false; + m_clientWidth = 0; } #endif // wxUSE_STATUSBAR