Fix unwanted focus events when deleting a wxTreeCtrl item in wxMSW.

Disable setting focus in response to TVN_SELCHANGING when deleting an item in
a single selection control too -- this was already done in multi selection
case but not in this one, for some reason.

Also refactor the code to avoid duplicating TreeView_DeleteItem() calls.

Closes #15721.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@75308 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2013-11-28 12:43:17 +00:00
parent 9180e2b06f
commit c749d9e638
2 changed files with 18 additions and 12 deletions

View File

@@ -304,6 +304,9 @@ private:
// item visually spans the entire breadth of the window then
bool MSWIsOnItem(unsigned flags) const;
// Delete the given item from the native control.
bool MSWDeleteItem(const wxTreeItemId& item);
// the hash storing the items attributes (indexed by item ids)
wxMapTreeAttr m_attrs;

View File

@@ -1598,6 +1598,18 @@ wxTreeItemId wxTreeCtrl::DoInsertItem(const wxTreeItemId& parent,
return DoInsertAfter(parent, idPrev, text, image, selectedImage, data);
}
bool wxTreeCtrl::MSWDeleteItem(const wxTreeItemId& item)
{
TempSetter set(m_changingSelection);
if ( !TreeView_DeleteItem(GetHwnd(), HITEM(item)) )
{
wxLogLastError(wxT("TreeView_DeleteItem"));
return false;
}
return true;
}
void wxTreeCtrl::Delete(const wxTreeItemId& item)
{
// unlock tree selections on vista, without this the
@@ -1619,14 +1631,8 @@ void wxTreeCtrl::Delete(const wxTreeItemId& item)
}
}
{
TempSetter set(m_changingSelection);
if ( !TreeView_DeleteItem(GetHwnd(), HITEM(item)) )
{
wxLogLastError(wxT("TreeView_DeleteItem"));
return;
}
}
if ( !MSWDeleteItem(item) )
return;
if ( !selected )
{
@@ -1657,10 +1663,7 @@ void wxTreeCtrl::Delete(const wxTreeItemId& item)
}
else
{
if ( !TreeView_DeleteItem(GetHwnd(), HITEM(item)) )
{
wxLogLastError(wxT("TreeView_DeleteItem"));
}
MSWDeleteItem(item);
}
}