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); himl = (uView == LVS_ICON ? infoPtr->himlNormal : infoPtr->himlSmall);
if (himl && lvItem.iImage >= 0 && !IsRectEmpty(&rcIcon)) if (himl && lvItem.iImage >= 0 && !IsRectEmpty(&rcIcon))
{ {
TRACE("iImage=%d\n", lvItem.iImage); TRACE("iImage=%d\n", lvItem.iImage);
ImageList_Draw(himl, lvItem.iImage, hdc, rcIcon.left, rcIcon.top, ImageList_DrawEx(himl, lvItem.iImage, hdc, rcIcon.left, rcIcon.top,
(lvItem.state & LVIS_SELECTED) && (infoPtr->bFocus) ? ILD_SELECTED : ILD_NORMAL); 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 */ /* Don't bother painting item being edited */
@ -4293,8 +4294,8 @@ static BOOL LISTVIEW_DeleteAllItems(LISTVIEW_INFO *infoPtr)
infoPtr->nItemCount --; infoPtr->nItemCount --;
} }
LISTVIEW_Arrange(infoPtr, LVA_DEFAULT);
LISTVIEW_UpdateScroll(infoPtr); LISTVIEW_UpdateScroll(infoPtr);
LISTVIEW_InvalidateList(infoPtr); LISTVIEW_InvalidateList(infoPtr);
return TRUE; return TRUE;

View file

@ -1248,6 +1248,7 @@ static UINT GetTemplateSize(DLGTEMPLATE* pTemplate)
const WORD* p = (const WORD *)pTemplate; const WORD* p = (const WORD *)pTemplate;
BOOL istemplateex = (((MyDLGTEMPLATEEX*)pTemplate)->signature == 0xFFFF); BOOL istemplateex = (((MyDLGTEMPLATEEX*)pTemplate)->signature == 0xFFFF);
WORD nrofitems; WORD nrofitems;
UINT ret;
if (istemplateex) if (istemplateex)
{ {
@ -1363,9 +1364,9 @@ static UINT GetTemplateSize(DLGTEMPLATE* pTemplate)
--nrofitems; --nrofitems;
} }
TRACE("%p %p size 0x%08x\n",p, (WORD*)pTemplate,sizeof(WORD)*(p - (WORD*)pTemplate)); ret = (p - (WORD*)pTemplate) * sizeof(WORD);
return (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; 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.@) * CreatePropertySheetPage (COMCTL32.@)
* CreatePropertySheetPageA (COMCTL32.@) * CreatePropertySheetPageA (COMCTL32.@)
@ -2906,12 +2943,7 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(
if (HIWORD( ppsp->pszTitle )) if (HIWORD( ppsp->pszTitle ))
PROPSHEET_AtoW( &ppsp->pszTitle, lpPropSheetPage->pszTitle ); PROPSHEET_AtoW( &ppsp->pszTitle, lpPropSheetPage->pszTitle );
else else
{ ppsp->pszTitle = load_string( ppsp->hInstance, ppsp->pszTitle );
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 );
}
} }
else else
ppsp->pszTitle = NULL; ppsp->pszTitle = NULL;
@ -2924,12 +2956,7 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(
if (HIWORD( ppsp->pszHeaderTitle )) if (HIWORD( ppsp->pszHeaderTitle ))
PROPSHEET_AtoW(&ppsp->pszHeaderTitle, lpPropSheetPage->pszHeaderTitle); PROPSHEET_AtoW(&ppsp->pszHeaderTitle, lpPropSheetPage->pszHeaderTitle);
else else
{ ppsp->pszHeaderTitle = load_string( ppsp->hInstance, ppsp->pszHeaderTitle );
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 );
}
} }
else else
ppsp->pszHeaderTitle = NULL; ppsp->pszHeaderTitle = NULL;
@ -2939,12 +2966,7 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageA(
if (HIWORD( ppsp->pszHeaderSubTitle )) if (HIWORD( ppsp->pszHeaderSubTitle ))
PROPSHEET_AtoW(&ppsp->pszHeaderSubTitle, lpPropSheetPage->pszHeaderSubTitle); PROPSHEET_AtoW(&ppsp->pszHeaderSubTitle, lpPropSheetPage->pszHeaderSubTitle);
else else
{ ppsp->pszHeaderSubTitle = load_string( ppsp->hInstance, ppsp->pszHeaderSubTitle );
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 );
}
} }
else else
ppsp->pszHeaderSubTitle = NULL; ppsp->pszHeaderSubTitle = NULL;
@ -2986,21 +3008,7 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage
} }
if (ppsp->dwFlags & PSP_USETITLE) if (ppsp->dwFlags & PSP_USETITLE)
{ ppsp->pszTitle = load_string( ppsp->hInstance, ppsp->pszTitle );
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 );
}
}
else else
ppsp->pszTitle = NULL; ppsp->pszTitle = NULL;
@ -3008,40 +3016,12 @@ HPROPSHEETPAGE WINAPI CreatePropertySheetPageW(LPCPROPSHEETPAGEW lpPropSheetPage
ppsp->dwFlags &= ~(PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE); ppsp->dwFlags &= ~(PSP_USEHEADERTITLE | PSP_USEHEADERSUBTITLE);
if (ppsp->dwFlags & PSP_USEHEADERTITLE) if (ppsp->dwFlags & PSP_USEHEADERTITLE)
{ ppsp->pszHeaderTitle = load_string( ppsp->hInstance, ppsp->pszHeaderTitle );
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 );
}
}
else else
ppsp->pszHeaderTitle = NULL; ppsp->pszHeaderTitle = NULL;
if (ppsp->dwFlags & PSP_USEHEADERSUBTITLE) if (ppsp->dwFlags & PSP_USEHEADERSUBTITLE)
{ ppsp->pszHeaderSubTitle = load_string( ppsp->hInstance, ppsp->pszHeaderSubTitle );
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 );
}
}
else else
ppsp->pszHeaderSubTitle = NULL; ppsp->pszHeaderSubTitle = NULL;
@ -3533,7 +3513,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_CLOSE: case WM_CLOSE:
PROPSHEET_Cancel(hwnd, 1); PROPSHEET_Cancel(hwnd, 1);
return TRUE; return FALSE; /* let DefDlgProc post us WM_COMMAND/IDCANCEL */
case WM_COMMAND: case WM_COMMAND:
if (!PROPSHEET_DoCommand(hwnd, LOWORD(wParam))) if (!PROPSHEET_DoCommand(hwnd, LOWORD(wParam)))