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
|
// save corner preference if it wasn't set already
|
||||||
DwmGetWindowAttribute(window, DWMWA_WINDOW_CORNER_PREFERENCE, &cornerPreference, sizeof(cornerPreference));
|
DwmGetWindowAttribute(window, DWMWA_WINDOW_CORNER_PREFERENCE, &cornerPreference, sizeof(cornerPreference));
|
||||||
|
|
||||||
HANDLE preferenceHandle;
|
static_assert(sizeof(int) == 4);
|
||||||
memcpy(&preferenceHandle, &cornerPreference, sizeof(int));
|
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()));
|
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);
|
HANDLE handle = GetPropW(window, ZonedWindowProperties::PropertyCornerPreference);
|
||||||
if (handle)
|
if (handle)
|
||||||
{
|
{
|
||||||
int cornerPreference;
|
static_assert(sizeof(int) == 4);
|
||||||
memcpy(&cornerPreference, &handle, sizeof(int));
|
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))))
|
if (!SUCCEEDED(DwmSetWindowAttribute(window, DWMWA_WINDOW_CORNER_PREFERENCE, &cornerPreference, sizeof(cornerPreference))))
|
||||||
{
|
{
|
||||||
Logger::error(L"Failed to set saved corner preference");
|
Logger::error(L"Failed to set saved corner preference");
|
||||||
}
|
}
|
||||||
|
|
||||||
RemoveProp(window, ZonedWindowProperties::PropertyCornerPreference);
|
RemovePropW(window, ZonedWindowProperties::PropertyCornerPreference);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user