]> git.saurik.com Git - wxWidgets.git/commitdiff
Applied patch [ 651640 ] Toolbar sizing fix
authorJulian Smart <julian@anthemion.co.uk>
Tue, 10 Dec 2002 21:41:31 +0000 (21:41 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Tue, 10 Dec 2002 21:41:31 +0000 (21:41 +0000)
This patch fixes the problem discussed on wx-dev
mailing list. (Message title "wxUniversal: How is the
parent notified when a child changes its size")

In short:
- This patch makes sure the toolbar notifies the parent of
any size change, this will give the parent the opportunity
to resize the frame client size and to make sure the
toolbar is in the right place.

Hans Van Leemputten

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@18181 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/univ/frame.h
include/wx/univ/toolbar.h
src/univ/toolbar.cpp

index a181bba996084f7ed949eba8d5d2573be0384047..4f13277f1ea16556ee8f1fa85a2ef00f0fff2a24 100644 (file)
@@ -64,12 +64,12 @@ public:
     virtual int GetMinWidth() const;
     virtual int GetMinHeight() const;
 
+    // sends wxSizeEvent to itself (used after attaching xxxBar)
+    virtual void SendSizeEvent();
+
 protected:
     void OnSize(wxSizeEvent& event);
 
-    // sends wxSizeEvent to itself (used after attaching xxxBar)
-    void SendSizeEvent();
-
     virtual void DoGetClientSize(int *width, int *height) const;
     virtual void DoSetClientSize(int width, int height);
 
index 5ca1a31a6811b800a1e2877b7175adce32eebb7a..5aa190b1967eb76bb93a37611ada9df43a390d8c 100644 (file)
@@ -98,6 +98,9 @@ protected:
                                long numArg = -1,
                                const wxString& strArg = wxEmptyString);
     virtual wxSize DoGetBestClientSize() const;
+    virtual void DoSetSize(int x, int y,
+                           int width, int height,
+                           int sizeFlags = wxSIZE_AUTO);
     virtual void DoDraw(wxControlRenderer *renderer);
 
     // get the bounding rect for the given tool
index 1745a900fd93144c277f0a39396cf38a967a9a0c..8f77a0470eb8d0c07c20211c6efa4fda4b08220e 100644 (file)
@@ -156,6 +156,8 @@ bool wxToolBar::Create(wxWindow *parent,
 
 wxToolBar::~wxToolBar()
 {
+    // Make sure the toolbar is removed from the parent.
+    SetSize(0,0);
 }
 
 void wxToolBar::SetMargins(int x, int y)
@@ -423,6 +425,39 @@ wxSize wxToolBar::DoGetBestClientSize() const
     return wxSize(m_maxWidth, m_maxHeight);
 }
 
+void wxToolBar::DoSetSize(int x, int y, int width, int height, int sizeFlags)
+{
+    int old_width, old_height;
+    GetSize(&old_width, &old_height);
+
+    wxToolBarBase::DoSetSize(x, y, width, height, sizeFlags);
+    
+    // Correct width and height if needed.
+    if ( width == -1 || height == -1 )
+    {
+        int tmp_width, tmp_height;
+        GetSize(&tmp_width, &tmp_height);
+
+        if ( width == -1 )
+            width = tmp_width;
+        if ( height == -1 )
+            height = tmp_height;
+    }
+  
+    // We must refresh the frame size when the toolbar changes size
+    // otherwise the toolbar can be shown incorrectly
+    if ( old_width != width || old_height != height )
+    {
+        // But before we send the size event check it 
+        // we have a frame that is not being deleted.
+        wxFrame *frame = wxDynamicCast(GetParent(), wxFrame);
+        if ( frame && !frame->IsBeingDeleted() )
+        {
+            frame->SendSizeEvent();
+        }
+    }
+}
+
 // ----------------------------------------------------------------------------
 // wxToolBar drawing
 // ----------------------------------------------------------------------------