Remove calls to DIALOG_DoDialogBox and DIALOG_CreateIndirect.
diff --git a/dlls/commdlg/fontdlg.c b/dlls/commdlg/fontdlg.c
index 7660d60..b0027ff 100644
--- a/dlls/commdlg/fontdlg.c
+++ b/dlls/commdlg/fontdlg.c
@@ -36,7 +36,8 @@
LPARAM lParam);
LRESULT WINAPI FormatCharDlgProcW(HWND hDlg, UINT uMsg, WPARAM wParam,
LPARAM lParam);
-
+LRESULT WINAPI FormatCharDlgProc16(HWND16 hDlg, UINT16 message, WPARAM16 wParam,
+ LPARAM lParam);
static void CFn_CHOOSEFONT16to32A(LPCHOOSEFONT16 chf16, LPCHOOSEFONTA chf32a)
{
@@ -64,10 +65,11 @@
BOOL16 WINAPI ChooseFont16(LPCHOOSEFONT16 lpChFont)
{
HINSTANCE16 hInst;
- HANDLE16 hDlgTmpl = 0;
- BOOL16 bRet = FALSE, win32Format = FALSE;
+ HANDLE16 hDlgTmpl16 = 0, hResource16 = 0;
+ HGLOBAL16 hGlobal16 = 0;
+ BOOL16 bRet = FALSE;
LPCVOID template;
- HWND hwndDialog;
+ FARPROC16 ptr;
CHOOSEFONTA cf32a;
LOGFONTA lf32a;
SEGPTR lpTemplateName;
@@ -96,8 +98,8 @@
COMDLG32_SetCommDlgExtendedError(CDERR_FINDRESFAILURE);
return FALSE;
}
- if (!(hDlgTmpl = LoadResource16( lpChFont->hInstance, hResInfo )) ||
- !(template = LockResource16( hDlgTmpl )))
+ if (!(hDlgTmpl16 = LoadResource16( lpChFont->hInstance, hResInfo )) ||
+ !(template = LockResource16( hDlgTmpl16 )))
{
COMDLG32_SetCommDlgExtendedError(CDERR_LOADRESFAILURE);
return FALSE;
@@ -105,35 +107,57 @@
}
else
{
- HANDLE hResInfo;
- if (!(hResInfo = FindResourceA(COMMDLG_hInstance32, "CHOOSE_FONT", RT_DIALOGA)))
- {
- COMDLG32_SetCommDlgExtendedError(CDERR_FINDRESFAILURE);
- return FALSE;
- }
- if (!(hDlgTmpl = LoadResource(COMMDLG_hInstance32, hResInfo )) ||
- !(template = LockResource( hDlgTmpl )))
- {
- COMDLG32_SetCommDlgExtendedError(CDERR_LOADRESFAILURE);
- return FALSE;
- }
- win32Format = TRUE;
+ HANDLE hResInfo, hDlgTmpl32;
+ LPCVOID template32;
+ DWORD size;
+ if (!(hResInfo = FindResourceA(COMMDLG_hInstance32, "CHOOSE_FONT", RT_DIALOGA)))
+ {
+ COMDLG32_SetCommDlgExtendedError(CDERR_FINDRESFAILURE);
+ return FALSE;
+ }
+ if (!(hDlgTmpl32 = LoadResource(COMMDLG_hInstance32, hResInfo)) ||
+ !(template32 = LockResource(hDlgTmpl32)))
+ {
+ COMDLG32_SetCommDlgExtendedError(CDERR_LOADRESFAILURE);
+ return FALSE;
+ }
+ size = SizeofResource(GetModuleHandleA("COMDLG32"), hResInfo);
+ hGlobal16 = GlobalAlloc16(0, size);
+ if (!hGlobal16)
+ {
+ COMDLG32_SetCommDlgExtendedError(CDERR_MEMALLOCFAILURE);
+ ERR("alloc failure for %ld bytes\n", size);
+ return FALSE;
+ }
+ template = GlobalLock16(hGlobal16);
+ if (!template)
+ {
+ COMDLG32_SetCommDlgExtendedError(CDERR_MEMLOCKFAILURE);
+ ERR("global lock failure for %x handle\n", hGlobal16);
+ GlobalFree16(hGlobal16);
+ return FALSE;
+ }
+ ConvertDialog32To16((LPVOID)template32, size, (LPVOID)template);
+ hDlgTmpl16 = hGlobal16;
+
}
- hInst = GetWindowLongA( lpChFont->hwndOwner, GWL_HINSTANCE );
-
/* lpTemplateName is not used in the dialog */
lpTemplateName=lpChFont->lpTemplateName;
lpChFont->lpTemplateName=(SEGPTR)&cf32a;
-
- hwndDialog = DIALOG_CreateIndirect( hInst, template, win32Format,
- lpChFont->hwndOwner,
- (DLGPROC16)FormatCharDlgProcA,
- (DWORD)lpChFont, WIN_PROC_32A );
- if (hwndDialog) bRet = DIALOG_DoDialogBox(hwndDialog, lpChFont->hwndOwner);
- if (hDlgTmpl) FreeResource16( hDlgTmpl );
+
+ ptr = GetProcAddress16(GetModuleHandle16("COMMDLG"), (SEGPTR) 16);
+ hInst = GetWindowLongA(lpChFont->hwndOwner, GWL_HINSTANCE);
+ bRet = DialogBoxIndirectParam16(hInst, hDlgTmpl16, lpChFont->hwndOwner,
+ (DLGPROC16) ptr, (DWORD)lpChFont);
+ if (hResource16) FreeResource16(hDlgTmpl16);
+ if (hGlobal16)
+ {
+ GlobalUnlock16(hGlobal16);
+ GlobalFree16(hGlobal16);
+ }
lpChFont->lpTemplateName=lpTemplateName;
- FONT_LogFont32ATo16(cf32a.lpLogFont,
+ FONT_LogFont32ATo16(cf32a.lpLogFont,
(LPLOGFONT16)(PTR_SEG_TO_LIN(lpChFont->lpLogFont)));
return bRet;
}
@@ -144,9 +168,6 @@
*/
BOOL WINAPI ChooseFontA(LPCHOOSEFONTA lpChFont)
{
- BOOL bRet=FALSE;
- HWND hwndDialog;
- HINSTANCE hInst=GetWindowLongA( lpChFont->hwndOwner, GWL_HINSTANCE );
LPCVOID template;
HANDLE hResInfo, hDlgTmpl;
@@ -164,10 +185,8 @@
if (lpChFont->Flags & (CF_SELECTSCRIPT | CF_NOVERTFONTS | CF_ENABLETEMPLATE |
CF_ENABLETEMPLATEHANDLE)) FIXME(": unimplemented flag (ignored)\n");
- hwndDialog = DIALOG_CreateIndirect(hInst, template, TRUE, lpChFont->hwndOwner,
- (DLGPROC16)FormatCharDlgProcA, (LPARAM)lpChFont, WIN_PROC_32A );
- if (hwndDialog) bRet = DIALOG_DoDialogBox(hwndDialog, lpChFont->hwndOwner);
- return bRet;
+ return DialogBoxIndirectParamA(COMMDLG_hInstance32, template,
+ lpChFont->hwndOwner, (DLGPROC)FormatCharDlgProcA, (LPARAM)lpChFont );
}
/***********************************************************************
@@ -176,8 +195,6 @@
BOOL WINAPI ChooseFontW(LPCHOOSEFONTW lpChFont)
{
BOOL bRet=FALSE;
- HWND hwndDialog;
- HINSTANCE hInst=GetWindowLongA( lpChFont->hwndOwner, GWL_HINSTANCE );
CHOOSEFONTA cf32a;
LOGFONTA lf32a;
LPCVOID template;
@@ -203,9 +220,8 @@
cf32a.lpLogFont=&lf32a;
cf32a.lpszStyle=HEAP_strdupWtoA(GetProcessHeap(), 0, lpChFont->lpszStyle);
lpChFont->lpTemplateName=(LPWSTR)&cf32a;
- hwndDialog=DIALOG_CreateIndirect(hInst, template, TRUE, lpChFont->hwndOwner,
- (DLGPROC16)FormatCharDlgProcW, (LPARAM)lpChFont, WIN_PROC_32W );
- if (hwndDialog)bRet=DIALOG_DoDialogBox(hwndDialog, lpChFont->hwndOwner);
+ bRet = DialogBoxIndirectParamW(COMMDLG_hInstance32, template,
+ lpChFont->hwndOwner, (DLGPROC)FormatCharDlgProcW, (LPARAM)lpChFont );
HeapFree(GetProcessHeap(), 0, cf32a.lpszStyle);
lpChFont->lpTemplateName=(LPWSTR)cf32a.lpTemplateName;
memcpy(lpChFont->lpLogFont, &lf32a, sizeof(CHOOSEFONTA));