comctl32/listview: Pass WM_NCCREATE down to default procedure.
Problem analyzed by Vadim Druzhin <cdslow@mail.ru>.
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 73eceff..3587797 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -9473,7 +9473,7 @@
* Success: TRUE
* Failure: FALSE
*/
-static LRESULT LISTVIEW_NCCreate(HWND hwnd, const CREATESTRUCTW *lpcs)
+static LRESULT LISTVIEW_NCCreate(HWND hwnd, WPARAM wParam, const CREATESTRUCTW *lpcs)
{
LISTVIEW_INFO *infoPtr;
LOGFONTW logFont;
@@ -9532,7 +9532,8 @@
if (!(infoPtr->hdpaPosX = DPA_Create(10))) goto fail;
if (!(infoPtr->hdpaPosY = DPA_Create(10))) goto fail;
if (!(infoPtr->hdpaColumns = DPA_Create(10))) goto fail;
- return TRUE;
+
+ return DefWindowProcW(hwnd, WM_NCCREATE, wParam, (LPARAM)lpcs);
fail:
DestroyWindow(infoPtr->hwndHeader);
@@ -11691,7 +11692,7 @@
return LISTVIEW_Command(infoPtr, wParam, lParam);
case WM_NCCREATE:
- return LISTVIEW_NCCreate(hwnd, (LPCREATESTRUCTW)lParam);
+ return LISTVIEW_NCCreate(hwnd, wParam, (LPCREATESTRUCTW)lParam);
case WM_CREATE:
return LISTVIEW_Create(hwnd, (LPCREATESTRUCTW)lParam);
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index 4bc95bb..0c1d878 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -1523,6 +1523,8 @@
static void test_create(void)
{
+ static const WCHAR testtextW[] = {'t','e','s','t',' ','t','e','x','t',0};
+ char buff[16];
HWND hList;
HWND hHeader;
LONG_PTR ret;
@@ -1734,6 +1736,23 @@
ok_sequence(sequences, PARENT_SEQ_INDEX, create_ownerdrawfixed_parent_seq,
"created with LVS_OWNERDRAWFIXED|LVS_REPORT - parent seq", FALSE);
DestroyWindow(hList);
+
+ /* Test that window text is preserved. */
+ hList = CreateWindowExA(0, WC_LISTVIEWA, "test text", WS_CHILD | WS_BORDER | WS_VISIBLE,
+ 0, 0, 100, 100, hwndparent, NULL, GetModuleHandleA(NULL), NULL);
+ ok(hList != NULL, "Failed to create ListView window.\n");
+ *buff = 0;
+ GetWindowTextA(hList, buff, sizeof(buff));
+ ok(!strcmp(buff, "test text"), "Unexpected window text %s.\n", buff);
+ DestroyWindow(hList);
+
+ hList = CreateWindowExW(0, WC_LISTVIEWW, testtextW, WS_CHILD | WS_BORDER | WS_VISIBLE,
+ 0, 0, 100, 100, hwndparent, NULL, GetModuleHandleA(NULL), NULL);
+ ok(hList != NULL, "Failed to create ListView window.\n");
+ *buff = 0;
+ GetWindowTextA(hList, buff, sizeof(buff));
+ ok(!strcmp(buff, "test text"), "Unexpected window text %s.\n", buff);
+ DestroyWindow(hList);
}
static void test_redraw(void)