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:
parent
5e66eee143
commit
dda4f6c089
@ -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);
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
// ----------------------------------------------------------------------------
|
||||
|
Loading…
Reference in New Issue
Block a user