Author: akhaldi Date: Sun Jul 3 12:29:33 2016 New Revision: 71791
URL: http://svn.reactos.org/svn/reactos?rev=71791&view=rev Log: [COMCTL32] Apply Wine Staging commit 35bf531 by Michael Müller: Preserve custom colors between subitems. (v2). CORE-11383
Modified: trunk/reactos/dll/win32/comctl32/listview.c
Modified: trunk/reactos/dll/win32/comctl32/listview.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/comctl32/listview... ============================================================================== --- trunk/reactos/dll/win32/comctl32/listview.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/comctl32/listview.c [iso-8859-1] Sun Jul 3 12:29:33 2016 @@ -1038,7 +1038,7 @@ COLORREF backcolor, textcolor;
/* apparently, for selected items, we have to override the returned values */ - if (!SubItem) + if (!SubItem || (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT)) { if (lpnmlvcd->nmcd.uItemState & CDIS_SELECTED) { @@ -4772,6 +4772,7 @@ while (iterator_next(subitems)) { DWORD subitemstage = CDRF_DODEFAULT; + NMLVCUSTOMDRAW temp_nmlvcd;
/* We need to query for each subitem, item's data (subitem == 0) is already here at this point */ if (subitems->nItem) @@ -4799,13 +4800,15 @@ if (cdsubitemmode & CDRF_NOTIFYSUBITEMDRAW) subitemstage = notify_customdraw(infoPtr, CDDS_SUBITEM | CDDS_ITEMPREPAINT, &nmlvcd);
- if (subitems->nItem == 0 || (cdmode & CDRF_NOTIFYITEMDRAW)) - prepaint_setup(infoPtr, hdc, &nmlvcd, FALSE); - else if (!(infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT)) - prepaint_setup(infoPtr, hdc, &nmlvcd, TRUE); + /* + * A selection should neither affect the colors in the post paint notification nor + * affect the colors of the next drawn subitem. Copy the structure to prevent this. + */ + temp_nmlvcd = nmlvcd; + prepaint_setup(infoPtr, hdc, &temp_nmlvcd, subitems->nItem);
if (!(subitemstage & CDRF_SKIPDEFAULT)) - LISTVIEW_DrawItemPart(infoPtr, &lvItem, &nmlvcd, &pos); + LISTVIEW_DrawItemPart(infoPtr, &lvItem, &temp_nmlvcd, &pos);
if (subitemstage & CDRF_NOTIFYPOSTPAINT) subitemstage = notify_customdraw(infoPtr, CDDS_SUBITEM | CDDS_ITEMPOSTPAINT, &nmlvcd);