comctl32/treeview: Accept null item handle as a root for TVM_DELETEITEM.
This commit is contained in:
parent
198f6e75ee
commit
04e5e9cfa0
|
@ -42,6 +42,7 @@ static const char *TEST_CALLBACK_TEXT = "callback_text";
|
||||||
#define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got)
|
#define expect(expected, got) ok(got == expected, "Expected %d, got %d\n", expected, got)
|
||||||
|
|
||||||
static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
|
static struct msg_sequence *sequences[NUM_MSG_SEQUENCES];
|
||||||
|
static struct msg_sequence *item_sequence[1];
|
||||||
|
|
||||||
static const struct message FillRootSeq[] = {
|
static const struct message FillRootSeq[] = {
|
||||||
{ TVM_INSERTITEM, sent },
|
{ TVM_INSERTITEM, sent },
|
||||||
|
@ -958,6 +959,21 @@ static LRESULT CALLBACK parent_wnd_proc(HWND hWnd, UINT message, WPARAM wParam,
|
||||||
ok(SendMessage(pHdr->hwndFrom, TVM_GETITEMRECT, TRUE, (LPARAM)&rect), "Failed to get rect for second visible item.\n");
|
ok(SendMessage(pHdr->hwndFrom, TVM_GETITEMRECT, TRUE, (LPARAM)&rect), "Failed to get rect for second visible item.\n");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case TVN_DELETEITEMA:
|
||||||
|
{
|
||||||
|
struct message item;
|
||||||
|
|
||||||
|
ok(pTreeView->itemNew.mask == 0, "got wrong mask 0x%x\n", pTreeView->itemNew.mask);
|
||||||
|
|
||||||
|
ok(pTreeView->itemOld.mask == (TVIF_HANDLE | TVIF_PARAM), "got wrong mask 0x%x\n", pTreeView->itemOld.mask);
|
||||||
|
ok(pTreeView->itemOld.hItem != NULL, "got %p\n", pTreeView->itemOld.hItem);
|
||||||
|
|
||||||
|
memset(&item, 0, sizeof(item));
|
||||||
|
item.lParam = (LPARAM)pTreeView->itemOld.hItem;
|
||||||
|
add_message(item_sequence, 0, &item);
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1324,6 +1340,37 @@ static void test_WM_PAINT(void)
|
||||||
DestroyWindow(hTree);
|
DestroyWindow(hTree);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_delete_items(void)
|
||||||
|
{
|
||||||
|
const struct message *msg;
|
||||||
|
HWND hTree;
|
||||||
|
INT ret;
|
||||||
|
|
||||||
|
hTree = create_treeview_control();
|
||||||
|
fill_tree(hTree);
|
||||||
|
|
||||||
|
/* check delete order */
|
||||||
|
flush_sequences(item_sequence, 1);
|
||||||
|
ret = SendMessage(hTree, TVM_DELETEITEM, 0, 0);
|
||||||
|
ok(ret == TRUE, "got %d\n", ret);
|
||||||
|
|
||||||
|
msg = item_sequence[0]->sequence;
|
||||||
|
ok(item_sequence[0]->count == 2, "expected 2 items, got %d\n", item_sequence[0]->count);
|
||||||
|
|
||||||
|
if (item_sequence[0]->count == 2)
|
||||||
|
{
|
||||||
|
todo_wine {
|
||||||
|
ok(msg[0].lParam == (LPARAM)hChild, "expected %p, got %lx\n", hChild, msg[0].lParam);
|
||||||
|
ok(msg[1].lParam == (LPARAM)hRoot, "expected %p, got %lx\n", hRoot, msg[1].lParam);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = SendMessageA(hTree, TVM_GETCOUNT, 0, 0);
|
||||||
|
ok(ret == 0, "got %d\n", ret);
|
||||||
|
|
||||||
|
DestroyWindow(hTree);
|
||||||
|
}
|
||||||
|
|
||||||
START_TEST(treeview)
|
START_TEST(treeview)
|
||||||
{
|
{
|
||||||
HMODULE hComctl32;
|
HMODULE hComctl32;
|
||||||
|
@ -1348,6 +1395,7 @@ START_TEST(treeview)
|
||||||
InitCommonControls();
|
InitCommonControls();
|
||||||
|
|
||||||
init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
|
init_msg_sequences(sequences, NUM_MSG_SEQUENCES);
|
||||||
|
init_msg_sequences(item_sequence, 1);
|
||||||
|
|
||||||
wc.style = CS_HREDRAW | CS_VREDRAW;
|
wc.style = CS_HREDRAW | CS_VREDRAW;
|
||||||
wc.cbClsExtra = 0;
|
wc.cbClsExtra = 0;
|
||||||
|
@ -1390,6 +1438,7 @@ START_TEST(treeview)
|
||||||
test_expandnotify();
|
test_expandnotify();
|
||||||
test_TVS_SINGLEEXPAND();
|
test_TVS_SINGLEEXPAND();
|
||||||
test_WM_PAINT();
|
test_WM_PAINT();
|
||||||
|
test_delete_items();
|
||||||
|
|
||||||
if (!load_v6_module(&ctx_cookie, &hCtx))
|
if (!load_v6_module(&ctx_cookie, &hCtx))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1513,7 +1513,7 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM wineItem)
|
||||||
TREEVIEW_ITEM *parent, *prev = NULL;
|
TREEVIEW_ITEM *parent, *prev = NULL;
|
||||||
BOOL visible = FALSE;
|
BOOL visible = FALSE;
|
||||||
|
|
||||||
if (wineItem == TVI_ROOT)
|
if (wineItem == TVI_ROOT || !wineItem)
|
||||||
{
|
{
|
||||||
TRACE("TVI_ROOT\n");
|
TRACE("TVI_ROOT\n");
|
||||||
parent = infoPtr->root;
|
parent = infoPtr->root;
|
||||||
|
|
Loading…
Reference in New Issue