mirror of
				https://github.com/chibicitiberiu/rainmeter-studio.git
				synced 2024-02-24 04:33:31 +00:00 
			
		
		
		
	Stability improvement for refreshing config.
This commit is contained in:
		| @@ -357,7 +357,11 @@ void CMeterWindow::Refresh(bool init, bool all) | |||||||
|  |  | ||||||
| 	//TODO: Should these be moved to a Reload command instead of hitting the disk on every refresh | 	//TODO: Should these be moved to a Reload command instead of hitting the disk on every refresh | ||||||
| 	ReadConfig();	// Read the general settings  | 	ReadConfig();	// Read the general settings  | ||||||
| 	ReadSkin(); | 	if (!ReadSkin()) | ||||||
|  | 	{ | ||||||
|  | 		m_Rainmeter->DeactivateConfig(this, -1); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	InitializeMeasures(); | 	InitializeMeasures(); | ||||||
| 	InitializeMeters(); | 	InitializeMeters(); | ||||||
| @@ -1621,13 +1625,26 @@ void CMeterWindow::WriteConfig() | |||||||
| ** Reads the skin config, creates the meters and measures and does the bindings. | ** Reads the skin config, creates the meters and measures and does the bindings. | ||||||
| ** | ** | ||||||
| */ | */ | ||||||
| void CMeterWindow::ReadSkin() | bool CMeterWindow::ReadSkin() | ||||||
| { | { | ||||||
| 	std::wstring iniFile = m_SkinPath; | 	std::wstring iniFile = m_SkinPath; | ||||||
| 	iniFile += m_SkinName; | 	iniFile += m_SkinName; | ||||||
| 	iniFile += L"\\"; | 	iniFile += L"\\"; | ||||||
| 	iniFile += m_SkinIniFile; | 	iniFile += m_SkinIniFile; | ||||||
|  |  | ||||||
|  | 	// Verify whether the file exists | ||||||
|  | 	if (_waccess(iniFile.c_str(), 0) == -1) | ||||||
|  | 	{ | ||||||
|  | 		std::wstring message = L"Unable to refresh config \""; | ||||||
|  | 		message += m_SkinName.c_str(); | ||||||
|  | 		message += L"\": Ini-file not found: \""; | ||||||
|  | 		message += m_SkinIniFile.c_str(); | ||||||
|  | 		message += L"\""; | ||||||
|  | 		LSLog(LOG_DEBUG, APPNAME, message.c_str()); | ||||||
|  | 		MessageBox(m_Window, message.c_str(), APPNAME, MB_OK | MB_TOPMOST | MB_ICONEXCLAMATION); | ||||||
|  | 		return false; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	m_Parser.Initialize(iniFile.c_str(), m_Rainmeter, this); | 	m_Parser.Initialize(iniFile.c_str(), m_Rainmeter, this); | ||||||
|  |  | ||||||
| 	// Global settings | 	// Global settings | ||||||
| @@ -1910,6 +1927,8 @@ void CMeterWindow::ReadSkin() | |||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	return true; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
| @@ -3014,16 +3033,7 @@ LRESULT CMeterWindow::OnCommand(WPARAM wParam, LPARAM lParam) | |||||||
| 		} | 		} | ||||||
| 		else if(wParam == ID_CONTEXT_CLOSESKIN) | 		else if(wParam == ID_CONTEXT_CLOSESKIN) | ||||||
| 		{ | 		{ | ||||||
| 			const std::vector<CRainmeter::CONFIG>& configs = m_Rainmeter->GetAllConfigs(); | 			m_Rainmeter->DeactivateConfig(this, -1); | ||||||
|  |  | ||||||
| 			for (size_t i = 0; i < configs.size(); ++i) |  | ||||||
| 			{ |  | ||||||
| 				if (configs[i].config == m_SkinName) |  | ||||||
| 				{ |  | ||||||
| 					m_Rainmeter->DeactivateConfig(this, i); |  | ||||||
| 					break; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 		else if(wParam == ID_CONTEXT_SKINMENU_FROMRIGHT) | 		else if(wParam == ID_CONTEXT_SKINMENU_FROMRIGHT) | ||||||
| 		{ | 		{ | ||||||
|   | |||||||
| @@ -237,7 +237,7 @@ private: | |||||||
| 	void UpdateTransparency(int alpha, bool reset); | 	void UpdateTransparency(int alpha, bool reset); | ||||||
| 	void ReadConfig(); | 	void ReadConfig(); | ||||||
| 	void WriteConfig(); | 	void WriteConfig(); | ||||||
| 	void ReadSkin(); | 	bool ReadSkin(); | ||||||
| 	void InitializeMeasures(); | 	void InitializeMeasures(); | ||||||
| 	void InitializeMeters(); | 	void InitializeMeters(); | ||||||
| 	void ShowWindowIfAppropriate(); | 	void ShowWindowIfAppropriate(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 spx
					spx