comctl32/header.c: Try2: Unify HEADER_GetItem[A/W] into one function
Vitaliy Margolen
wine-patch at kievinfo.com
Fri Oct 28 23:00:32 CDT 2005
Use this patch instead. This time Src & Dst are not reversed in Str_Get*
functions.
Tests are coming from Vijay.
Note to self: don't blindly cut & paste from other parts of the code. As is
might do something different.
Vitaliy Margolen
changelog:
comctl32/header.c
- Unify HEADER_GetItem[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.85
diff -u -p -r1.85 header.c
--- dlls/comctl32/header.c 28 Oct 2005 10:40:27 -0000 1.85
+++ dlls/comctl32/header.c 29 Oct 2005 03:49:06 -0000
@@ -712,11 +712,9 @@ HEADER_GetImageList (HWND hwnd)
static LRESULT
-HEADER_GetItemA (HWND hwnd, WPARAM wParam, LPARAM lParam)
+HEADER_GetItemT (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)
@@ -727,12 +725,10 @@ HEADER_GetItemA (HWND hwnd, WPARAM wPara
if (phdi->mask == 0)
return TRUE;
- if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) {
+ if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem))
lpItem = NULL;
- }
- else {
+ else
lpItem = &infoPtr->items[nItem];
- }
if (phdi->mask & HDI_BITMAP)
phdi->hbm = (lpItem != NULL) ? lpItem->hbm : 0;
@@ -746,86 +742,27 @@ HEADER_GetItemA (HWND hwnd, WPARAM wPara
if (phdi->mask & HDI_LPARAM)
phdi->lParam = (lpItem != NULL) ? lpItem->lParam : 0;
- if (phdi->mask & HDI_TEXT) {
- if (lpItem == NULL) {
- *phdi->pszText = 0;
- }
- else if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
- if (lpItem->pszText)
- WideCharToMultiByte (CP_ACP, 0, lpItem->pszText, -1,
- phdi->pszText, phdi->cchTextMax, NULL, NULL);
- else
- *phdi->pszText = 0;
- }
- else
- phdi->pszText = LPSTR_TEXTCALLBACKA;
- }
-
if (phdi->mask & HDI_IMAGE)
phdi->iImage = (lpItem != NULL) ? lpItem->iImage : 0;
if (phdi->mask & HDI_ORDER)
phdi->iOrder = (lpItem != NULL) ? lpItem->iOrder : 0;
- return TRUE;
-}
-
-
-static LRESULT
-HEADER_GetItemW (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)
- return FALSE;
-
- TRACE("[nItem=%d]\n", nItem);
-
- if (phdi->mask == 0)
- return TRUE;
-
- if ((nItem < 0) || (nItem >= (INT)infoPtr->uNumItem)) {
- lpItem = NULL;
- }
- else {
- lpItem = &infoPtr->items[nItem];
- }
-
- if (phdi->mask & HDI_BITMAP)
- phdi->hbm = (lpItem != NULL) ? lpItem->hbm : 0;
-
- if (phdi->mask & HDI_FORMAT)
- phdi->fmt = (lpItem != NULL) ? lpItem->fmt : 0;
-
- if (phdi->mask & HDI_WIDTH)
- phdi->cxy = (lpItem != NULL) ? lpItem->cxy : 0;
-
- if (phdi->mask & HDI_LPARAM)
- phdi->lParam = (lpItem != NULL) ? lpItem->lParam : 0;
-
- if (phdi->mask & HDI_TEXT) {
- if (lpItem == NULL) {
- *phdi->pszText = 0;
- }
- else if (lpItem->pszText != LPSTR_TEXTCALLBACKW) {
- if (lpItem->pszText)
- lstrcpynW (phdi->pszText, lpItem->pszText, phdi->cchTextMax);
- else
- *phdi->pszText = 0;
- }
- else
- phdi->pszText = LPSTR_TEXTCALLBACKW;
+ if (phdi->mask & HDI_TEXT)
+ {
+ if (lpItem == NULL)
+ *phdi->pszText = 0;
+ else if (lpItem->pszText == LPSTR_TEXTCALLBACKW) /* covers == TEXTCALLBACKA too */
+ phdi->pszText = LPSTR_TEXTCALLBACKW;
+ else
+ {
+ if (bUnicode)
+ Str_GetPtrW (lpItem->pszText, phdi->pszText, phdi->cchTextMax);
+ else
+ Str_GetPtrWtoA (lpItem->pszText, (LPSTR)phdi->pszText, phdi->cchTextMax);
+ }
}
- if (phdi->mask & HDI_IMAGE)
- phdi->iImage = (lpItem != NULL) ? lpItem->iImage : 0;
-
- if (phdi->mask & HDI_ORDER)
- phdi->iOrder = (lpItem != NULL) ? lpItem->iOrder : 0;
-
return TRUE;
}
@@ -1693,10 +1630,8 @@ HEADER_WindowProc (HWND hwnd, UINT msg,
return HEADER_GetImageList (hwnd);
case HDM_GETITEMA:
- return HEADER_GetItemA (hwnd, wParam, lParam);
-
case HDM_GETITEMW:
- return HEADER_GetItemW (hwnd, wParam, lParam);
+ return HEADER_GetItemT (hwnd, (INT)wParam, (LPHDITEMW)lParam, msg == HDM_GETITEMW);
case HDM_GETITEMCOUNT:
return HEADER_GetItemCount (hwnd);
More information about the wine-patches
mailing list