parent = GetItemParent( parent );
}
- EnsureVisible( itemId );
-
// ctrl press
if (unselect_others)
{
RefreshLine( m_current );
}
+ // This can cause idle processing to select the root
+ // if no item is selected, so it must be after the
+ // selection is set
+ EnsureVisible( itemId );
+
event.SetEventType(wxEVT_COMMAND_TREE_SEL_CHANGED);
GetEventHandler()->ProcessEvent( event );
}
wxTRANSPARENT_PEN;
wxColour colText;
- if ( item->IsSelected() )
+ if ( item->IsSelected()
+#ifdef __WXMAC__
+ // On wxMac, if the tree doesn't have the focus we draw an empty
+ // 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
+#endif
+ )
{
colText = wxSystemSettings::GetColour(wxSYS_COLOUR_HIGHLIGHTTEXT);
}
}
}
-wxTreeItemId wxGenericTreeCtrl::DoHitTest(const wxPoint& point, int& flags)
+wxTreeItemId wxGenericTreeCtrl::DoTreeHitTest(const wxPoint& point, int& flags)
{
// JACS: removed wxYieldIfNeeded() because it can cause the window
// to be deleted from under us if a close window event is pending
wxTreeEvent nevent( command, GetId() );
nevent.m_item = m_current;
nevent.SetEventObject(this);
- nevent.SetPoint(pt);
+ nevent.SetPoint(CalcScrolledPosition(pt));
// by default the dragging is not supported, the user code must
// explicitly allow the event for it to take place
wxTreeEvent eventEndDrag(wxEVT_COMMAND_TREE_END_DRAG, GetId());
eventEndDrag.m_item = item;
- eventEndDrag.m_pointDrag = pt;
+ eventEndDrag.m_pointDrag = CalcScrolledPosition(pt);
eventEndDrag.SetEventObject(this);
(void)GetEventHandler()->ProcessEvent(eventEndDrag);
{
wxCHECK_RET( m_freezeCount > 0, _T("thawing unfrozen tree control?") );
- if ( !--m_freezeCount )
+ if ( --m_freezeCount == 0 )
{
Refresh();
}