[2/4] comctl32: do not send TVN_ITEMEXPANDING when expanding item with no children

Daniel Jelinski djelinski1 at gmail.com
Fri Oct 12 16:53:36 CDT 2012


-------------- next part --------------
From 4ce8e5ea93897e03e1c3bbd0be90c9179890a37a Mon Sep 17 00:00:00 2001
From: Daniel Jelinski <djelinski1 at gmail.com>
Date: Thu, 27 Sep 2012 21:06:48 +0200
Subject: comctl32/treeview: do not send TVN_ITEMEXPANDING when expanding item
 with no children

also, send it when re-expanding expanded item or re-collapsing collapsed one.
Tests in later commit (look for VK_ADD/VK_SUBSTRACT)

This allows for removing all items from a collapsed node by using TVE_COLLAPSERESET.
Fixes bug 30282, should also fix bugs: 23591, 22636, 8667
---
 dlls/comctl32/tests/treeview.c |    2 +-
 dlls/comctl32/treeview.c       |    6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/dlls/comctl32/tests/treeview.c b/dlls/comctl32/tests/treeview.c
index baf0e02..a4b543c 100644
--- a/dlls/comctl32/tests/treeview.c
+++ b/dlls/comctl32/tests/treeview.c
@@ -1481,7 +1481,7 @@ static void test_expandnotify(void)
     flush_sequences(sequences, NUM_MSG_SEQUENCES);
     ret = SendMessageA(hTree, WM_KEYDOWN, VK_ADD, 0);
     expect(FALSE, ret);
-    ok_sequence(sequences, PARENT_SEQ_INDEX, parent_expand_empty_kb_seq, "expand node with no children", TRUE);
+    ok_sequence(sequences, PARENT_SEQ_INDEX, parent_expand_empty_kb_seq, "expand node with no children", FALSE);
 
     DestroyWindow(hTree);
 }
diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c
index 032f49e..ce61704 100644
--- a/dlls/comctl32/treeview.c
+++ b/dlls/comctl32/treeview.c
@@ -3237,7 +3237,7 @@ TREEVIEW_Collapse(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item,
 
     TRACE("TVE_COLLAPSE %p %s\n", item, TREEVIEW_ItemName(item));
 
-    if (!(item->state & TVIS_EXPANDED))
+    if (!TREEVIEW_HasChildren(infoPtr, item))
 	return FALSE;
 
     if (bUser || !(item->state & TVIS_EXPANDEDONCE))
@@ -3344,8 +3344,8 @@ TREEVIEW_Expand(TREEVIEW_INFO *infoPtr, TREEVIEW_ITEM *item,
 
     TRACE("(%p, %p, partial=%d, %d\n", infoPtr, item, partial, user);
 
-    if (item->state & TVIS_EXPANDED)
-       return TRUE;
+    if (!TREEVIEW_HasChildren(infoPtr, item))
+	return FALSE;
 
     tmpItem = item; nextItem = NULL;
     while (tmpItem)
-- 
1.7.5.4


More information about the wine-patches mailing list