mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-01-18 06:29:44 +08:00
FancyZones: allow windows with invisible or zero-sized owner to be zonable (#1216)
This commit is contained in:
parent
5089729b18
commit
ed35a143ec
@ -593,13 +593,33 @@ LRESULT CALLBACK FancyZones::s_WndProc(HWND window, UINT message, WPARAM wparam,
|
||||
DefWindowProc(window, message, wparam, lparam);
|
||||
}
|
||||
|
||||
static bool HasVisibleOwner(HWND window) noexcept
|
||||
{
|
||||
auto owner = GetWindow(window, GW_OWNER);
|
||||
if (owner == nullptr)
|
||||
{
|
||||
return false; // There is no owner at all
|
||||
}
|
||||
if (!IsWindowVisible(owner))
|
||||
{
|
||||
return false; // Owner is invisible
|
||||
}
|
||||
RECT rect;
|
||||
if (!GetWindowRect(owner, &rect))
|
||||
{
|
||||
return true; // Could not get the rect, return true (and filter out the window) just in case
|
||||
}
|
||||
// Return false (and allow the window to be zonable) if the owner window size is zero
|
||||
return rect.top != rect.bottom || rect.left != rect.right;
|
||||
}
|
||||
|
||||
bool FancyZones::IsInterestingWindow(HWND window) noexcept
|
||||
{
|
||||
auto style = GetWindowLongPtr(window, GWL_STYLE);
|
||||
auto exStyle = GetWindowLongPtr(window, GWL_EXSTYLE);
|
||||
// Ignore:
|
||||
if (GetAncestor(window, GA_ROOT) != window || // windows that are not top-level
|
||||
GetWindow(window, GW_OWNER) != nullptr || // windows that have an owner - like Save As dialogs
|
||||
HasVisibleOwner(window) || // windows that have an visible owner - like Save As dialogs
|
||||
(style & WS_CHILD) != 0 || // windows that are child elements of other windows - like buttons
|
||||
(style & WS_DISABLED) != 0 || // windows that are disabled
|
||||
(exStyle & WS_EX_TOOLWINDOW) != 0 || // toolbar windows
|
||||
|
Loading…
Reference in New Issue
Block a user