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/listvie…
==============================================================================
--- 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);