Module: wine Branch: master Commit: 2575c37b22371e2df0ce7f436577920129692781 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2575c37b22371e2df0ce7f4365...
Author: Duane Clark fpga@pacbell.net Date: Sat Jan 6 15:55:45 2007 -0800
comctl32: listview: Allow LVIF_STATE flag in subitems.
---
dlls/comctl32/listview.c | 8 ++++++-- dlls/comctl32/tests/listview.c | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c index 6340c87..11e02ee 100644 --- a/dlls/comctl32/listview.c +++ b/dlls/comctl32/listview.c @@ -3506,8 +3506,12 @@ static BOOL set_sub_item(LISTVIEW_INFO * if (lpLVItem->iSubItem >= DPA_GetPtrCount(infoPtr->hdpaColumns)) return FALSE;
/* First do some sanity checks */ - if (lpLVItem->mask & ~(LVIF_TEXT | LVIF_IMAGE)) return FALSE; - if (!(lpLVItem->mask & (LVIF_TEXT | LVIF_IMAGE))) return TRUE; + /* The LVIF_STATE flag is valid for subitems, but does not appear to be + particularly useful. We currently do not actually do anything with + the flag on subitems. + */ + if (lpLVItem->mask & ~(LVIF_TEXT | LVIF_IMAGE | LVIF_STATE)) return FALSE; + if (!(lpLVItem->mask & (LVIF_TEXT | LVIF_IMAGE | LVIF_STATE))) return TRUE;
/* get the subitem structure, and create it if not there */ hdpaSubItems = (HDPA)DPA_GetPtr(infoPtr->hdpaItems, lpLVItem->iItem); diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c index 127208c..9d14e39 100644 --- a/dlls/comctl32/tests/listview.c +++ b/dlls/comctl32/tests/listview.c @@ -313,6 +313,33 @@ static void test_items(void) ok(r != 0, "ret %d\n", r); ok(item.lParam == lparamTest, "got lParam %lx, expected %lx\n", item.lParam, lparamTest);
+ /**** Some tests of state highlighting ****/ + memset (&item, 0xaa, sizeof (item)); + item.mask = LVIF_STATE; + item.iItem = 0; + item.iSubItem = 0; + item.state = LVIS_SELECTED; + item.stateMask = LVIS_SELECTED | LVIS_DROPHILITED; + r = SendMessage(hwnd, LVM_SETITEM, 0, (LPARAM) &item); + ok(r != 0, "ret %d\n", r); + item.iSubItem = 1; + item.state = LVIS_DROPHILITED; + r = SendMessage(hwnd, LVM_SETITEM, 0, (LPARAM) &item); + ok(r != 0, "ret %d\n", r); + + memset (&item, 0xaa, sizeof (item)); + item.mask = LVIF_STATE; + item.iItem = 0; + item.iSubItem = 0; + item.stateMask = -1; + r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item); + ok(r != 0, "ret %d\n", r); + ok(item.state == LVIS_SELECTED, "got state %x, expected %x\n", item.state, LVIS_SELECTED); + item.iSubItem = 1; + r = SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM) &item); + ok(r != 0, "ret %d\n", r); + todo_wine ok(item.state == LVIS_DROPHILITED, "got state %x, expected %x\n", item.state, LVIS_DROPHILITED); + DestroyWindow(hwnd); }