Listview R7
Dimitrie O. Paun
dpaun at rogers.com
Wed Oct 16 14:41:20 CDT 2002
ChangeLog
Notification code cleanup, more traces, etc.
--- dlls/comctl32/listview.c.R6 Wed Oct 16 15:03:13 2002
+++ dlls/comctl32/listview.c Wed Oct 16 15:34:56 2002
@@ -533,16 +533,24 @@
/******** Notification functions i************************************/
-static inline BOOL notify_hdr(LISTVIEW_INFO *infoPtr, INT code, LPNMHDR pnmh)
+static LRESULT notify_hdr(LISTVIEW_INFO *infoPtr, INT code, LPNMHDR pnmh)
{
+ LRESULT result;
+
+ TRACE("(code=%d)\n", code);
+
pnmh->hwndFrom = infoPtr->hwndSelf;
pnmh->idFrom = GetWindowLongW(infoPtr->hwndSelf, GWL_ID);
pnmh->code = code;
- return (BOOL)SendMessageW(GetParent(infoPtr->hwndSelf), WM_NOTIFY,
- (WPARAM)pnmh->idFrom, (LPARAM)pnmh);
+ result = SendMessageW(GetParent(infoPtr->hwndSelf), WM_NOTIFY,
+ (WPARAM)pnmh->idFrom, (LPARAM)pnmh);
+
+ TRACE(" <= %ld\n", result);
+
+ return result;
}
-static inline BOOL notify(LISTVIEW_INFO *infoPtr, INT code)
+static inline LRESULT notify(LISTVIEW_INFO *infoPtr, INT code)
{
NMHDR nmh;
return notify_hdr(infoPtr, code, &nmh);
@@ -553,12 +561,12 @@
notify(infoPtr, LVN_ITEMACTIVATE);
}
-static inline BOOL notify_listview(LISTVIEW_INFO *infoPtr, INT code, LPNMLISTVIEW plvnm)
+static inline LRESULT notify_listview(LISTVIEW_INFO *infoPtr, INT code, LPNMLISTVIEW plvnm)
{
return notify_hdr(infoPtr, code, (LPNMHDR)plvnm);
}
-static BOOL notify_click(LISTVIEW_INFO *infoPtr, INT code, LVHITTESTINFO *lvht)
+static LRESULT notify_click(LISTVIEW_INFO *infoPtr, INT code, LVHITTESTINFO *lvht)
{
NMLISTVIEW nmlv;
@@ -656,45 +664,13 @@
return bResult;
}
-static void customdraw_fill(NMLVCUSTOMDRAW *lpnmlvcd, LISTVIEW_INFO *infoPtr, HDC hdc, LPRECT rcBounds, LVITEMW *lpLVItem)
+static void customdraw_fill(NMLVCUSTOMDRAW *lpnmlvcd, LISTVIEW_INFO *infoPtr, HDC hdc, LPRECT rcBounds)
{
- BOOL isSelected;
-
ZeroMemory(lpnmlvcd, sizeof(NMLVCUSTOMDRAW));
lpnmlvcd->nmcd.hdc = hdc;
lpnmlvcd->nmcd.rc = *rcBounds;
- if (lpLVItem)
- {
- lpnmlvcd->nmcd.dwItemSpec = lpLVItem->iItem;
- lpnmlvcd->iSubItem = lpLVItem->iSubItem;
- if (lpLVItem->state & LVIS_SELECTED) lpnmlvcd->nmcd.uItemState |= CDIS_SELECTED;
- if (lpLVItem->state & LVIS_FOCUSED) lpnmlvcd->nmcd.uItemState |= CDIS_FOCUS;
- if (lpLVItem->iItem == infoPtr->nHotItem) lpnmlvcd->nmcd.uItemState |= CDIS_HOT;
- lpnmlvcd->nmcd.lItemlParam = lpLVItem->lParam;
- }
-
- isSelected = lpnmlvcd->nmcd.uItemState & CDIS_SELECTED;
- /* subitems are selected only in full-row-select, report mode */
- if ( lpnmlvcd->iSubItem != 0 &&
- !((infoPtr->dwStyle & LVS_TYPEMASK) == LVS_REPORT &&
- (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT)) )
- isSelected = FALSE;
-
- if (isSelected && infoPtr->bFocus)
- {
- lpnmlvcd->clrTextBk = comctl32_color.clrHighlight;
- lpnmlvcd->clrText = comctl32_color.clrHighlightText;
- }
- else if (isSelected && (infoPtr->dwStyle & LVS_SHOWSELALWAYS))
- {
- lpnmlvcd->clrTextBk = comctl32_color.clr3dFace;
- lpnmlvcd->clrText = comctl32_color.clrBtnText;
- }
- else
- {
- lpnmlvcd->clrTextBk = infoPtr->clrTextBk;
- lpnmlvcd->clrText = infoPtr->clrText;
- }
+ lpnmlvcd->clrTextBk = infoPtr->clrTextBk;
+ lpnmlvcd->clrText = infoPtr->clrText;
}
static inline DWORD notify_customdraw (LISTVIEW_INFO *infoPtr, DWORD dwDrawStage, NMLVCUSTOMDRAW *lpnmlvcd)
@@ -3201,7 +3177,30 @@
TRACE(" rcBox=%s, rcState=%s, rcIcon=%s. rcLabel=%s\n",
debugrect(&rcBox), debugrect(&rcState), debugrect(&rcIcon), debugrect(&rcLabel));
- customdraw_fill(&nmlvcd, infoPtr, hdc, &rcBox, &lvItem);
+ /* fill in the custom draw structure */
+ customdraw_fill(&nmlvcd, infoPtr, hdc, &rcBox);
+ nmlvcd.nmcd.dwItemSpec = lvItem.iItem;
+ nmlvcd.iSubItem = lvItem.iSubItem;
+ if (lvItem.state & LVIS_SELECTED) nmlvcd.nmcd.uItemState |= CDIS_SELECTED;
+ if (lvItem.state & LVIS_FOCUSED) nmlvcd.nmcd.uItemState |= CDIS_FOCUS;
+ if (lvItem.iItem == infoPtr->nHotItem) nmlvcd.nmcd.uItemState |= CDIS_HOT;
+ nmlvcd.nmcd.lItemlParam = lvItem.lParam;
+ if ((lvItem.state & LVIS_SELECTED) &&
+ (lvItem.iSubItem == 0 ||
+ (uView == LVS_REPORT && (infoPtr->dwLvExStyle & LVS_EX_FULLROWSELECT))))
+ {
+ if (infoPtr->bFocus)
+ {
+ nmlvcd.clrTextBk = comctl32_color.clrHighlight;
+ nmlvcd.clrText = comctl32_color.clrHighlightText;
+ }
+ else if (infoPtr->dwStyle & LVS_SHOWSELALWAYS)
+ {
+ nmlvcd.clrTextBk = comctl32_color.clr3dFace;
+ nmlvcd.clrText = comctl32_color.clrBtnText;
+ }
+ }
+
if (cdmode & CDRF_NOTIFYITEMDRAW)
cditemmode = notify_customdraw (infoPtr, CDDS_ITEMPREPAINT, &nmlvcd);
if (cditemmode & CDRF_SKIPDEFAULT) goto postpaint;
@@ -3492,7 +3491,7 @@
oldClrText = infoPtr->clrText;
GetClientRect(infoPtr->hwndSelf, &rcClient);
- customdraw_fill(&nmlvcd, infoPtr, hdc, &rcClient, NULL);
+ customdraw_fill(&nmlvcd, infoPtr, hdc, &rcClient);
cdmode = notify_customdraw(infoPtr, CDDS_PREPAINT, &nmlvcd);
if (cdmode & CDRF_SKIPDEFAULT) goto enddraw;
@@ -3870,26 +3869,21 @@
{
LONG lStyle = infoPtr->dwStyle;
UINT uView = lStyle & LVS_TYPEMASK;
- LONG lCtrlId = GetWindowLongW(infoPtr->hwndSelf, GWL_ID);
NMLISTVIEW nmlv;
BOOL bResult = FALSE;
HDPA hdpaSubItems;
LISTVIEW_ITEM *lpItem;
LISTVIEW_SUBITEM *lpSubItem;
- INT i;
LVITEMW item;
+ INT i;
TRACE("(nItem=%d)\n", nItem);
/* First, send LVN_DELETEITEM notification. */
- memset(&nmlv, 0, sizeof (NMLISTVIEW));
- nmlv.hdr.hwndFrom = infoPtr->hwndSelf;
- nmlv.hdr.idFrom = lCtrlId;
- nmlv.hdr.code = LVN_DELETEITEM;
+ ZeroMemory(&nmlv, sizeof (NMLISTVIEW));
nmlv.iItem = nItem;
- SendMessageW((infoPtr->hwndSelf), WM_NOTIFY, (WPARAM)lCtrlId,
- (LPARAM)&nmlv);
+ notify_listview(infoPtr, LVN_DELETEITEM, &nmlv);
if (nItem == infoPtr->nFocusedItem)
{
More information about the wine-patches
mailing list