diff --git a/include/wx/generic/collpaneg.h b/include/wx/generic/collpaneg.h index 27f1e87a75..7ea14bb26c 100644 --- a/include/wx/generic/collpaneg.h +++ b/include/wx/generic/collpaneg.h @@ -73,7 +73,7 @@ public: protected: // overridden methods - virtual wxSize DoGetBestSize() const wxOVERRIDE; + virtual wxSize DoGetBestClientSize() const wxOVERRIDE; int GetBorder() const; diff --git a/src/generic/collheaderctrlg.cpp b/src/generic/collheaderctrlg.cpp index ac5527a312..7d0d2cd034 100644 --- a/src/generic/collheaderctrlg.cpp +++ b/src/generic/collheaderctrlg.cpp @@ -77,17 +77,28 @@ bool wxGenericCollapsibleHeaderCtrl::Create(wxWindow *parent, wxSize wxGenericCollapsibleHeaderCtrl::DoGetBestClientSize() const { - wxClientDC dc(const_cast(this)); - wxSize btnSize = wxRendererNative::Get().GetCollapseButtonSize(const_cast(this), dc); + wxGenericCollapsibleHeaderCtrl* const + self = const_cast(this); + + // The code here parallels that of OnPaint() -- except without drawing. + wxClientDC dc(self); + + wxSize size = wxRendererNative::Get().GetCollapseButtonSize(self, dc); + wxString text; wxControl::FindAccelIndex(GetLabel(), &text); - wxSize textSize = dc.GetTextExtent(text); - // Add some padding if the label is not empty - if ( textSize.x > 0 ) - textSize.x += FromDIP(4); - return wxSize(btnSize.x + textSize.x, - wxMax(textSize.y, btnSize.y)); + const wxSize textSize = dc.GetTextExtent(text); + + size.x += FromDIP(2) + textSize.x; + if ( textSize.y > size.y ) + size.y = textSize.y; + +#ifdef __WXMSW__ + size.IncBy(1); +#endif // __WXMSW__ + + return size; } void wxGenericCollapsibleHeaderCtrl::SetCollapsed(bool collapsed) diff --git a/src/generic/collpaneg.cpp b/src/generic/collpaneg.cpp index 6a7a17af4d..5c570df37a 100644 --- a/src/generic/collpaneg.cpp +++ b/src/generic/collpaneg.cpp @@ -84,8 +84,7 @@ bool wxGenericCollapsiblePane::Create(wxWindow *parent, m_pButton = new wxCollapsibleHeaderCtrl(this, wxID_ANY, label, wxPoint(0, 0), wxDefaultSize); - // on other platforms we put the static line and the button horizontally - m_sz->Add(m_pButton, 0, wxLEFT|wxTOP|wxBOTTOM, GetBorder()); + m_sz->Add(m_pButton, wxSizerFlags().Border(wxALL, GetBorder())); // FIXME: at least under wxGTK1 the background is black if we don't do // this, no idea why... @@ -112,7 +111,7 @@ wxGenericCollapsiblePane::~wxGenericCollapsiblePane() wxDELETE(m_sz); } -wxSize wxGenericCollapsiblePane::DoGetBestSize() const +wxSize wxGenericCollapsiblePane::DoGetBestClientSize() const { // NB: do not use GetSize() but rather GetMinSize() wxSize sz = m_sz->GetMinSize(); diff --git a/src/osx/dataview_osx.cpp b/src/osx/dataview_osx.cpp index 60e57b70f2..ee20e3bfaf 100644 --- a/src/osx/dataview_osx.cpp +++ b/src/osx/dataview_osx.cpp @@ -220,7 +220,15 @@ bool wxOSXDataViewModelNotifier::ValueChanged(wxDataViewItem const& item, unsign bool wxOSXDataViewModelNotifier::Cleared() { - return m_DataViewCtrlPtr->GetDataViewPeer()->Reload(); + // As when individual items are deleted, we must ensure that we don't touch + // the model item possibly being edited, as it's not valid any more. + m_DataViewCtrlPtr->SetDeleting(true); + + const bool rc = m_DataViewCtrlPtr->GetDataViewPeer()->Reload(); + + m_DataViewCtrlPtr->SetDeleting(false); + + return rc; } void wxOSXDataViewModelNotifier::Resort()