From: Jacob Czekalla jczekalla@codeweavers.com
Tests how the rects for the listviews header should be refreshed during painting. --- dlls/comctl32/tests/listview.c | 66 ++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+)
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index b767106e97a..8487394b1e8 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -608,6 +608,24 @@ static const struct message listview_end_label_edit_kill_focus[] = { { 0 } };
+static const struct message listview_invalidate_rect[] = { + { WM_PAINT, sent }, + { WM_PAINT, sent }, + { WM_NCPAINT, sent|defwinproc }, + { WM_ERASEBKGND, sent|defwinproc }, + { WM_NOTIFY, sent|defwinproc }, + { HDM_ORDERTOINDEX, sent|wparam, 0 }, + { HDM_GETITEMW, sent|wparam|optional, 0 }, /* todo: not sent by wine yet */ + { HDM_GETITEMRECT, sent|wparam, 0 }, + { HDM_ORDERTOINDEX, sent|wparam, 1 }, + { HDM_GETITEMW, sent|wparam|optional, 1 }, /* todo: not sent by wine yet */ + { HDM_GETITEMRECT, sent|wparam, 1 }, + { HDM_ORDERTOINDEX, sent|wparam, 2 }, + { HDM_GETITEMW, sent|wparam|optional, 2 }, /* todo: not sent by wine yet */ + { HDM_GETITEMRECT, sent|wparam, 2 }, + { 0 } +}; + static void hold_key(int vk) { BYTE kstate[256]; @@ -7489,6 +7507,53 @@ static void test_LVM_GETHOTCURSOR(void) DestroyWindow(hwnd); }
+static void test_column_rect_caching(void) +{ + HWND listview; + LVCOLUMNA column = { 0 }; + LVITEMA item = { 0 }; + char a_text[] = "A", b_text[] = "B", c_text[] = "C"; + + listview = create_listview_control(LVS_REPORT); + subclass_header(listview); + + column.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM; + column.cx = 50; + column.pszText = a_text; + column.iSubItem = 0; + SendMessageA(listview, LVM_INSERTCOLUMNA, 0, (LPARAM)&column); + column.cx = 50; + column.pszText = b_text; + column.iSubItem = 1; + SendMessageA(listview, LVM_INSERTCOLUMNA, 1, (LPARAM)&column); + column.cx = 50; + column.pszText = c_text; + column.iSubItem = 2; + SendMessageA(listview, LVM_INSERTCOLUMNA, 2, (LPARAM)&column); + + item.mask = LVIF_TEXT; + item.iItem = 0; + item.pszText = a_text; + SendMessageA(listview, LVM_INSERTITEMA, 0, (LPARAM)&item); + item.iSubItem = 1; + item.iItem = 0; + item.pszText = b_text; + SendMessageA(listview, LVM_SETITEMTEXTA, 0, (LPARAM)&item); + item.iSubItem = 2; + item.iItem = 0; + item.pszText = c_text; + SendMessageA(listview, LVM_SETITEMTEXTA, 0, (LPARAM)&item); + + flush_events(); + flush_sequences(sequences, NUM_MSG_SEQUENCES); + + InvalidateRect(listview, NULL, FALSE); + flush_events(); + ok_sequence(sequences, LISTVIEW_SEQ_INDEX, listview_invalidate_rect, "column order caching in refresh", TRUE); + + DestroyWindow(listview); +} + START_TEST(listview) { ULONG_PTR ctx_cookie; @@ -7559,6 +7624,7 @@ START_TEST(listview) test_custom_sort(); test_LVM_GETNEXTITEM(); test_LVM_GETHOTCURSOR(); + test_column_rect_caching();
if (!load_v6_module(&ctx_cookie, &hCtx)) {