Maarten Lankhorst : winecfg: Only initialise the audio drivers once.
Alexandre Julliard
julliard at winehq.org
Mon Jun 21 11:07:05 CDT 2010
Module: wine
Branch: master
Commit: 0dc5bab1c9ccb27473d9bc2ec96e58b0e23662e4
URL: http://source.winehq.org/git/wine.git/?a=commit;h=0dc5bab1c9ccb27473d9bc2ec96e58b0e23662e4
Author: Maarten Lankhorst <m.b.lankhorst at gmail.com>
Date: Fri Jun 18 21:18:06 2010 +0200
winecfg: Only initialise the audio drivers once.
---
programs/winecfg/audio.c | 47 ++++++++++++++++++++++++++++++++++++---------
1 files changed, 37 insertions(+), 10 deletions(-)
diff --git a/programs/winecfg/audio.c b/programs/winecfg/audio.c
index c5cebcd..134296d 100644
--- a/programs/winecfg/audio.c
+++ b/programs/winecfg/audio.c
@@ -86,9 +86,10 @@ typedef struct
{
UINT nameID;
const char *szDriver;
+ HDRVR hDriver;
} AUDIO_DRIVER;
-static const AUDIO_DRIVER sAudioDrivers[] = {
+static AUDIO_DRIVER sAudioDrivers[] = {
{IDS_DRIVER_ALSA, "alsa"},
{IDS_DRIVER_OSS, "oss"},
{IDS_DRIVER_COREAUDIO, "coreaudio"},
@@ -118,7 +119,7 @@ static void configureAudioDriver(HWND hDlg)
HDRVR hdrvr;
char wine_driver[MAX_NAME_LENGTH + 9];
sprintf(wine_driver, "wine%s.drv", pAudioDrv->szDriver);
- hdrvr = OpenDriverA(wine_driver, 0, 0);
+ hdrvr = pAudioDrv->hDriver;
if (hdrvr != 0)
{
if (SendDriverMessage(hdrvr, DRV_QUERYCONFIGURE, 0, 0) != 0)
@@ -129,7 +130,6 @@ static void configureAudioDriver(HWND hDlg)
dci.lpszDCIAliasName = NULL;
SendDriverMessage(hdrvr, DRV_CONFIGURE, 0, (LONG_PTR)&dci);
}
- CloseDriver(hdrvr, 0, 0);
}
else
{
@@ -197,7 +197,7 @@ static void removeDriver(const char * driver)
static void initAudioDeviceTree(HWND hDlg)
{
- const AUDIO_DRIVER *pAudioDrv = NULL;
+ AUDIO_DRIVER *pAudioDrv = NULL;
int i, j;
TVINSERTSTRUCTW insert;
HTREEITEM root, driver[10];
@@ -247,7 +247,7 @@ static void initAudioDeviceTree(HWND hDlg)
LoadStringW (GetModuleHandle (NULL), pAudioDrv->nameID, text,
sizeof(text)/sizeof(text[0]));
- if ((hdrv = OpenDriverA(name, 0, 0)))
+ if ((hdrv = pAudioDrv->hDriver))
{
HMODULE lib;
if ((lib = GetDriverModuleHandle(hdrv)))
@@ -473,7 +473,6 @@ static void initAudioDeviceTree(HWND hDlg)
}
}
}
- CloseDriver(hdrv, 0, 0);
}
}
@@ -490,7 +489,7 @@ static void initAudioDeviceTree(HWND hDlg)
static void findAudioDrivers(void)
{
int numFound = 0;
- const AUDIO_DRIVER *pAudioDrv = NULL;
+ AUDIO_DRIVER *pAudioDrv = NULL;
HCURSOR old_cursor;
/* delete an existing list */
@@ -511,10 +510,38 @@ static void findAudioDrivers(void)
sprintf(driver, "wine%s.drv", pAudioDrv->szDriver);
- if ((hdrv = OpenDriverA(driver, 0, 0)))
- {
- CloseDriver(hdrv, 0, 0);
+ hdrv = pAudioDrv->hDriver;
+ if (!pAudioDrv->hDriver && (hdrv = OpenDriverA(driver, 0, 0))) {
+ HMODULE lib = GetDriverModuleHandle(hdrv);
+ MessagePtr wodMessagePtr = (MessagePtr)GetProcAddress(lib, "wodMessage");
+ MessagePtr widMessagePtr = (MessagePtr)GetProcAddress(lib, "widMessage");
+ MessagePtr modMessagePtr = (MessagePtr)GetProcAddress(lib, "modMessage");
+ MessagePtr midMessagePtr = (MessagePtr)GetProcAddress(lib, "midMessage");
+ MessagePtr auxMessagePtr = (MessagePtr)GetProcAddress(lib, "auxMessage");
+ MessagePtr mxdMessagePtr = (MessagePtr)GetProcAddress(lib, "mxdMessage");
+
+ pAudioDrv->hDriver = hdrv;
+ if (wodMessagePtr)
+ wodMessagePtr(0, DRVM_INIT, 0, 0, 0);
+
+ if (widMessagePtr)
+ widMessagePtr(0, DRVM_INIT, 0, 0, 0);
+
+ if (modMessagePtr)
+ modMessagePtr(0, DRVM_INIT, 0, 0, 0);
+
+ if (midMessagePtr)
+ midMessagePtr(0, DRVM_INIT, 0, 0, 0);
+
+ if (auxMessagePtr)
+ auxMessagePtr(0, DRVM_INIT, 0, 0, 0);
+
+ if (mxdMessagePtr)
+ mxdMessagePtr(0, DRVM_INIT, 0, 0, 0);
+ }
+ if (hdrv)
+ {
if (loadedAudioDrv)
loadedAudioDrv = HeapReAlloc(GetProcessHeap(), 0, loadedAudioDrv, (numFound + 1) * sizeof(AUDIO_DRIVER));
else
More information about the wine-cvs
mailing list