[PATCH v2 2/2] msacm32: Implement ACMFORMATCHOOSE_STYLEF_INITTOWFXSTRUCT.

Zebediah Figura z.figura12 at gmail.com
Fri Jun 23 10:21:19 CDT 2017


From: Zebediah Figura <z.figura12 at gmail.com>

v2: fix memcmp size
Signed-off-by: Zebediah Figura <zfigura at codeweavers.com>
---
 dlls/msacm32/format.c | 39 +++++++++++++++++++++++++++------------
 1 file changed, 27 insertions(+), 12 deletions(-)

diff --git a/dlls/msacm32/format.c b/dlls/msacm32/format.c
index 24d6ea5f60a..1d2ada51f30 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,17 @@ 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) &&
+                           affd->afc->cbwfx >= paftd->cbFormatSize &&
+                           !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 +146,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 +156,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 +176,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 +184,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 +224,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 +249,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




More information about the wine-patches mailing list