From: Zebediah Figura Subject: [PATCH 2/2] msacm32: Implement ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT. Message-Id: <20170622230241.3615-2-zfigura@codeweavers.com> Date: Thu, 22 Jun 2017 18:02:41 -0500 In-Reply-To: <20170622230241.3615-1-zfigura@codeweavers.com> References: <20170622230241.3615-1-zfigura@codeweavers.com> From: Zebediah Figura Signed-off-by: Zebediah Figura --- dlls/msacm32/format.c | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/dlls/msacm32/format.c b/dlls/msacm32/format.c index 24d6ea5f60a..a862757f858 100644 --- a/dlls/msacm32/format.c +++ b/dlls/msacm32/format.c @@ -62,8 +62,13 @@ static BOOL CALLBACK MSACM_FillFormatTagsCB(HACMDRIVERID hadid, if (SendDlgItemMessageW(affd->hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, CB_FINDSTRINGEXACT, -1, (LPARAM)paftd->szFormatTag) == CB_ERR) - SendDlgItemMessageW(affd->hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, + { + int index = SendDlgItemMessageW(affd->hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, CB_ADDSTRING, 0, (LPARAM)paftd->szFormatTag); + if (paftd->dwFormatTag == affd->afc->pwfx->wFormatTag) + SendDlgItemMessageW(affd->hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, + CB_SETCURSEL, index, 0); + } } break; case WINE_ACMFF_FORMAT: @@ -87,7 +92,7 @@ static BOOL CALLBACK MSACM_FillFormatTagsCB(HACMDRIVERID hadid, for (i = 0; i < paftd->cStandardFormats; i++) { static const WCHAR fmtW[] = {'%','d',' ','K','o','/','s','\0'}; - int j; + int j, index; afd.dwFormatIndex = i; afd.fdwSupport = 0; @@ -99,14 +104,16 @@ static BOOL CALLBACK MSACM_FillFormatTagsCB(HACMDRIVERID hadid, buffer[j] = ' '; wsprintfW(buffer + ACMFORMATTAGDETAILS_FORMATTAG_CHARS, fmtW, (afd.pwfx->nAvgBytesPerSec + 512) / 1024); - SendDlgItemMessageW(affd->hWnd, + index = SendDlgItemMessageW(affd->hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMAT, CB_ADDSTRING, 0, (LPARAM)buffer); + if ((affd->afc->fdwStyle & ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT) && + !memcmp(afd.pwfx, affd->afc->pwfx, paftd->cbFormatSize)) + SendDlgItemMessageW(affd->hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMAT, + CB_SETCURSEL, index, 0); } } acmDriverClose(had, 0); - SendDlgItemMessageW(affd->hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMAT, - CB_SETCURSEL, 0, 0); HeapFree(MSACM_hHeap, 0, afd.pwfx); } } @@ -138,7 +145,7 @@ static BOOL CALLBACK MSACM_FillFormatTagsCB(HACMDRIVERID hadid, return TRUE; } -static BOOL MSACM_FillFormatTags(HWND hWnd) +static BOOL MSACM_FillFormatTags(HWND hWnd, PACMFORMATCHOOSEW afc) { ACMFORMATTAGDETAILSW aftd; struct MSACM_FillFormatData affd; @@ -148,13 +155,15 @@ static BOOL MSACM_FillFormatTags(HWND hWnd) affd.hWnd = hWnd; affd.mode = WINE_ACMFF_TAG; + affd.afc = afc; acmFormatTagEnumW(NULL, &aftd, MSACM_FillFormatTagsCB, (DWORD_PTR)&affd, 0); - SendDlgItemMessageW(hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, CB_SETCURSEL, 0, 0); + if (SendDlgItemMessageW(hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, CB_GETCURSEL, 0, 0) == CB_ERR) + SendDlgItemMessageW(hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, CB_SETCURSEL, 0, 0); return TRUE; } -static BOOL MSACM_FillFormat(HWND hWnd) +static BOOL MSACM_FillFormat(HWND hWnd, PACMFORMATCHOOSEW afc) { ACMFORMATTAGDETAILSW aftd; struct MSACM_FillFormatData affd; @@ -166,6 +175,7 @@ static BOOL MSACM_FillFormat(HWND hWnd) affd.hWnd = hWnd; affd.mode = WINE_ACMFF_FORMAT; + affd.afc = afc; SendDlgItemMessageW(hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, CB_GETLBTEXT, SendDlgItemMessageW(hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, @@ -173,7 +183,8 @@ static BOOL MSACM_FillFormat(HWND hWnd) (LPARAM)affd.szFormatTag); acmFormatTagEnumW(NULL, &aftd, MSACM_FillFormatTagsCB, (DWORD_PTR)&affd, 0); - SendDlgItemMessageW(hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMAT, CB_SETCURSEL, 0, 0); + if (SendDlgItemMessageW(hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMAT, CB_GETCURSEL, 0, 0) == CB_ERR) + SendDlgItemMessageW(hWnd, IDD_ACMFORMATCHOOSE_CMB_FORMAT, CB_SETCURSEL, 0, 0); return TRUE; } @@ -212,10 +223,13 @@ static INT_PTR CALLBACK FormatChooseDlgProc(HWND hWnd, UINT msg, case WM_INITDIALOG: afc = (PACMFORMATCHOOSEW)lParam; SetPropW(hWnd, fmt_prop, (HANDLE)afc); - MSACM_FillFormatTags(hWnd); - MSACM_FillFormat(hWnd); + if (!(afc->fdwStyle & ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT)) + afc->pwfx->wFormatTag = WAVE_FORMAT_PCM; + MSACM_FillFormatTags(hWnd, afc); + MSACM_FillFormat(hWnd, afc); if ((afc->fdwStyle & ~(ACMFORMATCHOOSE_STYLEF_CONTEXTHELP| ACMFORMATCHOOSE_STYLEF_SHOWHELP| + ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT| ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATEHANDLE| ACMFORMATCHOOSE_STYLEF_ENABLETEMPLATE)) != 0) FIXME("Unsupported style %08x\n", afc->fdwStyle); @@ -234,7 +248,7 @@ static INT_PTR CALLBACK FormatChooseDlgProc(HWND hWnd, UINT msg, case IDD_ACMFORMATCHOOSE_CMB_FORMATTAG: switch (HIWORD(wParam)) { case CBN_SELCHANGE: - MSACM_FillFormat(hWnd); + MSACM_FillFormat(hWnd, afc); break; default: TRACE("Dropped dlgNotif (fmtTag): 0x%08x 0x%08lx\n", -- 2.13.1