mirror of
https://github.com/chibicitiberiu/rainmeter-studio.git
synced 2024-02-24 04:33:31 +00:00
Adding code to improve DesktopWorkArea with mulitple monitors. This is code from user Jott, with some minor tweaks by spx
Adds DesktopWorkArea(x) where "x" is the desired monitor. DesktopWorkArea without a number is the primary monitor.
This commit is contained in:
parent
d07e8665b0
commit
5be6e9783d
@ -28,8 +28,8 @@ LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
|
|||||||
//
|
//
|
||||||
|
|
||||||
VS_VERSION_INFO VERSIONINFO
|
VS_VERSION_INFO VERSIONINFO
|
||||||
FILEVERSION 1,3,0,455
|
FILEVERSION 1,3,0,461
|
||||||
PRODUCTVERSION 1,3,0,455
|
PRODUCTVERSION 1,3,0,461
|
||||||
FILEFLAGSMASK 0x17L
|
FILEFLAGSMASK 0x17L
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
FILEFLAGS 0x1L
|
FILEFLAGS 0x1L
|
||||||
@ -45,12 +45,12 @@ BEGIN
|
|||||||
BLOCK "040b04b0"
|
BLOCK "040b04b0"
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "FileDescription", "Rainmeter - A Customizable Resource Meter"
|
VALUE "FileDescription", "Rainmeter - A Customizable Resource Meter"
|
||||||
VALUE "FileVersion", "1, 3, 0, 455"
|
VALUE "FileVersion", "1, 3, 0, 461"
|
||||||
VALUE "InternalName", "Rainmeter"
|
VALUE "InternalName", "Rainmeter"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2010 - Rainy"
|
VALUE "LegalCopyright", "Copyright (C) 2010 - Rainy"
|
||||||
VALUE "OriginalFilename", "Rainmeter.exe"
|
VALUE "OriginalFilename", "Rainmeter.exe"
|
||||||
VALUE "ProductName", "Rainmeter"
|
VALUE "ProductName", "Rainmeter"
|
||||||
VALUE "ProductVersion", "1, 3, 0, 455"
|
VALUE "ProductVersion", "1, 3, 0, 461"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
BLOCK "VarFileInfo"
|
BLOCK "VarFileInfo"
|
||||||
|
@ -747,7 +747,6 @@ CRainmeter::CRainmeter()
|
|||||||
m_Logging = false;
|
m_Logging = false;
|
||||||
|
|
||||||
m_DesktopWorkAreaChanged = false;
|
m_DesktopWorkAreaChanged = false;
|
||||||
m_DesktopWorkArea.left = m_DesktopWorkArea.top = m_DesktopWorkArea.right = m_DesktopWorkArea.bottom = 0;
|
|
||||||
|
|
||||||
m_DisableVersionCheck = FALSE;
|
m_DisableVersionCheck = FALSE;
|
||||||
m_NewVersion = FALSE;
|
m_NewVersion = FALSE;
|
||||||
@ -775,12 +774,6 @@ CRainmeter::CRainmeter()
|
|||||||
*/
|
*/
|
||||||
CRainmeter::~CRainmeter()
|
CRainmeter::~CRainmeter()
|
||||||
{
|
{
|
||||||
// Change the work area back
|
|
||||||
if (m_DesktopWorkAreaChanged)
|
|
||||||
{
|
|
||||||
SystemParametersInfo(SPI_SETWORKAREA, 0, &m_DesktopWorkArea, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
while (m_Meters.size() > 0)
|
while (m_Meters.size() > 0)
|
||||||
{
|
{
|
||||||
DeleteMeterWindow((*m_Meters.begin()).second, false); // This removes the window from the vector
|
DeleteMeterWindow((*m_Meters.begin()).second, false); // This removes the window from the vector
|
||||||
@ -798,6 +791,12 @@ CRainmeter::~CRainmeter()
|
|||||||
|
|
||||||
CMeterString::FreeFontCache();
|
CMeterString::FreeFontCache();
|
||||||
|
|
||||||
|
// Change the work area back
|
||||||
|
if (m_DesktopWorkAreaChanged)
|
||||||
|
{
|
||||||
|
UpdateDesktopWorkArea(true);
|
||||||
|
}
|
||||||
|
|
||||||
GdiplusShutdown(m_GDIplusToken);
|
GdiplusShutdown(m_GDIplusToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1051,10 +1050,7 @@ int CRainmeter::Initialize(HWND Parent, HINSTANCE Instance, LPCSTR szPath)
|
|||||||
// Change the work area if necessary
|
// Change the work area if necessary
|
||||||
if (m_DesktopWorkAreaChanged)
|
if (m_DesktopWorkAreaChanged)
|
||||||
{
|
{
|
||||||
RECT rc;
|
UpdateDesktopWorkArea(false);
|
||||||
rc = m_DesktopWorkArea;
|
|
||||||
SystemParametersInfo(SPI_GETWORKAREA, 0, &m_DesktopWorkArea, 0); // Store the old value
|
|
||||||
SystemParametersInfo(SPI_SETWORKAREA, 0, &rc, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we're running as Litestep's plugin, register the !bangs
|
// If we're running as Litestep's plugin, register the !bangs
|
||||||
@ -2084,6 +2080,9 @@ void CRainmeter::ExecuteCommand(const WCHAR* command, CMeterWindow* meterWindow)
|
|||||||
*/
|
*/
|
||||||
void CRainmeter::ReadGeneralSettings(std::wstring& iniFile)
|
void CRainmeter::ReadGeneralSettings(std::wstring& iniFile)
|
||||||
{
|
{
|
||||||
|
// Clear old settings
|
||||||
|
m_DesktopWorkAreas.clear();
|
||||||
|
|
||||||
CConfigParser parser;
|
CConfigParser parser;
|
||||||
parser.Initialize(iniFile.c_str(), this);
|
parser.Initialize(iniFile.c_str(), this);
|
||||||
|
|
||||||
@ -2164,15 +2163,30 @@ void CRainmeter::ReadGeneralSettings(std::wstring& iniFile)
|
|||||||
m_TrayExecuteDM = parser.ReadString(L"Rainmeter", L"TrayExecuteDM", L"", false);
|
m_TrayExecuteDM = parser.ReadString(L"Rainmeter", L"TrayExecuteDM", L"", false);
|
||||||
|
|
||||||
m_DisableVersionCheck = parser.ReadInt(L"Rainmeter", L"DisableVersionCheck", 0);
|
m_DisableVersionCheck = parser.ReadInt(L"Rainmeter", L"DisableVersionCheck", 0);
|
||||||
|
|
||||||
std::wstring area = parser.ReadString(L"Rainmeter", L"DesktopWorkArea", L"");
|
std::wstring area = parser.ReadString(L"Rainmeter", L"DesktopWorkArea", L"");
|
||||||
if (!area.empty())
|
if (!area.empty())
|
||||||
{
|
{
|
||||||
swscanf(area.c_str(), L"%i,%i,%i,%i", &m_DesktopWorkArea.left, &m_DesktopWorkArea.top,
|
RECT r;
|
||||||
&m_DesktopWorkArea.right, &m_DesktopWorkArea.bottom);
|
swscanf(area.c_str(), L"%i,%i,%i,%i", &r.left, &r.top, &r.right, &r.bottom);
|
||||||
|
m_DesktopWorkAreas[0] = r;
|
||||||
m_DesktopWorkAreaChanged = true;
|
m_DesktopWorkAreaChanged = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (UINT i = 1; i <= CSystem::GetMonitorCount(); ++i)
|
||||||
|
{
|
||||||
|
WCHAR buffer[256];
|
||||||
|
wsprintf(buffer, L"DesktopWorkArea@%i", i);
|
||||||
|
area = parser.ReadString(L"Rainmeter", buffer, L"");
|
||||||
|
if (!area.empty())
|
||||||
|
{
|
||||||
|
RECT r;
|
||||||
|
swscanf(area.c_str(), L"%i,%i,%i,%i", &r.left, &r.top, &r.right, &r.bottom);
|
||||||
|
m_DesktopWorkAreas[i] = r;
|
||||||
|
m_DesktopWorkAreaChanged = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Check which configs are active
|
// Check which configs are active
|
||||||
if (!c_DummyLitestep)
|
if (!c_DummyLitestep)
|
||||||
{
|
{
|
||||||
@ -2288,10 +2302,96 @@ void CRainmeter::RefreshAll()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_DesktopWorkAreaChanged)
|
||||||
|
{
|
||||||
|
UpdateDesktopWorkArea(false);
|
||||||
|
}
|
||||||
|
|
||||||
// Clear order
|
// Clear order
|
||||||
m_ConfigOrders.clear();
|
m_ConfigOrders.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
** UpdateDesktopWorkArea
|
||||||
|
**
|
||||||
|
** Applies given DesktopWorkArea and DesktopWorkArea@n.
|
||||||
|
**
|
||||||
|
*/
|
||||||
|
void CRainmeter::UpdateDesktopWorkArea(bool reset)
|
||||||
|
{
|
||||||
|
bool changed = false;
|
||||||
|
|
||||||
|
if (reset)
|
||||||
|
{
|
||||||
|
if (!m_OldDesktopWorkAreas.empty())
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < m_OldDesktopWorkAreas.size(); ++i)
|
||||||
|
{
|
||||||
|
SystemParametersInfo(SPI_SETWORKAREA, 0, &m_OldDesktopWorkAreas[i], 0);
|
||||||
|
}
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (m_OldDesktopWorkAreas.empty())
|
||||||
|
{
|
||||||
|
// Store old work areas for changing them back
|
||||||
|
for (UINT i = 0; i < CSystem::GetMonitorCount(); ++i)
|
||||||
|
{
|
||||||
|
m_OldDesktopWorkAreas.push_back(CSystem::GetMultiMonitorInfo().monitors[i].work);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (UINT i = 0; i <= CSystem::GetMonitorCount(); ++i)
|
||||||
|
{
|
||||||
|
std::map<UINT, RECT>::const_iterator it = m_DesktopWorkAreas.find(i);
|
||||||
|
if (it != m_DesktopWorkAreas.end())
|
||||||
|
{
|
||||||
|
RECT r = it->second;
|
||||||
|
if (i != 0)
|
||||||
|
{
|
||||||
|
// Move rect to correct offset
|
||||||
|
const RECT screenRect = CSystem::GetMultiMonitorInfo().monitors[i - 1].screen;
|
||||||
|
r.top += screenRect.top;
|
||||||
|
r.left += screenRect.left;
|
||||||
|
r.bottom += screenRect.top;
|
||||||
|
r.right += screenRect.left;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL result = SystemParametersInfo(SPI_SETWORKAREA, 0, &r, 0);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
changed = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c_Debug)
|
||||||
|
{
|
||||||
|
std::wstring format = L"Applying DesktopWorkArea";
|
||||||
|
if (i != 0)
|
||||||
|
{
|
||||||
|
WCHAR buffer[256];
|
||||||
|
wsprintf(buffer, L"@%i", i);
|
||||||
|
format += buffer;
|
||||||
|
}
|
||||||
|
format += L": L=%i, T=%i, R=%i, B=%i";
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
format += L" => FAIL.";
|
||||||
|
}
|
||||||
|
DebugLog(format.c_str(), r.left, r.top, r.right, r.bottom);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (changed)
|
||||||
|
{
|
||||||
|
// Broadcast all changes
|
||||||
|
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, SPI_SETWORKAREA, 0, SMTO_ABORTIFHUNG, 1000, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** ReadStats
|
** ReadStats
|
||||||
**
|
**
|
||||||
|
@ -201,6 +201,7 @@ private:
|
|||||||
void SetConfigOrder(const std::wstring& config, int index, int active);
|
void SetConfigOrder(const std::wstring& config, int index, int active);
|
||||||
int GetLoadOrder(const std::wstring& config);
|
int GetLoadOrder(const std::wstring& config);
|
||||||
bool SetActiveConfig(std::wstring& skinName, std::wstring& skinIni);
|
bool SetActiveConfig(std::wstring& skinName, std::wstring& skinIni);
|
||||||
|
void UpdateDesktopWorkArea(bool reset);
|
||||||
HMENU CreateSkinMenu(CMeterWindow* meterWindow, int index);
|
HMENU CreateSkinMenu(CMeterWindow* meterWindow, int index);
|
||||||
void ChangeSkinIndex(HMENU subMenu, int index);
|
void ChangeSkinIndex(HMENU subMenu, int index);
|
||||||
int ScanForConfigsRecursive(std::wstring& path, std::wstring base, int index, std::vector<CONFIGMENU>& menu, bool DontRecurse);
|
int ScanForConfigsRecursive(std::wstring& path, std::wstring base, int index, std::vector<CONFIGMENU>& menu, bool DontRecurse);
|
||||||
@ -240,7 +241,8 @@ private:
|
|||||||
BOOL m_NewVersion;
|
BOOL m_NewVersion;
|
||||||
|
|
||||||
BOOL m_DesktopWorkAreaChanged;
|
BOOL m_DesktopWorkAreaChanged;
|
||||||
RECT m_DesktopWorkArea;
|
std::map<UINT, RECT> m_DesktopWorkAreas;
|
||||||
|
std::vector<RECT> m_OldDesktopWorkAreas;
|
||||||
|
|
||||||
bool m_Logging;
|
bool m_Logging;
|
||||||
|
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
const int revision_number = 455;
|
const int revision_number = 461;
|
Loading…
x
Reference in New Issue
Block a user