Applied patch [ 651640 ] Toolbar sizing fix

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
This commit is contained in:
Julian Smart 2002-12-10 21:41:31 +00:00
parent 5e66eee143
commit dda4f6c089
3 changed files with 41 additions and 3 deletions

View 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);

View 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

View 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
// ----------------------------------------------------------------------------