diff --git a/Library/DialogManage.cpp b/Library/DialogManage.cpp index 24394412..0791e4f5 100644 --- a/Library/DialogManage.cpp +++ b/Library/DialogManage.cpp @@ -411,7 +411,7 @@ void CDialogManage::CTabSkins::Update(CMeterWindow* meterWindow, bool deleted) { if (meterWindow) { - if (m_IgnoreUpdate) + if (!deleted && m_IgnoreUpdate) { // Changed setting from dialog, no need to update m_IgnoreUpdate = false; @@ -881,10 +881,10 @@ INT_PTR CDialogManage::CTabSkins::OnCommand(WPARAM wParam, LPARAM lParam) { if (!m_SkinWindow) { - CMeterWindow* mw = Rainmeter->GetMeterWindow(m_SkinName); - if (mw) + // Skin not active, load + std::pair indexes = Rainmeter->GetMeterWindowIndex(m_SkinName, m_FileName); + if (indexes.first != -1 && indexes.second != -1) { - std::pair indexes = Rainmeter->GetMeterWindowIndex(mw); Rainmeter->ActivateConfig(indexes.first, indexes.second); // Fake selection change to update controls @@ -984,19 +984,22 @@ INT_PTR CDialogManage::CTabSkins::OnCommand(WPARAM wParam, LPARAM lParam) WritePrivateProfileString(m_SkinName.c_str(), L"LoadOrder", buffer, Rainmeter->GetIniFile().c_str()); std::pair indexes = Rainmeter->GetMeterWindowIndex(m_SkinWindow); - Rainmeter->SetLoadOrder(indexes.first, value); - - std::multimap windows; - Rainmeter->GetMeterWindowsByLoadOrder(windows); - - CSystem::PrepareHelperWindow(); - - // Reorder window z-position to reflect load order - std::multimap::const_iterator iter = windows.begin(); - for ( ; iter != windows.end(); ++iter) + if (indexes.first != -1) { - CMeterWindow* mw = (*iter).second; - mw->ChangeZPos(mw->GetWindowZPosition(), true); + Rainmeter->SetLoadOrder(indexes.first, value); + + std::multimap windows; + Rainmeter->GetMeterWindowsByLoadOrder(windows); + + CSystem::PrepareHelperWindow(); + + // Reorder window z-position to reflect load order + std::multimap::const_iterator iter = windows.begin(); + for ( ; iter != windows.end(); ++iter) + { + CMeterWindow* mw = (*iter).second; + mw->ChangeZPos(mw->GetWindowZPosition(), true); + } } } } diff --git a/Library/Rainmeter.cpp b/Library/Rainmeter.cpp index 5e78afe1..e784ab4f 100644 --- a/Library/Rainmeter.cpp +++ b/Library/Rainmeter.cpp @@ -2325,11 +2325,11 @@ void CRainmeter::ClearDeleteLaterList() if ((*iter).second == meterWindow) { m_Meters.erase(iter); - CDialogManage::UpdateSkins(meterWindow, true); break; } } + CDialogManage::UpdateSkins(meterWindow, true); delete meterWindow; } while (!m_DelayDeleteList.empty()); @@ -2422,24 +2422,26 @@ CMeterWindow* CRainmeter::GetMeterWindowByINI(const std::wstring& ini_searching) return NULL; } -std::pair CRainmeter::GetMeterWindowIndex(CMeterWindow* meterWindow) +std::pair CRainmeter::GetMeterWindowIndex(const std::wstring& config, const std::wstring& iniFile) { std::pair indexes; for (int i = 0, isize = (int)m_ConfigStrings.size(); i < isize; ++i) { - if (_wcsicmp(m_ConfigStrings[i].config.c_str(), meterWindow->GetSkinName().c_str()) == 0) + if (_wcsicmp(m_ConfigStrings[i].config.c_str(), config.c_str()) == 0) { for (int j = 0, jsize = (int)m_ConfigStrings[i].iniFiles.size(); j < jsize; ++j) { - if (_wcsicmp(m_ConfigStrings[i].iniFiles[j].c_str(), meterWindow->GetSkinIniFile().c_str()) == 0) + if (_wcsicmp(m_ConfigStrings[i].iniFiles[j].c_str(), iniFile.c_str()) == 0) { indexes = std::make_pair(i, j); + return indexes; } } } } + indexes = std::make_pair(-1, -1); // error return indexes; } diff --git a/Library/Rainmeter.h b/Library/Rainmeter.h index 9f02a6cc..8ff8f1cc 100644 --- a/Library/Rainmeter.h +++ b/Library/Rainmeter.h @@ -179,7 +179,8 @@ public: CMeterWindow* GetMeterWindow(const std::wstring& config); CMeterWindow* GetMeterWindowByINI(const std::wstring& ini_searching); - std::pair GetMeterWindowIndex(CMeterWindow* meterWindow); + std::pair GetMeterWindowIndex(const std::wstring& config, const std::wstring& iniFile); + std::pair GetMeterWindowIndex(CMeterWindow* meterWindow) { return GetMeterWindowIndex(meterWindow->GetSkinName(), meterWindow->GetSkinIniFile()); } CMeterWindow* GetMeterWindow(HWND hwnd); void GetMeterWindowsByLoadOrder(std::multimap& windows, const std::wstring& group = L"");