Module: wine Branch: refs/heads/master Commit: 217dae68c52eb6e730aced11e38053113a464692 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=217dae68c52eb6e730aced11...
Author: Dmitry Timoshkov dmitry@codeweavers.com Date: Thu Jun 8 23:56:52 2006 +0900
comctl32: Return FALSE in the WM_CLOSE PROPSHEET_DialogProc handler.
Return FALSE in the WM_CLOSE PROPSHEET_DialogProc handler in order to allow DefDlgProc to post us WM_COMMAND/IDCANCEL and unblock modal message loop.
---
dlls/comctl32/propsheet.c | 107 ++++++++++++++++++--------------------------- 1 files changed, 43 insertions(+), 64 deletions(-)
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c index 9f3527d..66f88cc 100644 --- a/dlls/comctl32/propsheet.c +++ b/dlls/comctl32/propsheet.c @@ -2862,6 +2862,42 @@ INT_PTR WINAPI PropertySheetW(LPCPROPSHE 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 +2942,7 @@ HPROPSHEETPAGE WINAPI CreatePropertyShee 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 +2955,7 @@ HPROPSHEETPAGE WINAPI CreatePropertyShee 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 +2965,7 @@ HPROPSHEETPAGE WINAPI CreatePropertyShee 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 +3007,7 @@ HPROPSHEETPAGE WINAPI CreatePropertyShee }
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 +3015,12 @@ HPROPSHEETPAGE WINAPI CreatePropertyShee 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 +3512,7 @@ PROPSHEET_DialogProc(HWND hwnd, UINT uMs
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)))