mirror of
https://github.com/veracrypt/VeraCrypt.git
synced 2025-11-12 19:38:26 -06:00
Windows: Solve issue of some dialogs not showing up and that was caused by wrong handling of WM_NOTIFY messages. This behavior appeared after switching to Windows visual styles.
This commit is contained in:
@@ -3256,7 +3256,7 @@ BOOL CALLBACK RawDevicesDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM l
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lw == IDCANCEL)
|
if ((msg == WM_COMMAND) && (lw == IDCANCEL))
|
||||||
{
|
{
|
||||||
NormalCursor ();
|
NormalCursor ();
|
||||||
EndDialog (hwndDlg, IDCANCEL);
|
EndDialog (hwndDlg, IDCANCEL);
|
||||||
@@ -4750,7 +4750,6 @@ BOOL CALLBACK BenchmarkDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lP
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
case WM_NOTIFY:
|
|
||||||
|
|
||||||
switch (lw)
|
switch (lw)
|
||||||
{
|
{
|
||||||
@@ -9581,141 +9580,143 @@ BOOL CALLBACK SecurityTokenKeyfileDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (lw)
|
if (msg == WM_COMMAND)
|
||||||
{
|
{
|
||||||
case IDCANCEL:
|
switch (lw)
|
||||||
EndDialog (hwndDlg, IDCANCEL);
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
case IDC_IMPORT_KEYFILE:
|
|
||||||
{
|
{
|
||||||
char keyfilePath[TC_MAX_PATH];
|
case IDCANCEL:
|
||||||
|
EndDialog (hwndDlg, IDCANCEL);
|
||||||
|
return 1;
|
||||||
|
|
||||||
if (BrowseFiles (hwndDlg, "SELECT_KEYFILE", keyfilePath, bHistory, FALSE, NULL))
|
case IDC_IMPORT_KEYFILE:
|
||||||
{
|
{
|
||||||
DWORD keyfileSize;
|
char keyfilePath[TC_MAX_PATH];
|
||||||
byte *keyfileData = (byte *) LoadFile (keyfilePath, &keyfileSize);
|
|
||||||
if (!keyfileData)
|
if (BrowseFiles (hwndDlg, "SELECT_KEYFILE", keyfilePath, bHistory, FALSE, NULL))
|
||||||
{
|
{
|
||||||
handleWin32Error (hwndDlg);
|
DWORD keyfileSize;
|
||||||
return 1;
|
byte *keyfileData = (byte *) LoadFile (keyfilePath, &keyfileSize);
|
||||||
|
if (!keyfileData)
|
||||||
|
{
|
||||||
|
handleWin32Error (hwndDlg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keyfileSize != 0)
|
||||||
|
{
|
||||||
|
NewSecurityTokenKeyfileDlgProcParams newParams;
|
||||||
|
newParams.Name = WideToUtf8String (SingleStringToWide (keyfilePath));
|
||||||
|
|
||||||
|
size_t lastBackSlash = newParams.Name.find_last_of ('\\');
|
||||||
|
if (lastBackSlash != string::npos)
|
||||||
|
newParams.Name = newParams.Name.substr (lastBackSlash + 1);
|
||||||
|
|
||||||
|
if (DialogBoxParamW (hInst, MAKEINTRESOURCEW (IDD_NEW_TOKEN_KEYFILE), hwndDlg, (DLGPROC) NewSecurityTokenKeyfileDlgProc, (LPARAM) &newParams) == IDOK)
|
||||||
|
{
|
||||||
|
vector <byte> keyfileDataVector (keyfileSize);
|
||||||
|
memcpy (&keyfileDataVector.front(), keyfileData, keyfileSize);
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
WaitCursor();
|
||||||
|
finally_do ({ NormalCursor(); });
|
||||||
|
|
||||||
|
SecurityToken::CreateKeyfile (newParams.SlotId, keyfileDataVector, newParams.Name);
|
||||||
|
|
||||||
|
keyfiles = SecurityToken::GetAvailableKeyfiles();
|
||||||
|
SecurityTokenKeyfileDlgFillList (hwndDlg, keyfiles);
|
||||||
|
}
|
||||||
|
catch (Exception &e)
|
||||||
|
{
|
||||||
|
e.Show (hwndDlg);
|
||||||
|
}
|
||||||
|
|
||||||
|
burn (&keyfileDataVector.front(), keyfileSize);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetLastError (ERROR_HANDLE_EOF);
|
||||||
|
handleWin32Error (hwndDlg);
|
||||||
|
}
|
||||||
|
|
||||||
|
burn (keyfileData, keyfileSize);
|
||||||
|
TCfree (keyfileData);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (keyfileSize != 0)
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
case IDC_EXPORT:
|
||||||
|
{
|
||||||
|
try
|
||||||
{
|
{
|
||||||
NewSecurityTokenKeyfileDlgProcParams newParams;
|
foreach (const SecurityTokenKeyfile &keyfile, SecurityTokenKeyfileDlgGetSelected (hwndDlg, keyfiles))
|
||||||
newParams.Name = WideToUtf8String (SingleStringToWide (keyfilePath));
|
|
||||||
|
|
||||||
size_t lastBackSlash = newParams.Name.find_last_of ('\\');
|
|
||||||
if (lastBackSlash != string::npos)
|
|
||||||
newParams.Name = newParams.Name.substr (lastBackSlash + 1);
|
|
||||||
|
|
||||||
if (DialogBoxParamW (hInst, MAKEINTRESOURCEW (IDD_NEW_TOKEN_KEYFILE), hwndDlg, (DLGPROC) NewSecurityTokenKeyfileDlgProc, (LPARAM) &newParams) == IDOK)
|
|
||||||
{
|
{
|
||||||
vector <byte> keyfileDataVector (keyfileSize);
|
char keyfilePath[TC_MAX_PATH];
|
||||||
memcpy (&keyfileDataVector.front(), keyfileData, keyfileSize);
|
|
||||||
|
if (!BrowseFiles (hwndDlg, "OPEN_TITLE", keyfilePath, bHistory, TRUE, NULL))
|
||||||
|
break;
|
||||||
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
WaitCursor();
|
WaitCursor();
|
||||||
finally_do ({ NormalCursor(); });
|
finally_do ({ NormalCursor(); });
|
||||||
|
|
||||||
SecurityToken::CreateKeyfile (newParams.SlotId, keyfileDataVector, newParams.Name);
|
vector <byte> keyfileData;
|
||||||
|
|
||||||
keyfiles = SecurityToken::GetAvailableKeyfiles();
|
SecurityToken::GetKeyfileData (keyfile, keyfileData);
|
||||||
SecurityTokenKeyfileDlgFillList (hwndDlg, keyfiles);
|
|
||||||
}
|
if (keyfileData.empty())
|
||||||
catch (Exception &e)
|
{
|
||||||
{
|
SetLastError (ERROR_HANDLE_EOF);
|
||||||
e.Show (hwndDlg);
|
handleWin32Error (hwndDlg);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
finally_do_arg (vector <byte> *, &keyfileData, { burn (&finally_arg->front(), finally_arg->size()); });
|
||||||
|
|
||||||
|
if (!SaveBufferToFile ((char *) &keyfileData.front(), keyfilePath, keyfileData.size(), FALSE))
|
||||||
|
throw SystemException ();
|
||||||
}
|
}
|
||||||
|
|
||||||
burn (&keyfileDataVector.front(), keyfileSize);
|
Info ("KEYFILE_EXPORTED");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
catch (Exception &e)
|
||||||
{
|
{
|
||||||
SetLastError (ERROR_HANDLE_EOF);
|
e.Show (hwndDlg);
|
||||||
handleWin32Error (hwndDlg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
burn (keyfileData, keyfileSize);
|
|
||||||
TCfree (keyfileData);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IDC_EXPORT:
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
foreach (const SecurityTokenKeyfile &keyfile, SecurityTokenKeyfileDlgGetSelected (hwndDlg, keyfiles))
|
|
||||||
{
|
|
||||||
char keyfilePath[TC_MAX_PATH];
|
|
||||||
|
|
||||||
if (!BrowseFiles (hwndDlg, "OPEN_TITLE", keyfilePath, bHistory, TRUE, NULL))
|
|
||||||
break;
|
|
||||||
|
|
||||||
{
|
|
||||||
WaitCursor();
|
|
||||||
finally_do ({ NormalCursor(); });
|
|
||||||
|
|
||||||
vector <byte> keyfileData;
|
|
||||||
|
|
||||||
SecurityToken::GetKeyfileData (keyfile, keyfileData);
|
|
||||||
|
|
||||||
if (keyfileData.empty())
|
|
||||||
{
|
|
||||||
SetLastError (ERROR_HANDLE_EOF);
|
|
||||||
handleWin32Error (hwndDlg);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
finally_do_arg (vector <byte> *, &keyfileData, { burn (&finally_arg->front(), finally_arg->size()); });
|
|
||||||
|
|
||||||
if (!SaveBufferToFile ((char *) &keyfileData.front(), keyfilePath, keyfileData.size(), FALSE))
|
|
||||||
throw SystemException ();
|
|
||||||
}
|
|
||||||
|
|
||||||
Info ("KEYFILE_EXPORTED");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception &e)
|
|
||||||
{
|
|
||||||
e.Show (hwndDlg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
case IDC_DELETE:
|
|
||||||
{
|
|
||||||
if (AskNoYes ("CONFIRM_SEL_FILES_DELETE") == IDNO)
|
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
try
|
case IDC_DELETE:
|
||||||
{
|
{
|
||||||
WaitCursor();
|
if (AskNoYes ("CONFIRM_SEL_FILES_DELETE") == IDNO)
|
||||||
finally_do ({ NormalCursor(); });
|
return 1;
|
||||||
|
|
||||||
foreach (const SecurityTokenKeyfile &keyfile, SecurityTokenKeyfileDlgGetSelected (hwndDlg, keyfiles))
|
try
|
||||||
{
|
{
|
||||||
SecurityToken::DeleteKeyfile (keyfile);
|
WaitCursor();
|
||||||
|
finally_do ({ NormalCursor(); });
|
||||||
|
|
||||||
|
foreach (const SecurityTokenKeyfile &keyfile, SecurityTokenKeyfileDlgGetSelected (hwndDlg, keyfiles))
|
||||||
|
{
|
||||||
|
SecurityToken::DeleteKeyfile (keyfile);
|
||||||
|
}
|
||||||
|
|
||||||
|
keyfiles = SecurityToken::GetAvailableKeyfiles();
|
||||||
|
SecurityTokenKeyfileDlgFillList (hwndDlg, keyfiles);
|
||||||
|
}
|
||||||
|
catch (Exception &e)
|
||||||
|
{
|
||||||
|
e.Show (hwndDlg);
|
||||||
}
|
}
|
||||||
|
|
||||||
keyfiles = SecurityToken::GetAvailableKeyfiles();
|
return 1;
|
||||||
SecurityTokenKeyfileDlgFillList (hwndDlg, keyfiles);
|
|
||||||
}
|
}
|
||||||
catch (Exception &e)
|
|
||||||
{
|
|
||||||
e.Show (hwndDlg);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -271,24 +271,18 @@ static void DisplayHotkeyList (HWND hwndDlg)
|
|||||||
|
|
||||||
BOOL CALLBACK HotkeysDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
BOOL CALLBACK HotkeysDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
HWND hList = GetDlgItem (hwndDlg, IDC_HOTKEY_LIST);
|
|
||||||
HWND hwndMainDlg = hwndDlg;
|
|
||||||
WORD lw = LOWORD (wParam);
|
WORD lw = LOWORD (wParam);
|
||||||
WORD hw = HIWORD (wParam);
|
WORD hw = HIWORD (wParam);
|
||||||
static BOOL bKeyScanOn;
|
static BOOL bKeyScanOn;
|
||||||
static BOOL bTPlaySoundOnSuccessfulHkDismount;
|
static BOOL bTPlaySoundOnSuccessfulHkDismount;
|
||||||
static BOOL bTDisplayBalloonOnSuccessfulHkDismount;
|
static BOOL bTDisplayBalloonOnSuccessfulHkDismount;
|
||||||
|
|
||||||
while (GetParent (hwndMainDlg) != NULL)
|
|
||||||
{
|
|
||||||
hwndMainDlg = GetParent (hwndMainDlg);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (msg)
|
switch (msg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
{
|
{
|
||||||
LVCOLUMNW col;
|
LVCOLUMNW col;
|
||||||
|
HWND hList = GetDlgItem (hwndDlg, IDC_HOTKEY_LIST);
|
||||||
|
|
||||||
bKeyScanOn = FALSE;
|
bKeyScanOn = FALSE;
|
||||||
nSelectedHotkeyId = -1;
|
nSelectedHotkeyId = -1;
|
||||||
@@ -354,16 +348,8 @@ BOOL CALLBACK HotkeysDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPar
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
case WM_COMMAND:
|
|
||||||
case WM_NOTIFY:
|
case WM_NOTIFY:
|
||||||
|
if (wParam == IDC_HOTKEY_LIST)
|
||||||
if (lw == IDC_HOTKEY_KEY && hw == EN_CHANGE)
|
|
||||||
{
|
|
||||||
if (!bKeyScanOn && nSelectedHotkeyId < 0 && GetWindowTextLengthW (GetDlgItem (hwndDlg, IDC_HOTKEY_KEY)))
|
|
||||||
SetWindowTextW (GetDlgItem (hwndDlg, IDC_HOTKEY_KEY), L"");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (msg == WM_NOTIFY && wParam == IDC_HOTKEY_LIST)
|
|
||||||
{
|
{
|
||||||
if (((LPNMHDR) lParam)->code == LVN_ITEMACTIVATE
|
if (((LPNMHDR) lParam)->code == LVN_ITEMACTIVATE
|
||||||
|| ((LPNMHDR) lParam)->code == LVN_ITEMCHANGED && (((LPNMLISTVIEW) lParam)->uNewState & LVIS_FOCUSED))
|
|| ((LPNMHDR) lParam)->code == LVN_ITEMCHANGED && (((LPNMLISTVIEW) lParam)->uNewState & LVIS_FOCUSED))
|
||||||
@@ -381,6 +367,15 @@ BOOL CALLBACK HotkeysDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPar
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
case WM_COMMAND:
|
||||||
|
if (lw == IDC_HOTKEY_KEY && hw == EN_CHANGE)
|
||||||
|
{
|
||||||
|
if (!bKeyScanOn && nSelectedHotkeyId < 0 && GetWindowTextLengthW (GetDlgItem (hwndDlg, IDC_HOTKEY_KEY)))
|
||||||
|
SetWindowTextW (GetDlgItem (hwndDlg, IDC_HOTKEY_KEY), L"");
|
||||||
|
}
|
||||||
|
|
||||||
if (lw == IDC_HOTKEY_ASSIGN)
|
if (lw == IDC_HOTKEY_ASSIGN)
|
||||||
{
|
{
|
||||||
BOOL bOwnActiveShortcut = FALSE;
|
BOOL bOwnActiveShortcut = FALSE;
|
||||||
@@ -502,6 +497,12 @@ BOOL CALLBACK HotkeysDlgProc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lPar
|
|||||||
|
|
||||||
if (lw == IDOK)
|
if (lw == IDOK)
|
||||||
{
|
{
|
||||||
|
HWND hwndMainDlg = hwndDlg;
|
||||||
|
|
||||||
|
while (GetParent (hwndMainDlg) != NULL)
|
||||||
|
{
|
||||||
|
hwndMainDlg = GetParent (hwndMainDlg);
|
||||||
|
}
|
||||||
UnregisterAllHotkeys (hwndMainDlg, Hotkeys);
|
UnregisterAllHotkeys (hwndMainDlg, Hotkeys);
|
||||||
memcpy (Hotkeys, tmpHotkeys, sizeof(Hotkeys));
|
memcpy (Hotkeys, tmpHotkeys, sizeof(Hotkeys));
|
||||||
RegisterAllHotkeys (hwndMainDlg, Hotkeys);
|
RegisterAllHotkeys (hwndMainDlg, Hotkeys);
|
||||||
|
|||||||
Reference in New Issue
Block a user