diff --git a/Library/Rainmeter.cpp b/Library/Rainmeter.cpp index 6d6c9e6f..623dbcb4 100644 --- a/Library/Rainmeter.cpp +++ b/Library/Rainmeter.cpp @@ -1174,6 +1174,8 @@ void CRainmeter::CreateDataFile() void CRainmeter::CreateComponentFolders(bool defaultIniLocation) { + std::wstring path; + if (CreateDirectory(m_SkinPath.c_str(), NULL)) { // Folder just created, so copy default skins there @@ -1181,8 +1183,18 @@ void CRainmeter::CreateComponentFolders(bool defaultIniLocation) from += L"*.*"; CSystem::CopyFiles(from, m_SkinPath); } + else + { + path = m_SkinPath; + path += L"Backup"; + if (_waccess(path.c_str(), 0) != -1) + { + std::wstring newPath = m_SkinPath + L"@Backup"; + MoveFile(path.c_str(), newPath.c_str()); + } + } - std::wstring path = GetThemePath(); + path = GetThemePath(); if (_waccess(path.c_str(), 0) == -1) { std::wstring from = GetDefaultThemePath(); @@ -1191,6 +1203,16 @@ void CRainmeter::CreateComponentFolders(bool defaultIniLocation) CSystem::CopyFiles(from, m_SettingsPath); } } + else + { + path += L"Backup"; + if (_waccess(path.c_str(), 0) != -1) + { + std::wstring newPath = GetThemePath(); + newPath += L"@Backup"; + MoveFile(path.c_str(), newPath.c_str()); + } + } if (defaultIniLocation) { @@ -1695,6 +1717,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)) { @@ -2476,11 +2499,11 @@ void CRainmeter::LoadTheme(const std::wstring& name) DeleteMeterWindow(NULL); std::wstring backup = GetThemePath(); - backup += L"Backup"; + backup += L"@Backup"; CreateDirectory(backup.c_str(), NULL); backup += L"\\Rainmeter.thm"; - if (_wcsicmp(name.c_str(), L"Backup") == 0) + if (_wcsicmp(name.c_str(), L"@Backup") == 0) { // Just load the backup CSystem::CopyFiles(backup, m_IniFile); diff --git a/SkinInstaller/DialogInstall.cpp b/SkinInstaller/DialogInstall.cpp index 9e91dceb..7c054b58 100644 --- a/SkinInstaller/DialogInstall.cpp +++ b/SkinInstaller/DialogInstall.cpp @@ -669,7 +669,7 @@ bool CDialogInstall::InstallPackage() } else { - std::wstring to = g_Data.skinsPath + L"Backup\\"; + std::wstring to = g_Data.skinsPath + L"@Backup\\"; CreateDirectory(to.c_str(), NULL); // Delete current backup @@ -988,7 +988,7 @@ void CDialogInstall::KeepVariables() for (int i = 0, isize = m_VariablesFiles.size(); i < isize; ++i) { - std::wstring fromPath = g_Data.skinsPath + L"Backup\\"; + std::wstring fromPath = g_Data.skinsPath + L"@Backup\\"; fromPath += m_VariablesFiles[i]; std::wstring toPath = g_Data.skinsPath + m_VariablesFiles[i]; @@ -1026,7 +1026,7 @@ void CDialogInstall::LoadTheme(const std::wstring& name, bool setWallpaper) { // Take a copy of current Rainmeter.ini before doing anything std::wstring backupFile = g_Data.settingsPath; - backupFile += L"Themes\\Backup\\"; + backupFile += L"Themes\\@Backup\\"; CreateDirectory(backupFile.c_str(), NULL); backupFile += L"Rainmeter.thm"; CopyFiles(g_Data.iniFile, backupFile, false); @@ -1128,12 +1128,14 @@ void CDialogInstall::LaunchRainmeter() bool CDialogInstall::IsIgnoredSkin(const WCHAR* name) { - return _wcsicmp(name, L"Backup") == 0; + return _wcsicmp(name, L"Backup") == 0 || + _wcsicmp(name, L"@Backup") == 0; } bool CDialogInstall::IsIgnoredTheme(const WCHAR* name) { - return _wcsicmp(name, L"Backup") == 0; + return _wcsicmp(name, L"Backup") == 0 || + _wcsicmp(name, L"@Backup") == 0; } bool CDialogInstall::IsIgnoredAddon(const WCHAR* name)