comctl32/header.c: Unify HEADER_SetItem[A/W] into one function
Vitaliy Margolen
wine-patch at kievinfo.com
Mon Oct 17 18:47:32 CDT 2005
Vitaliy Margolen
changelog:
comctl32/header.c
- Unify HEADER_SetItem[A/W] into one function
-------------- next part --------------
Index: dlls/comctl32/header.c
===================================================================
RCS file: /home/wine/wine/dlls/comctl32/header.c,v
retrieving revision 1.83
diff -u -p -r1.83 header.c
--- dlls/comctl32/header.c 18 Sep 2005 12:29:35 -0000 1.83
+++ dlls/comctl32/header.c 17 Oct 2005 23:44:52 -0000
@@ -1207,11 +1091,9 @@ HEADER_SetBitmapMargin(HWND hwnd, WPARAM
}
static LRESULT
-HEADER_SetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
+HEADER_SetItemT (HWND hwnd, INT nItem, LPHDITEMW phdi, BOOL bUnicode)
{
HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
- HDITEMA *phdi = (HDITEMA*)lParam;
- INT nItem = (INT)wParam;
HEADER_ITEM *lpItem;
if (phdi == NULL)
@@ -1221,7 +1103,8 @@ HEADER_SetItemA (HWND hwnd, WPARAM wPara
TRACE("[nItem=%d]\n", nItem);
- if (HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGINGA, nItem, phdi->mask))
+ if (HEADER_SendHeaderNotify (hwnd, bUnicode ? HDN_ITEMCHANGINGW : HDN_ITEMCHANGINGA,
+ nItem, phdi->mask))
return FALSE;
lpItem = &infoPtr->items[nItem];
@@ -1234,113 +1117,33 @@ HEADER_SetItemA (HWND hwnd, WPARAM wPara
if (phdi->mask & HDI_LPARAM)
lpItem->lParam = phdi->lParam;
- if (phdi->mask & HDI_TEXT) {
- if (phdi->pszText != LPSTR_TEXTCALLBACKA) {
- if (lpItem->pszText) {
- Free (lpItem->pszText);
- lpItem->pszText = NULL;
- }
- if (phdi->pszText) {
- INT len = MultiByteToWideChar (CP_ACP,0,phdi->pszText,-1,NULL,0);
- lpItem->pszText = Alloc( len*sizeof(WCHAR) );
- MultiByteToWideChar (CP_ACP,0,phdi->pszText,-1,lpItem->pszText,len);
- }
- }
- else
- lpItem->pszText = LPSTR_TEXTCALLBACKW;
- }
-
if (phdi->mask & HDI_WIDTH)
lpItem->cxy = phdi->cxy;
if (phdi->mask & HDI_IMAGE)
lpItem->iImage = phdi->iImage;
- if (phdi->mask & HDI_ORDER)
- {
- INT i, nMin, nMax;
-
- if (lpItem->iOrder < phdi->iOrder)
- {
- memmove(&infoPtr->order[lpItem->iOrder],
- &infoPtr->order[lpItem->iOrder + 1],
- (phdi->iOrder - lpItem->iOrder) * sizeof(INT));
- }
- if (phdi->iOrder < lpItem->iOrder)
- {
- memmove(&infoPtr->order[phdi->iOrder + 1],
- &infoPtr->order[phdi->iOrder],
- (lpItem->iOrder - phdi->iOrder) * sizeof(INT));
- }
- infoPtr->order[phdi->iOrder] = nItem;
- nMin = min(lpItem->iOrder, phdi->iOrder);
- nMax = max(lpItem->iOrder, phdi->iOrder);
- for (i = nMin; i <= nMax; i++)
+ if (phdi->mask & HDI_TEXT)
+ {
+ if (phdi->pszText != LPSTR_TEXTCALLBACKW) /* covers != TEXTCALLBACKA too */
{
- infoPtr->items[infoPtr->order[i]].iOrder = infoPtr->order[i];
- }
- }
-
- HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGEDA, nItem, phdi->mask);
-
- HEADER_SetItemBounds (hwnd);
-
- InvalidateRect(hwnd, NULL, FALSE);
-
- return TRUE;
-}
-
-
-static LRESULT
-HEADER_SetItemW (HWND hwnd, WPARAM wParam, LPARAM lParam)
-{
- HEADER_INFO *infoPtr = HEADER_GetInfoPtr (hwnd);
- HDITEMW *phdi = (HDITEMW*)lParam;
- INT nItem = (INT)wParam;
- HEADER_ITEM *lpItem;
-
- if (phdi == NULL)
- return FALSE;
- if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem))
- return FALSE;
-
- TRACE("[nItem=%d]\n", nItem);
-
- if (HEADER_SendHeaderNotify (hwnd, HDN_ITEMCHANGINGW, nItem, phdi->mask))
- return FALSE;
-
- lpItem = &infoPtr->items[nItem];
- if (phdi->mask & HDI_BITMAP)
- lpItem->hbm = phdi->hbm;
-
- if (phdi->mask & HDI_FORMAT)
- lpItem->fmt = phdi->fmt;
-
- if (phdi->mask & HDI_LPARAM)
- lpItem->lParam = phdi->lParam;
-
- if (phdi->mask & HDI_TEXT) {
- if (phdi->pszText != LPSTR_TEXTCALLBACKW) {
- if (lpItem->pszText) {
- Free (lpItem->pszText);
- lpItem->pszText = NULL;
- }
- if (phdi->pszText) {
- INT len = strlenW (phdi->pszText);
- lpItem->pszText = Alloc ((len+1)*sizeof(WCHAR));
- strcpyW (lpItem->pszText, phdi->pszText);
- }
+ if (lpItem->pszText)
+ {
+ Free(lpItem->pszText);
+ lpItem->pszText = NULL;
+ }
+ if (phdi->pszText)
+ {
+ if (bUnicode)
+ Str_SetPtrW(&lpItem->pszText, phdi->pszText);
+ else
+ Str_SetPtrAtoW(&lpItem->pszText, (LPSTR)phdi->pszText);
+ }
}
else
lpItem->pszText = LPSTR_TEXTCALLBACKW;
}
- if (phdi->mask & HDI_WIDTH)
- lpItem->cxy = phdi->cxy;
-
- if (phdi->mask & HDI_IMAGE)
- lpItem->iImage = phdi->iImage;
-
if (phdi->mask & HDI_ORDER)
{
INT i, nMin, nMax;
@@ -1366,7 +1169,8 @@ HEADER_SetItemW (HWND hwnd, WPARAM wPara
}
}
- HEADER_SendHeaderNotify(hwnd, HDN_ITEMCHANGEDW, nItem, phdi->mask);
+ HEADER_SendHeaderNotify (hwnd, bUnicode ? HDN_ITEMCHANGEDW : HDN_ITEMCHANGEDA,
+ nItem, phdi->mask);
HEADER_SetItemBounds (hwnd);
@@ -1932,10 +1734,8 @@ HEADER_WindowProc (HWND hwnd, UINT msg,
return HEADER_SetImageList (hwnd, (HIMAGELIST)lParam);
case HDM_SETITEMA:
- return HEADER_SetItemA (hwnd, wParam, lParam);
-
case HDM_SETITEMW:
- return HEADER_SetItemW (hwnd, wParam, lParam);
+ return HEADER_SetItemT (hwnd, (INT)wParam, (LPHDITEMW)lParam, msg == HDM_SETITEMW);
case HDM_SETORDERARRAY:
return HEADER_SetOrderArray(hwnd, wParam, lParam);
More information about the wine-patches
mailing list