From d769f5675d9ee69a4ce8500b7de8dd5b82ef93d6 Mon Sep 17 00:00:00 2001 From: Whindmar Saksit Date: Wed, 19 Mar 2025 12:24:52 +0100 Subject: [PATCH] [RAPPS] Must apply settings changes when a new download folder is created (#7792) --- base/applications/rapps/geninst.cpp | 11 ++--------- base/applications/rapps/include/misc.h | 3 +++ base/applications/rapps/misc.cpp | 12 ++++++++++++ base/applications/rapps/settingsdlg.cpp | 26 ++++++++++++------------- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/base/applications/rapps/geninst.cpp b/base/applications/rapps/geninst.cpp index 8ef520c8646..d5746d5199a 100644 --- a/base/applications/rapps/geninst.cpp +++ b/base/applications/rapps/geninst.cpp @@ -173,17 +173,10 @@ struct InstallInfo : CommonInfo } }; -static UINT +static inline UINT ErrorBox(UINT Error = GetLastError()) { - if (!Error) - Error = ERROR_INTERNAL_ERROR; - WCHAR buf[400]; - UINT fmf = FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM; - FormatMessageW(fmf, NULL, Error, 0, buf, _countof(buf), NULL); - MessageBoxW(g_pInfo->GetGuiOwner(), buf, 0, MB_OK | MB_ICONSTOP); - g_pInfo->Error = Error; - return Error; + return g_pInfo->Error = ErrorBox(g_pInfo->GetGuiOwner(), Error); } static LPCWSTR diff --git a/base/applications/rapps/include/misc.h b/base/applications/rapps/include/misc.h index f2f3ea727d9..6e8b56ffb14 100644 --- a/base/applications/rapps/include/misc.h +++ b/base/applications/rapps/include/misc.h @@ -26,6 +26,9 @@ ErrorFromHResult(HRESULT hr) return hr >= 0 ? ERROR_SUCCESS : hr; } +UINT +ErrorBox(HWND hOwner, UINT Error = GetLastError()); + VOID CopyTextToClipboard(LPCWSTR lpszText); VOID diff --git a/base/applications/rapps/misc.cpp b/base/applications/rapps/misc.cpp index baafe5309fd..e8d9e439177 100644 --- a/base/applications/rapps/misc.cpp +++ b/base/applications/rapps/misc.cpp @@ -12,6 +12,18 @@ static HANDLE hLog = NULL; +UINT +ErrorBox(HWND hOwner, UINT Error) +{ + if (!Error) + Error = ERROR_INTERNAL_ERROR; // Note: geninst.cpp depends on this + WCHAR buf[400]; + UINT fmf = FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM; + FormatMessageW(fmf, NULL, Error, 0, buf, _countof(buf), NULL); + MessageBoxW(hOwner, buf, 0, MB_OK | MB_ICONSTOP); + return Error; +} + VOID CopyTextToClipboard(LPCWSTR lpszText) { diff --git a/base/applications/rapps/settingsdlg.cpp b/base/applications/rapps/settingsdlg.cpp index 56efc75193c..9daf0f7a40d 100644 --- a/base/applications/rapps/settingsdlg.cpp +++ b/base/applications/rapps/settingsdlg.cpp @@ -256,11 +256,6 @@ SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) case IDOK: { HandleGeneralListItems(GetDlgItem(hDlg, IDC_GENERALLIST), NULL, &NewSettingsInfo); - if (SettingsInfo.bSmallIcons != NewSettingsInfo.bSmallIcons) - { - SendMessageW(hMainWnd, WM_SETTINGCHANGE, SPI_SETICONMETRICS, 0); // Note: WM_SETTINGCHANGE cannot be posted - PostMessageW(hMainWnd, WM_COMMAND, ID_REFRESH, 0); - } CStringW szDir; CStringW szSource; @@ -288,23 +283,21 @@ SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) NewSettingsInfo.szNoProxyFor, _countof(NewSettingsInfo.szNoProxyFor), szNoProxy, szNoProxy.GetLength() + 1); + CStringW::CopyChars( + NewSettingsInfo.szDownloadDir, _countof(NewSettingsInfo.szDownloadDir), szDir, + szDir.GetLength() + 1); dwAttr = GetFileAttributesW(szDir); - if (dwAttr != INVALID_FILE_ATTRIBUTES && (dwAttr & FILE_ATTRIBUTE_DIRECTORY)) - { - CStringW::CopyChars( - NewSettingsInfo.szDownloadDir, _countof(NewSettingsInfo.szDownloadDir), szDir, - szDir.GetLength() + 1); - } - else + if (dwAttr == INVALID_FILE_ATTRIBUTES || !(dwAttr & FILE_ATTRIBUTE_DIRECTORY)) { CStringW szMsgText; szMsgText.LoadStringW(IDS_CHOOSE_FOLDER_ERROR); if (MessageBoxW(hDlg, szMsgText, NULL, MB_YESNO) == IDYES) { - if (CreateDirectoryW(szDir, NULL)) + if (!CreateDirectoryW(szDir, NULL)) { - EndDialog(hDlg, LOWORD(wParam)); + ErrorBox(hDlg); + break; } } else @@ -330,6 +323,11 @@ SettingsDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, LPARAM lParam) szSource.GetLength() + 1); } + if (SettingsInfo.bSmallIcons != NewSettingsInfo.bSmallIcons) + { + SendMessageW(hMainWnd, WM_SETTINGCHANGE, SPI_SETICONMETRICS, 0); // Note: WM_SETTINGCHANGE cannot be posted + PostMessageW(hMainWnd, WM_COMMAND, ID_REFRESH, 0); + } SettingsInfo = NewSettingsInfo; SaveSettings(GetParent(hDlg), &SettingsInfo); EndDialog(hDlg, LOWORD(wParam));