Module: wine Branch: master Commit: 71a4ac73e29a5fe05d73bb4ddfba579be500a195 URL: http://source.winehq.org/git/wine.git/?a=commit;h=71a4ac73e29a5fe05d73bb4ddf...
Author: Joachim Priesner joachim.priesner@web.de Date: Sun Feb 14 21:58:14 2016 +0100
comctl32: Treeview: Set visible = TRUE when deleting first visible item.
This fixes a crash when deleting the first visible item if it has visibleOrder < 0 and thus the ISVISIBLE macro returns false (this happens when both insertion and deletion happened while bRedraw == false).
Signed-off-by: Joachim Priesner joachim.priesner@web.de Signed-off-by: Nikolay Sivov nsivov@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/comctl32/tests/treeview.c | 6 +++--- dlls/comctl32/treeview.c | 1 + 2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/dlls/comctl32/tests/treeview.c b/dlls/comctl32/tests/treeview.c index bd030d6..7e6c731 100644 --- a/dlls/comctl32/tests/treeview.c +++ b/dlls/comctl32/tests/treeview.c @@ -1910,6 +1910,9 @@ static void test_delete_items(void) /* Regression test for a crash when deleting the first visible item while bRedraw == false. */ hTree = create_treeview_control(0);
+ ret = SendMessageA(hTree, WM_SETREDRAW, FALSE, 0); + ok(ret == 0, "got %d\n", ret); + ins.hParent = TVI_ROOT; ins.hInsertAfter = TVI_ROOT; U(ins).item.mask = TVIF_TEXT; @@ -1924,9 +1927,6 @@ static void test_delete_items(void) hItem2 = TreeView_InsertItemA(hTree, &ins); ok(hItem2 != NULL, "InsertItem failed\n");
- ret = SendMessageA(hTree, WM_SETREDRAW, FALSE, 0); - ok(ret == 0, "got %d\n", ret); - ret = SendMessageA(hTree, TVM_DELETEITEM, 0, (LPARAM)hItem1); ok(ret == TRUE, "got %d\n", ret);
diff --git a/dlls/comctl32/treeview.c b/dlls/comctl32/treeview.c index 5938b29..ae17413 100644 --- a/dlls/comctl32/treeview.c +++ b/dlls/comctl32/treeview.c @@ -1545,6 +1545,7 @@ TREEVIEW_DeleteItem(TREEVIEW_INFO *infoPtr, HTREEITEM item)
if (infoPtr->firstVisible == item) { + visible = TRUE; if (item->nextSibling) newFirstVisible = item->nextSibling; else if (item->prevSibling)