void ClearFocusedItem();
void SetFocusedItem(const wxTreeItemId& item);
+ // check if the given flags (taken from TV_HITTESTINFO structure)
+ // indicate a position "on item": this is less trivial than just checking
+ // for TVHT_ONITEM because we consider that points to the left and right of
+ // item text are also "on item" when wxTR_FULL_ROW_HIGHLIGHT is used as the
+ // item visually spans the entire breadth of the window then
+ bool MSWIsOnItem(unsigned flags) const;
+
+
// the hash storing the items attributes (indexed by item ids)
wxMapTreeAttr m_attrs;
return true;
}
+bool wxTreeCtrl::MSWIsOnItem(unsigned flags) const
+{
+ unsigned mask = TVHT_ONITEM;
+ if ( HasFlag(wxTR_FULL_ROW_HIGHLIGHT) )
+ mask |= TVHT_ONITEMINDENT | TVHT_ONITEMRIGHT;
+
+ return (flags & mask) != 0;
+}
+
bool wxTreeCtrl::MSWHandleSelectionKey(unsigned vkey)
{
const bool bCtrl = wxIsCtrlDown();
m_htClickedItem.Unset();
- if ( !(tvht.flags & TVHT_ONITEM) )
+ if ( !MSWIsOnItem(tvht.flags) )
{
if ( tvht.flags & TVHT_ONITEMBUTTON )
{
}
}
- if ( !m_dragStarted &&
- (tvht.flags & TVHT_ONITEMSTATEICON ||
- tvht.flags & TVHT_ONITEMICON ||
- tvht.flags & TVHT_ONITEM) )
+ if ( !m_dragStarted && MSWIsOnItem(tvht.flags) )
{
processed = true;
}
::ScreenToClient(GetHwnd(), &tvhti.pt);
if ( TreeView_HitTest(GetHwnd(), &tvhti) )
{
- if ( tvhti.flags & TVHT_ONITEM )
+ if ( MSWIsOnItem(tvhti.flags) )
{
event.m_item = tvhti.hItem;
eventType = (int)hdr->code == NM_DBLCLK