comctl32: Fix LVM_GETITEM/LVIF_STATE so it only returns the bits it

has been asked for, and sets all the others to zero (with conformance
test).
This commit is contained in:
Francois Gouget 2006-09-29 12:49:01 +02:00 committed by Alexandre Julliard
parent 3a03248a7c
commit 20eb2f9998
2 changed files with 11 additions and 1 deletions

View File

@ -5364,7 +5364,7 @@ static BOOL LISTVIEW_GetItemT(LISTVIEW_INFO *infoPtr, LPLVITEMW lpLVItem, BOOL i
/* ... the state field (this one is different due to uCallbackmask) */
if (lpLVItem->mask & LVIF_STATE)
{
lpLVItem->state = lpItem->state;
lpLVItem->state = lpItem->state & lpLVItem->stateMask;
if (dispInfo.item.mask & LVIF_STATE)
{
lpLVItem->state &= ~dispInfo.item.stateMask;

View File

@ -189,6 +189,16 @@ static void test_checkboxes(void)
r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item);
ok(item.state == 0x2aaa, "state %x\n", item.state);
/* Check that only the bits we asked for are returned,
* and that all the others are set to zero
*/
item.iItem = 3;
item.mask = LVIF_STATE;
item.stateMask = 0xf000;
item.state = 0xffff;
r = SendMessage(hwnd, LVM_GETITEMA, 0, (LPARAM) &item);
ok(item.state == 0x2000, "state %x\n", item.state);
/* Set the style again and check that doesn't change an item's state */
r = SendMessage(hwnd, LVM_SETEXTENDEDLISTVIEWSTYLE, LVS_EX_CHECKBOXES, LVS_EX_CHECKBOXES);
ok(r == LVS_EX_CHECKBOXES, "ret %lx\n", r);