X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/54a4121a62a1a7bc6c003915d247e8362d27750b..da88bc1a188ea03b885e043c3f1aa50a4d7b67df:/src/generic/treectlg.cpp diff --git a/src/generic/treectlg.cpp b/src/generic/treectlg.cpp index c1cd97fdfb..98097d6a8e 100644 --- a/src/generic/treectlg.cpp +++ b/src/generic/treectlg.cpp @@ -2232,7 +2232,11 @@ void wxGenericTreeCtrl::PaintItem(wxGenericTreeItem *item, wxDC& dc) else { int flags = wxCONTROL_SELECTED; - if (m_hasFocus) + if (m_hasFocus +#ifdef __WXMAC__ + && IsControlActive( (ControlRef)GetHandle() ) +#endif + ) flags |= wxCONTROL_FOCUSED; if ((item == m_current) && (m_hasFocus)) flags |= wxCONTROL_CURRENT; @@ -2374,7 +2378,7 @@ void wxGenericTreeCtrl::PaintLevel( wxGenericTreeItem *item, wxDC &dc, int level // rectangle, so we want to make sure that the text is visible // against the normal background, not the highlightbackground, so // don't use the highlight text colour unless we have the focus. - && m_hasFocus + && m_hasFocus && IsControlActive( (ControlRef)GetHandle() ) #endif ) { @@ -3649,11 +3653,32 @@ void wxGenericTreeCtrl::DoDirtyProcessing() wxSize wxGenericTreeCtrl::DoGetBestSize() const { + // make sure all positions are calculated as normally this only done during + // idle time but we need them for base class DoGetBestSize() to return the + // correct result + wxConstCast(this, wxGenericTreeCtrl)->CalculatePositions(); + wxSize size = wxTreeCtrlBase::DoGetBestSize(); - // The generic control seems to have an implicit border + // there seems to be an implicit extra border around the items, although + // I'm not really sure where does it come from -- but without this, the + // scrollbars appear in a tree with default/best size size.IncBy(4, 4); + // and the border has to be rounded up to a multiple of PIXELS_PER_UNIT or + // scrollbars still appear + const wxSize& borderSize = GetWindowBorderSize(); + + int dx = (size.x - borderSize.x) % PIXELS_PER_UNIT; + if ( dx ) + size.x += PIXELS_PER_UNIT - dx; + int dy = (size.y - borderSize.y) % PIXELS_PER_UNIT; + if ( dy ) + size.y += PIXELS_PER_UNIT - dy; + + // we need to update the cache too as the base class cached its own value + CacheBestSize(size); + return size; }