From 6be12f488956e6995830386b64ca3c0dcd77389a Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Wed, 10 Jun 2015 00:58:50 +0200 Subject: Windows: Implement waiting dialog for Auto-Mount Devices operations to avoid freezing GUI. --- src/Mount/Mount.c | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'src/Mount') diff --git a/src/Mount/Mount.c b/src/Mount/Mount.c index 83767be1..88dbfa5d 100644 --- a/src/Mount/Mount.c +++ b/src/Mount/Mount.c @@ -4415,9 +4415,9 @@ retry: return status; } -static BOOL MountAllDevices (HWND hwndDlg, BOOL bPasswordPrompt) +static BOOL MountAllDevicesThreadCode (HWND hwndDlg, BOOL bPasswordPrompt) { - HWND driveList = GetDlgItem (hwndDlg, IDC_DRIVELIST); + HWND driveList = GetDlgItem (MainDlg, IDC_DRIVELIST); int selDrive = ListView_GetSelectionMark (driveList); BOOL shared = FALSE, status = FALSE, bHeaderBakRetry = FALSE; int mountedVolCount = 0; @@ -4536,7 +4536,7 @@ static BOOL MountAllDevices (HWND hwndDlg, BOOL bPasswordPrompt) if (mounted == 2) shared = TRUE; - LoadDriveLetters (hwndDlg, driveList, (HIWORD (GetItemLong (GetDlgItem (hwndDlg, IDC_DRIVELIST), selDrive)))); + LoadDriveLetters (hwndDlg, driveList, (HIWORD (GetItemLong (GetDlgItem (MainDlg, IDC_DRIVELIST), selDrive)))); selDrive++; if (bExplore) @@ -4656,13 +4656,38 @@ ret: if (UsePreferences) bCacheInDriver = bCacheInDriverDefault; - EnableDisableButtons (hwndDlg); + EnableDisableButtons (MainDlg); NormalCursor(); return status; } +typedef struct +{ + BOOL bPasswordPrompt; + BOOL bRet; +} MountAllDevicesThreadParam; + +void CALLBACK mountAllDevicesThreadProc(void* pArg, HWND hwndDlg) +{ + MountAllDevicesThreadParam* threadParam =(MountAllDevicesThreadParam*) pArg; + BOOL bPasswordPrompt = threadParam->bPasswordPrompt; + + threadParam->bRet = MountAllDevicesThreadCode (hwndDlg, bPasswordPrompt); +} + +static BOOL MountAllDevices (HWND hwndDlg, BOOL bPasswordPrompt) +{ + MountAllDevicesThreadParam param; + param.bPasswordPrompt = bPasswordPrompt; + param.bRet = FALSE; + + ShowWaitDialog (hwndDlg, TRUE, mountAllDevicesThreadProc, ¶m); + + return param.bRet; +} + static void ChangePassword (HWND hwndDlg) { INT_PTR result; -- cgit v1.2.3