diff --git a/Library/Rainmeter.cpp b/Library/Rainmeter.cpp index 9940c83a..31bbe58f 100644 --- a/Library/Rainmeter.cpp +++ b/Library/Rainmeter.cpp @@ -1677,7 +1677,7 @@ int CRainmeter::ScanForSkinsRecursive(const std::wstring& path, std::wstring bas { if (wcscmp(L".", fileData.cFileName) != 0 && wcscmp(L"..", fileData.cFileName) != 0 && - !(level == 0 && wcscmp(L"@Backup", fileData.cFileName) == 0) && + !(level == 0 && wcscmp(L"Backup", fileData.cFileName) == 0) && !(level == 1 && wcscmp(L"@Resources", fileData.cFileName) == 0)) { subfolders.push_back(filename); diff --git a/Library/System.cpp b/Library/System.cpp index 3e4c4903..779d297f 100644 --- a/Library/System.cpp +++ b/Library/System.cpp @@ -1165,7 +1165,8 @@ void CSystem::SetWallpaper(const std::wstring& wallpaper, const std::wstring& st Bitmap* bitmap = Bitmap::FromFile(wallpaper.c_str()); if (bitmap && bitmap->GetLastStatus() == Ok) { - std::wstring file = Rainmeter->GetSettingsPath() + L"Wallpaper.bmp"; + std::wstring file = Rainmeter->GetSettingsPath(); + file += L"Wallpaper.bmp"; const CLSID bmpClsid = { 0x557cf400, 0x1a04, 0x11d3, { 0x9a, 0x73, 0x0, 0x0, 0xf8, 0x1e, 0xf3, 0x2e } }; if (bitmap->Save(file.c_str(), &bmpClsid) == Ok) diff --git a/SkinInstaller/DialogInstall.cpp b/SkinInstaller/DialogInstall.cpp index 5c000fc8..a402b324 100644 --- a/SkinInstaller/DialogInstall.cpp +++ b/SkinInstaller/DialogInstall.cpp @@ -581,6 +581,28 @@ bool CDialogInstall::ReadOptions(const WCHAR* file) } } + if (GetPrivateProfileString(section, newFormat ? L"LoadType" : L"LaunchType", L"", buffer, MAX_LINE_LENGTH, file) > 0) + { + bool loadSkin = _wcsicmp(buffer, newFormat ? L"Skin" : L"Load") == 0; + + GetPrivateProfileString(section, newFormat ? L"Load" : L"LaunchCommand", L"", buffer, MAX_LINE_LENGTH, file); + if (loadSkin) + { + if (newFormat) + { + m_LoadSkins.push_back(buffer); + } + else + { + m_LoadSkins = Tokenize(buffer, L"|"); + } + } + else + { + m_LoadTheme = buffer; + } + } + if (newFormat) { if (GetPrivateProfileString(section, L"MinimumDotNET", L"", buffer, MAX_LINE_LENGTH, file) > 0 && @@ -600,31 +622,43 @@ bool CDialogInstall::ReadOptions(const WCHAR* file) return false; } } - else - { - if (GetPrivateProfileString(section, L"LaunchType", L"", buffer, MAX_LINE_LENGTH, file) > 0) - { - bool loadSkins = _wcsicmp(buffer, L"load") == 0; - - GetPrivateProfileString(section, L"LaunchCommand", L"", buffer, MAX_LINE_LENGTH, file); - if (loadSkins) - { - m_LoadSkins = Tokenize(buffer, L"|"); - } - else - { - m_LoadTheme = buffer; - } - } - - return true; - } return true; } bool CDialogInstall::InstallPackage() { + if (!m_MergeSkins && m_BackupSkins) + { + // Move skins into backup folder + for (auto iter = m_PackageSkins.cbegin(); iter != m_PackageSkins.cend(); ++iter) + { + std::wstring from = g_Data.skinsPath + *iter; + std::wstring to = g_Data.skinsPath + L"Backup\\"; + CreateDirectory(to.c_str(), NULL); + to += *iter; + to += L'\0'; // For SHFileOperation + + // Delete current backup + SHFILEOPSTRUCT fo = + { + NULL, + FO_DELETE, + to.c_str(), + NULL, + FOF_NO_UI | FOF_NOCONFIRMATION | FOF_ALLOWUNDO + }; + SHFileOperation(&fo); + + if (!CopyFiles(from, to, true)) + { + m_ErrorMessage = L"Unable to move to:\n"; + m_ErrorMessage += to; + return false; + } + } + } + WCHAR buffer[MAX_PATH]; // Helper to sets buffer with current file name @@ -642,19 +676,6 @@ bool CDialogInstall::InstallPackage() return false; }; - if (!m_MergeSkins && m_BackupSkins) - { - // Move skins into backup folder - for (auto iter = m_PackageSkins.cbegin(); iter != m_PackageSkins.cend(); ++iter) - { - std::wstring from = g_Data.skinsPath + *iter; - std::wstring to = g_Data.skinsPath + L"Backup\\"; - CreateDirectory(to.c_str(), NULL); - to += *iter; - CopyFiles(from, to, true); - } - } - unzGoToFirstFile(m_PackageUnzFile); const WCHAR* root = m_PackageRoot.c_str(); do