We need to send TVN_EXPAND* on collapsing either when the user has
initiated it with the mouse/keybaord or in response to a TVM_EXPAND
when the state is not TVIS_EXPANDEDONCE. This brings the logic into
line with TREEVIEW_Expand.
diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index 2a025eb..833bfe8 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -3134,7 +3134,7 @@
if (!(wineItem->state & TVIS_EXPANDED))
return FALSE;
- if (bUser)
+ if (bUser || !(wineItem->state & TVIS_EXPANDEDONCE))
TREEVIEW_SendExpanding(infoPtr, wineItem, action);
if (wineItem->firstChild == NULL)
@@ -3142,7 +3142,7 @@
wineItem->state &= ~TVIS_EXPANDED;
- if (bUser)
+ if (bUser || !(wineItem->state & TVIS_EXPANDEDONCE))
TREEVIEW_SendExpanded(infoPtr, wineItem, action);
bSetSelection = (infoPtr->selectedItem != NULL
@@ -3153,9 +3153,11 @@
if (bRemoveChildren)
{
+ INT old_cChildren = wineItem->cChildren;
TRACE("TVE_COLLAPSERESET\n");
wineItem->state &= ~TVIS_EXPANDEDONCE;
TREEVIEW_RemoveAllChildren(infoPtr, wineItem);
+ wineItem->cChildren = old_cChildren;
}
if (wineItem->firstChild)