Sync to Wine-0_9_16:

Alexandre Julliard <julliard@winehq.org>
- comctl32: Don't use sizeof in traces to avoid printf format warnings.
Dmitry Timoshkov <dmitry@codeweavers.com>
- comctl32: Return FALSE in the WM_CLOSE PROPSHEET_DialogProc handler.
Mike McCormack <mike@codeweavers.com>
- comctl32: Use the listview's background colour when drawing with imagelist.
- comctl32: Arrange the listview after deleting all items so we will place iconsat the top again.

svn path=/trunk/; revision=22849
This commit is contained in:
Ged Murphy 2006-07-04 21:33:34 +00:00
parent 21d56df85d
commit 94384e8058
18 changed files with 1451 additions and 1470 deletions

View file

@ -3769,9 +3769,10 @@ static BOOL LISTVIEW_DrawItem(LISTVIEW_INFO *infoPtr, HDC hdc, INT nItem, INT nS
himl = (uView == LVS_ICON ? infoPtr->himlNormal : infoPtr->himlSmall);
if (himl && lvItem.iImage >= 0 && !IsRectEmpty(&rcIcon))
{
TRACE("iImage=%d\n", lvItem.iImage);
ImageList_Draw(himl, lvItem.iImage, hdc, rcIcon.left, rcIcon.top,
(lvItem.state & LVIS_SELECTED) && (infoPtr->bFocus) ? ILD_SELECTED : ILD_NORMAL);
TRACE("iImage=%d\n", lvItem.iImage);
ImageList_DrawEx(himl, lvItem.iImage, hdc, rcIcon.left, rcIcon.top,
rcIcon.right - rcIcon.left, rcIcon.bottom - rcIcon.top, infoPtr->clrBk, CLR_DEFAULT,
(lvItem.state & LVIS_SELECTED) && (infoPtr->bFocus) ? ILD_SELECTED : ILD_NORMAL);
}
/* Don't bother painting item being edited */
@ -4293,8 +4294,8 @@ static BOOL LISTVIEW_DeleteAllItems(LISTVIEW_INFO *infoPtr)
infoPtr->nItemCount --;
}
LISTVIEW_Arrange(infoPtr, LVA_DEFAULT);
LISTVIEW_UpdateScroll(infoPtr);
LISTVIEW_InvalidateList(infoPtr);
return TRUE;

View file

