Skip to content

Commit 2834e5b

Browse files
authored
[RAPPS] Initialize SHBrowseForFolder to current download folder (reactos#7505)
1 parent e0759a5 commit 2834e5b

File tree

1 file changed

+27
-11
lines changed

1 file changed

+27
-11
lines changed

base/applications/rapps/settingsdlg.cpp

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@
99

1010
SETTINGS_INFO NewSettingsInfo;
1111

12+
static int CALLBACK
13+
BrowseFolderCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
14+
{
15+
switch (uMsg)
16+
{
17+
case BFFM_INITIALIZED:
18+
SendMessageW(hwnd, BFFM_SETSELECTIONW, TRUE, lpData);
19+
break;
20+
case BFFM_VALIDATEFAILED:
21+
return TRUE;
22+
}
23+
return 0;
24+
}
25+
1226
BOOL
1327
ChooseFolder(HWND hwnd)
1428
{
@@ -25,24 +39,24 @@ ChooseFolder(HWND hwnd)
2539
bi.ulFlags =
2640
BIF_USENEWUI | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | /* BIF_BROWSEFILEJUNCTIONS | */ BIF_VALIDATE;
2741

28-
if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED)))
42+
if (SUCCEEDED(CoInitialize(NULL)))
2943
{
30-
CStringW szBuf;
44+
WCHAR szDir[MAX_PATH];
45+
if (GetWindowTextW(GetDlgItem(hwnd, IDC_DOWNLOAD_DIR_EDIT), szDir, _countof(szDir)))
46+
{
47+
bi.lpfn = BrowseFolderCallback;
48+
bi.lParam = (LPARAM)szDir;
49+
}
3150

3251
LPITEMIDLIST lpItemList = SHBrowseForFolderW(&bi);
33-
if (lpItemList && SHGetPathFromIDListW(lpItemList, szBuf.GetBuffer(MAX_PATH)))
52+
if (lpItemList && SHGetPathFromIDListW(lpItemList, szDir))
3453
{
35-
szBuf.ReleaseBuffer();
36-
if (!szBuf.IsEmpty())
54+
if (*szDir)
3755
{
38-
SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szBuf);
56+
SetDlgItemTextW(hwnd, IDC_DOWNLOAD_DIR_EDIT, szDir);
3957
bRet = TRUE;
4058
}
4159
}
42-
else
43-
{
44-
szBuf.ReleaseBuffer();
45-
}
4660

4761
CoTaskMemFree(lpItemList);
4862
CoUninitialize();
@@ -94,7 +108,9 @@ InitSettingsControls(HWND hDlg, PSETTINGS_INFO Info)
94108
SendDlgItemMessageW(hDlg, IDC_LOG_ENABLED, BM_SETCHECK, Info->bLogEnabled, 0);
95109
SendDlgItemMessageW(hDlg, IDC_DEL_AFTER_INSTALL, BM_SETCHECK, Info->bDelInstaller, 0);
96110

97-
SetWindowTextW(GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT), Info->szDownloadDir);
111+
HWND hCtl = GetDlgItem(hDlg, IDC_DOWNLOAD_DIR_EDIT);
112+
SetWindowTextW(hCtl, Info->szDownloadDir);
113+
SendMessageW(hCtl, EM_LIMITTEXT, MAX_PATH - 1, 0);
98114

99115
CheckRadioButton(hDlg, IDC_PROXY_DEFAULT, IDC_USE_PROXY, IDC_PROXY_DEFAULT + Info->Proxy);
100116

0 commit comments

Comments
 (0)