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 +
Robert Reif wrote:
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?
Answering my own post, it looks like wine doesn't support opening a driver more than once. Changing the wineoss driver to allow multiple opens causes the configure dialog to appear but also causes a crash at program exit because the winmm driver is confused.
Once this works, it should be possible to implement a real config dialog for each audio driver.
Robert Reif a écrit :
Robert Reif wrote:
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?
Answering my own post, it looks like wine doesn't support opening a driver more than once. Changing the wineoss driver to allow multiple opens causes the configure dialog to appear but also causes a crash at program exit because the winmm driver is confused.
I'd rather say wineoss only supports one opening... btw, did you change as well the close message with proper refcounting ? A+