mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 11:17:53 +01:00
[FancyZones]Fix rounded corners optimized bug (#17560)
* [FancyZones]Fix rounded corners optimized bug * Use proper flags * Use WideChar version of functions
This commit is contained in:
@@ -485,10 +485,18 @@ void FancyZonesWindowUtils::DisableRoundCorners(HWND window) noexcept
|
||||
// save corner preference if it wasn't set already
|
||||
DwmGetWindowAttribute(window, DWMWA_WINDOW_CORNER_PREFERENCE, &cornerPreference, sizeof(cornerPreference));
|
||||
|
||||
HANDLE preferenceHandle;
|
||||
memcpy(&preferenceHandle, &cornerPreference, sizeof(int));
|
||||
static_assert(sizeof(int) == 4);
|
||||
static_assert(sizeof(HANDLE) == 8);
|
||||
static_assert(sizeof(HANDLE) == sizeof(uint64_t));
|
||||
|
||||
if (!SetProp(window, ZonedWindowProperties::PropertyCornerPreference, preferenceHandle))
|
||||
// 0 is a valid value, so use a high bit to distinguish between 0 and a GetProp fail
|
||||
uint64_t cornerPreference64 = static_cast<uint64_t>(cornerPreference);
|
||||
cornerPreference64 = (cornerPreference64 & 0xFFFFFFFF) | 0x100000000;
|
||||
|
||||
HANDLE preferenceHandle = {};
|
||||
memcpy(&preferenceHandle, &cornerPreference64, sizeof(HANDLE));
|
||||
|
||||
if (!SetPropW(window, ZonedWindowProperties::PropertyCornerPreference, preferenceHandle))
|
||||
{
|
||||
Logger::error(L"Failed to save corner preference, {}", get_last_error_or_default(GetLastError()));
|
||||
}
|
||||
@@ -507,15 +515,22 @@ void FancyZonesWindowUtils::ResetRoundCornersPreference(HWND window) noexcept
|
||||
HANDLE handle = GetPropW(window, ZonedWindowProperties::PropertyCornerPreference);
|
||||
if (handle)
|
||||
{
|
||||
int cornerPreference;
|
||||
memcpy(&cornerPreference, &handle, sizeof(int));
|
||||
static_assert(sizeof(int) == 4);
|
||||
static_assert(sizeof(HANDLE) == 8);
|
||||
static_assert(sizeof(HANDLE) == sizeof(uint64_t));
|
||||
|
||||
uint64_t cornerPreference64 = {};
|
||||
memcpy(&cornerPreference64, &handle, sizeof(uint64_t));
|
||||
cornerPreference64 = cornerPreference64 & 0xFFFFFFFF;
|
||||
|
||||
int cornerPreference = static_cast<int>(cornerPreference64);
|
||||
|
||||
if (!SUCCEEDED(DwmSetWindowAttribute(window, DWMWA_WINDOW_CORNER_PREFERENCE, &cornerPreference, sizeof(cornerPreference))))
|
||||
{
|
||||
Logger::error(L"Failed to set saved corner preference");
|
||||
}
|
||||
|
||||
RemoveProp(window, ZonedWindowProperties::PropertyCornerPreference);
|
||||
RemovePropW(window, ZonedWindowProperties::PropertyCornerPreference);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user