From: Jacob Czekalla jczekalla@codeweavers.com
--- dlls/comctl32/tests/treeview.c | 59 ++++++++++++++++++++++++++++++++-- 1 file changed, 57 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/tests/treeview.c b/dlls/comctl32/tests/treeview.c index db4cc4fda71..5dd4fe12bdc 100644 --- a/dlls/comctl32/tests/treeview.c +++ b/dlls/comctl32/tests/treeview.c @@ -51,6 +51,7 @@ static const char *g_endedit_overwrite_contents; static char *g_endedit_overwrite_ptr; static HFONT g_customdraw_font; static BOOL g_v6; +static int g_reject_tvn_itemexpanding = 0;
#define NUM_MSG_SEQUENCES 3 #define TREEVIEW_SEQ_INDEX 0 @@ -1361,7 +1362,11 @@ static LRESULT CALLBACK parent_wnd_proc(HWND hWnd, UINT message, WPARAM wParam, } case TVN_ITEMEXPANDINGA: { - UINT newmask = pTreeView->itemNew.mask & ~TVIF_CHILDREN; + UINT newmask; + + if (g_reject_tvn_itemexpanding) + return TRUE; + newmask = pTreeView->itemNew.mask & ~TVIF_CHILDREN; ok(newmask == (TVIF_HANDLE | TVIF_SELECTEDIMAGE | TVIF_IMAGE | TVIF_PARAM | TVIF_STATE), "got wrong mask %x\n", pTreeView->itemNew.mask); @@ -1837,6 +1842,7 @@ static void test_expandnotify(void) HWND hTree; BOOL ret; TVITEMA item; + RECT rc;
hTree = create_treeview_control(0); fill_tree(hTree); @@ -1898,6 +1904,55 @@ static void test_expandnotify(void)
DestroyWindow(hTree);
+ /* check that expansion can be denied by parent */ + hTree = create_treeview_control(0); + fill_tree(hTree); + + g_reject_tvn_itemexpanding = 1; + memset(&item, 0, sizeof(item)); + item.mask = TVIF_STATE; + item.hItem = hRoot; + + SendMessageA(hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)item.hItem); + g_reject_tvn_itemexpanding = 0; + + /* check if it's expanded */ + item.state = 0; + SendMessageA(hTree, TVM_GETITEMA, 0, (LPARAM)&item); + todo_wine ok(!(item.state & TVIS_EXPANDED), "expected no expansion\n"); + + DestroyWindow(hTree); + + hTree = create_treeview_control(0); + fill_tree(hTree); + + memset(&item, 0, sizeof(item)); + item.hItem = hRoot; + item.mask = TVIF_STATE; + + SendMessageA(hTree, TVM_EXPAND, TVE_EXPAND, (LPARAM)item.hItem); + + item.state = TVIS_EXPANDED; + SendMessageA(hTree, TVM_GETITEMA, 0, (LPARAM)&item); + todo_wine ok(item.state & TVIS_EXPANDED, "expected expansion\n"); + + memset(&item, 0, sizeof(item)); + item.hItem = hRoot; + item.mask = TVIF_STATE; + *((HTREEITEM *)&rc) = item.hItem; + g_reject_tvn_itemexpanding = 1; + + /* simulate double click to get around TVIS_EXPANDEDONCE */ + SendMessageA(hTree, TVM_GETITEMRECT, TRUE, (LPARAM)&rc); + SendMessageA(hTree, WM_LBUTTONDBLCLK, MK_LBUTTON, MAKELPARAM(rc.left + ((rc.right - rc.left) / 2), rc.top + ((rc.bottom - rc.top) / 2))); + + item.state = TVIS_EXPANDED; + ret = SendMessageA(hTree, TVM_GETITEMA, 0, (LPARAM)&item); + todo_wine ok(item.state & TVIS_EXPANDED, "expected expansion\n"); + g_reject_tvn_itemexpanding = 0; + + DestroyWindow(hTree); + /* test TVM_GETITEMRECT inside TVN_ITEMEXPANDED notification */ hTree = create_treeview_control(0); fill_tree(hTree); @@ -3152,4 +3207,4 @@ START_TEST(treeview) test_TVM_SORTCHILDREN();
unload_v6_module(ctx_cookie, hCtx); -} +} \ No newline at end of file