@ -1248,6 +1248,7 @@ static UINT GetTemplateSize(DLGTEMPLATE* pTemplate)
const WORD* p = (const WORD *)pTemplate;
BOOL istemplateex = (((MyDLGTEMPLATEEX*)pTemplate)->signature == 0xFFFF);
WORD nrofitems;
UINT ret;
if (istemplateex)
{
@ -1363,9 +1364,9 @@ static UINT GetTemplateSize(DLGTEMPLATE* pTemplate)
--nrofitems;
}
TRACE("%p %p size 0x%08x\n",p, (WORD*)pTemplate,sizeof(WORD)*(p - (WORD*)pTemplate));
return (p - (WORD*)pTemplate)*sizeof(WORD);
ret = (p - (WORD*)pTemplate) * sizeof(WORD);
TRACE("%p %p size 0x%08x\n", p, pTemplate, ret);
return ret;
}
/******************************************************************************
@ -2862,6 +2863,42 @@ INT_PTR WINAPI PropertySheetW(LPCPROPSHEETHEADERW lppsh)
return bRet;
}
static LPWSTR load_string( HINSTANCE instance, LPCWSTR str )
{
LPWSTR ret;
UINT len;
if (IS_INTRESOURCE(str))
{
HRSRC hrsrc;
HGLOBAL hmem;
WCHAR *ptr;
WORD i, id = LOWORD(str);
if (!(hrsrc = FindResourceW( instance, MAKEINTRESOURCEW((id >> 4) + 1), (LPWSTR)RT_STRING )))
return NULL;
if (!(hmem = LoadResource( instance, hrsrc ))) return NULL;
if (!(ptr = LockResource( hmem ))) return NULL;
for (i = id & 0x0f; i > 0; i--) ptr += *ptr + 1;
len = *ptr;
if (!len) return NULL;
ret = Alloc( (len + 1) * sizeof(WCHAR) );
if (ret)
{
memcpy( ret, ptr + 1, len * sizeof(WCHAR) );
ret[len] = 0;
}
}
else
{
int len = (strlenW(str) + 1) * sizeof(WCHAR);
ret = Alloc( len );
if (ret) memcpy( ret, str, len );
}
return ret;
}
/******************************************************************************
* CreatePropertySheetPage (COMCTL32.@)
* CreatePropertySheetPageA (COMCTL32.@)
@ -2906,12 +2943,7 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(
if (HIWORD( ppsp->pszTitle ))
PROPSHEET_AtoW( &ppsp->pszTitle, lpPropSheetPage->pszTitle );
else
{
UINT id = LOWORD(ppsp->pszTitle);
int len = LoadStringW( ppsp->hInstance, id, NULL, 0 ) + 1;
ppsp->pszTitle = Alloc( len * sizeof(WCHAR) );
LoadStringW( ppsp->hInstance, id, (LPWSTR)ppsp->pszTitle, len );
}
ppsp->pszTitle = load_string( ppsp->hInstance, ppsp->pszTitle );
}
else
ppsp->pszTitle = NULL;
@ -2924,12 +2956,7 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(
if (HIWORD( ppsp->pszHeaderTitle ))
PROPSHEET_AtoW(&ppsp->pszHeaderTitle, lpPropSheetPage->pszHeaderTitle);
else
{
UINT id = LOWORD(ppsp->pszHeaderTitle);
int len = LoadStringW( ppsp->hInstance, id, NULL, 0 ) + 1;
ppsp->pszHeaderTitle = Alloc( len * sizeof(WCHAR) );
LoadStringW( ppsp->hInstance, id, (LPWSTR)ppsp->pszHeaderTitle, len );
}
ppsp->pszHeaderTitle = load_string( ppsp->hInstance, ppsp->pszHeaderTitle );
}
else
ppsp->pszHeaderTitle = NULL;
@ -2939,12 +2966,7 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(
if (HIWORD( ppsp->pszHeaderSubTitle ))
PROPSHEET_AtoW(&ppsp->pszHeaderSubTitle, lpPropSheetPage->pszHeaderSubTitle);
else
{
UINT id = LOWORD(ppsp->pszHeaderSubTitle);
int len = LoadStringW( ppsp->hInstance, id, NULL, 0 ) + 1;
ppsp->pszHeaderSubTitle = Alloc( len * sizeof(WCHAR) );
LoadStringW( ppsp->hInstance, id, (LPWSTR)ppsp->pszHeaderSubTitle, len );
}
ppsp->pszHeaderSubTitle = load_string( ppsp->hInstance, ppsp->pszHeaderSubTitle );
}
else
ppsp->pszHeaderSubTitle = NULL;
@ -2986,21 +3008,7 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage
}
if (ppsp->dwFlags & PSP_USETITLE)
{
if (HIWORD( ppsp->pszTitle ))
{
int len = strlenW(lpPropSheetPage->pszTitle) + 1;
ppsp->pszTitle = Alloc( len * sizeof (WCHAR) );
strcpyW( (WCHAR *)ppsp->pszTitle, lpPropSheetPage->pszTitle );
}
else
{
UINT id = LOWORD(ppsp->pszTitle);
int len = LoadStringW( ppsp->hInstance, id, NULL, 0 ) + 1;
ppsp->pszTitle = Alloc( len * sizeof(WCHAR) );
LoadStringW( ppsp->hInstance, id, (LPWSTR)ppsp->pszTitle, len );
}
}
ppsp->pszTitle = load_string( ppsp->hInstance, ppsp->pszTitle );
else
ppsp->pszTitle = NULL;
@ -3008,40 +3016,12 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage
ppsp->dwFlags &= ~(PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE);
if (ppsp->dwFlags & PSP_USEHEADERTITLE)
{
if (HIWORD( ppsp->pszHeaderTitle ))
{
int len = strlenW(lpPropSheetPage->pszHeaderTitle) + 1;
ppsp->pszHeaderTitle = Alloc( len * sizeof (WCHAR) );
strcpyW( (WCHAR *)ppsp->pszHeaderTitle, lpPropSheetPage->pszHeaderTitle );
}
else
{
UINT id = LOWORD(ppsp->pszHeaderTitle);
int len = LoadStringW( ppsp->hInstance, id, NULL, 0 ) + 1;
ppsp->pszHeaderTitle = Alloc( len * sizeof(WCHAR) );
LoadStringW( ppsp->hInstance, id, (LPWSTR)ppsp->pszHeaderTitle, len );
}
}
ppsp->pszHeaderTitle = load_string( ppsp->hInstance, ppsp->pszHeaderTitle );
else
ppsp->pszHeaderTitle = NULL;
if (ppsp->dwFlags & PSP_USEHEADERSUBTITLE)
{
if (HIWORD( ppsp->pszHeaderSubTitle ))
{
int len = strlenW(lpPropSheetPage->pszHeaderSubTitle) + 1;
ppsp->pszHeaderSubTitle = Alloc( len * sizeof (WCHAR) );
strcpyW( (WCHAR *)ppsp->pszHeaderSubTitle, lpPropSheetPage->pszHeaderSubTitle );
}
else
{
UINT id = LOWORD(ppsp->pszHeaderSubTitle);
int len = LoadStringW( ppsp->hInstance, id, NULL, 0 ) + 1;
ppsp->pszHeaderSubTitle = Alloc( len * sizeof(WCHAR) );
LoadStringW( ppsp->hInstance, id, (LPWSTR)ppsp->pszHeaderSubTitle, len );
}
}
ppsp->pszHeaderSubTitle = load_string( ppsp->hInstance, ppsp->pszHeaderSubTitle );
else
ppsp->pszHeaderSubTitle = NULL;
@ -3533,7 +3513,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_CLOSE:
PROPSHEET_Cancel(hwnd, 1);
return TRUE;
return FALSE; /* let DefDlgProc post us WM_COMMAND/IDCANCEL */
case WM_COMMAND:
if (!PROPSHEET_DoCommand(hwnd, LOWORD(wParam)))