From 89a7fad16d06b271dab13f8c63dfaa95dbdf398b Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Fri, 11 Sep 2015 00:25:23 +0200 Subject: Windows: avoid freezing the wait dialog by setting its parent to desktop when having lengthy driver calls (like mounting) --- src/Mount/Mount.c | 38 ++++++++++++++++++++++---------------- src/Mount/Mount.h | 2 +- 2 files changed, 23 insertions(+), 17 deletions(-) (limited to 'src/Mount') diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c index af661312..e67c9018 100644 --- a/src/Mount/Mount.c +++ b/src/Mount/Mount.c @@ -4709,7 +4709,7 @@ retry: if (interact && !Silent) { - ShowWaitDialog (hwndDlg, TRUE, DismountAllThreadProc, &dismountAllThreadParam); + ShowWaitDialog (hwndDlg, FALSE, DismountAllThreadProc, &dismountAllThreadParam); } else DismountAllThreadProc (&dismountAllThreadParam, hwndDlg); @@ -5051,7 +5051,7 @@ static BOOL MountAllDevices (HWND hwndDlg, BOOL bPasswordPrompt) param.bPasswordPrompt = bPasswordPrompt; param.bRet = FALSE; - ShowWaitDialog (hwndDlg, TRUE, mountAllDevicesThreadProc, ¶m); + ShowWaitDialog (hwndDlg, FALSE, mountAllDevicesThreadProc, ¶m); return param.bRet; } @@ -7801,7 +7801,7 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa if (lw == IDM_MOUNT_FAVORITE_VOLUMES) { - ShowWaitDialog (hwndDlg, TRUE, mountFavoriteVolumeThreadFunction, NULL); + _beginthread(mountFavoriteVolumeThreadFunction, 0, NULL); return 1; } @@ -7875,13 +7875,13 @@ BOOL CALLBACK MainDialogProc (HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lPa } else { - mountFavoriteVolumeThreadParam param; - param.systemFavorites = FALSE; - param.logOnMount = FALSE; - param.hotKeyMount = FALSE; - param.favoriteVolumeToMount = &FavoriteVolumes[favoriteIndex]; + mountFavoriteVolumeThreadParam* pParam = (mountFavoriteVolumeThreadParam*) calloc(1, sizeof(mountFavoriteVolumeThreadParam)); + pParam->systemFavorites = FALSE; + pParam->logOnMount = FALSE; + pParam->hotKeyMount = FALSE; + pParam->favoriteVolumeToMount = &FavoriteVolumes[favoriteIndex]; - ShowWaitDialog (hwndDlg, TRUE, mountFavoriteVolumeThreadFunction, ¶m); + _beginthread(mountFavoriteVolumeThreadFunction, 0, pParam); } } @@ -8968,7 +8968,7 @@ BOOL MountFavoriteVolumes (HWND hwnd, BOOL systemFavorites, BOOL logOnMount, BOO return bRet; } -void CALLBACK mountFavoriteVolumeThreadFunction (void *pArg, HWND hwnd) +void CALLBACK mountFavoriteVolumeCallbackFunction (void *pArg, HWND hwnd) { mountFavoriteVolumeThreadParam* pParam = (mountFavoriteVolumeThreadParam*) pArg; @@ -8978,11 +8978,17 @@ void CALLBACK mountFavoriteVolumeThreadFunction (void *pArg, HWND hwnd) MountFavoriteVolumes (hwnd, pParam->systemFavorites, pParam->logOnMount, pParam->hotKeyMount, *(pParam->favoriteVolumeToMount)); else MountFavoriteVolumes (hwnd, pParam->systemFavorites, pParam->logOnMount, pParam->hotKeyMount); + + free (pParam); } else MountFavoriteVolumes (hwnd); } +void __cdecl mountFavoriteVolumeThreadFunction (void *pArg) +{ + ShowWaitDialog (NULL, FALSE, mountFavoriteVolumeCallbackFunction, pArg); +} static void SaveDefaultKeyFilesParam (HWND hwnd) { @@ -9116,13 +9122,13 @@ static void HandleHotKey (HWND hwndDlg, WPARAM wParam) case HK_MOUNT_FAVORITE_VOLUMES: { - mountFavoriteVolumeThreadParam param; - param.systemFavorites = FALSE; - param.logOnMount = FALSE; - param.hotKeyMount = TRUE; - param.favoriteVolumeToMount = NULL; + mountFavoriteVolumeThreadParam* pParam = (mountFavoriteVolumeThreadParam*) calloc(1, sizeof(mountFavoriteVolumeThreadParam)); + pParam->systemFavorites = FALSE; + pParam->logOnMount = FALSE; + pParam->hotKeyMount = TRUE; + pParam->favoriteVolumeToMount = NULL; - ShowWaitDialog (hwndDlg, TRUE, mountFavoriteVolumeThreadFunction, ¶m); + _beginthread(mountFavoriteVolumeThreadFunction, 0, pParam); } break; diff --git a/src/Mount/Mount.h b/src/Mount/Mount.h index dcae9921..097a8a48 100644 --- a/src/Mount/Mount.h +++ b/src/Mount/Mount.h @@ -127,6 +127,6 @@ typedef struct void SetDriverConfigurationFlag (uint32 flag, BOOL state); BOOL MountFavoriteVolumes (HWND hwnd, BOOL systemFavorites = FALSE, BOOL logOnMount = FALSE, BOOL hotKeyMount = FALSE, const VeraCrypt::FavoriteVolume &favoriteVolumeToMount = VeraCrypt::FavoriteVolume()); -void CALLBACK mountFavoriteVolumeThreadFunction (void *pArg, HWND hwnd); +void __cdecl mountFavoriteVolumeThreadFunction (void *pArg); #endif -- cgit v1.2.3