Here is a patch that adds an audio driver configure button and tries to send a DRV_CONFIGURE message to the selected audio driver.
It doesn't work because it can't find the audio driver. However, hard coding the driver name to "joystick.drv" does display the joystick config dialog so it should work. Any ideas why it doesn't work?
Once this works, it should be possible to implement a real config dialog for each audio driver.
Index: programs/winecfg/En.rc =================================================================== RCS file: /home/wine/wine/programs/winecfg/En.rc,v retrieving revision 1.41 diff -p -u -r1.41 En.rc --- programs/winecfg/En.rc 19 May 2005 11:14:52 -0000 1.41 +++ programs/winecfg/En.rc 27 Jun 2005 00:07:29 -0000 @@ -139,6 +139,8 @@ BEGIN LTEXT "Audio driver: ",IDC_STATIC,10,20,60,8 COMBOBOX IDC_AUDIO_DRIVER,70,18,85,85,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP PUSHBUTTON "Autodetect",IDC_AUDIO_AUTODETECT,170,20,49,14 + PUSHBUTTON "Configure",IDC_AUDIO_CONFIGURE,170,40,49,14 + PUSHBUTTON "Control Panel",IDC_AUDIO_CONTROL_PANEL,170,60,49,14 END
STRINGTABLE DISCARDABLE Index: programs/winecfg/Makefile.in =================================================================== RCS file: /home/wine/wine/programs/winecfg/Makefile.in,v retrieving revision 1.13 diff -p -u -r1.13 Makefile.in --- programs/winecfg/Makefile.in 9 Mar 2005 16:41:30 -0000 1.13 +++ programs/winecfg/Makefile.in 27 Jun 2005 00:07:29 -0000 @@ -4,7 +4,7 @@ SRCDIR = @srcdir@ VPATH = @srcdir@ MODULE = winecfg.exe APPMODE = -mwindows -IMPORTS = comdlg32 comctl32 shell32 ole32 shlwapi user32 advapi32 kernel32 +IMPORTS = comdlg32 comctl32 shell32 ole32 shlwapi user32 advapi32 kernel32 winmm
C_SRCS = \ appdefaults.c \ Index: programs/winecfg/audio.c =================================================================== RCS file: /home/wine/wine/programs/winecfg/audio.c,v retrieving revision 1.9 diff -p -u -r1.9 audio.c --- programs/winecfg/audio.c 23 Jun 2005 11:42:54 -0000 1.9 +++ programs/winecfg/audio.c 27 Jun 2005 00:07:29 -0000 @@ -37,6 +37,7 @@ #include <shlguid.h> #include <shlwapi.h> #include <shlobj.h> +#include <mmsystem.h>
#include "winecfg.h" #include "resource.h" @@ -64,6 +65,46 @@ static void selectAudioDriver(HWND hDlg, } }
+static void configureAudioDriver(HWND hDlg, const char *drivername) +{ + int i; + const AUDIO_DRIVER *pAudioDrv = NULL; + + if ((pAudioDrv = getAudioDrivers())) + { + for (i = 0; *pAudioDrv->szName; i++, pAudioDrv++) + { + if (!strcmp (pAudioDrv->szDriver, drivername)) + { + HDRVR hdrvr; + char wine_driver[MAX_NAME_LENGTH + 8]; + sprintf(wine_driver, "wine%s.drv", pAudioDrv->szDriver); + hdrvr = OpenDriverA(wine_driver, 0, 0); + if (hdrvr != 0) + { + if (SendDriverMessage(hdrvr, DRV_QUERYCONFIGURE, 0, 0) != 0) + { + DRVCONFIGINFO dci; + LONG lRes; + dci.dwDCISize = sizeof (dci); + dci.lpszDCISectionName = (LPWSTR)0; + dci.lpszDCIAliasName = (LPWSTR)0; + lRes = SendDriverMessage(hdrvr, DRV_CONFIGURE, 0, (LONG)&dci); + } + CloseDriver(hdrvr, 0, 0); + } + else + { + char str[1024]; + sprintf(str, "Couldn't open %s!", wine_driver); + MessageBox(NULL, str, "ERROR", MB_OK | MB_ICONERROR); + } + break; + } + } + } +} + static void initAudioDlg (HWND hDlg) { char *curAudioDriver = get_reg_key(config_key, "Drivers", "Audio", "alsa"); @@ -172,6 +213,15 @@ AudioDlgProc (HWND hDlg, UINT uMsg, WPAR selectAudioDriver(hDlg, (char*)pAudioDrv[selected_driver].szDriver); } break; + case IDC_AUDIO_CONFIGURE: + { + const AUDIO_DRIVER *pAudioDrv = getAudioDrivers(); + int selected_driver = SendDlgItemMessage(hDlg, IDC_AUDIO_DRIVER, CB_GETCURSEL, 0, 0); + configureAudioDriver(hDlg, (char*)pAudioDrv[selected_driver].szDriver); + } + break; + case IDC_AUDIO_CONTROL_PANEL: + break; } break;
Index: programs/winecfg/resource.h =================================================================== RCS file: /home/wine/wine/programs/winecfg/resource.h,v retrieving revision 1.24 diff -p -u -r1.24 resource.h --- programs/winecfg/resource.h 19 May 2005 11:14:52 -0000 1.24 +++ programs/winecfg/resource.h 27 Jun 2005 00:07:29 -0000 @@ -123,3 +123,6 @@ /* audio tab */ #define IDC_AUDIO_AUTODETECT 1300 #define IDC_AUDIO_DRIVER 1301 +#define IDC_AUDIO_CONFIGURE 1302 +#define IDC_AUDIO_CONTROL_PANEL 1303 +