From 11f30f9d330d346d9899c15786f42ba45ad3337f Mon Sep 17 00:00:00 2001 From: Seraphima Zykova Date: Mon, 2 Oct 2023 23:31:22 +0300 Subject: [PATCH] [FancyZones]Don't automatically snap context menus (#28956) * check tabstop * revert * check popup thickframe * Revert "check popup thickframe" * added HasThickFrame * popup check * spellcheck --- src/modules/fancyzones/FancyZonesLib/FancyZones.cpp | 10 ++++++++++ src/modules/fancyzones/FancyZonesLib/WindowUtils.cpp | 6 ++++++ src/modules/fancyzones/FancyZonesLib/WindowUtils.h | 1 + 3 files changed, 17 insertions(+) diff --git a/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp b/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp index d2314d78169c..b2b470c1a4b6 100644 --- a/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp +++ b/src/modules/fancyzones/FancyZonesLib/FancyZones.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include #include @@ -394,6 +395,15 @@ void FancyZones::WindowCreated(HWND window) noexcept return; } + // Hotfix + // Avoid automatically moving popup windows, as they can be just popup menus. + bool isPopup = FancyZonesWindowUtils::IsPopupWindow(window); + bool hasThickFrame = FancyZonesWindowUtils::HasThickFrame(window); + if (isPopup && !hasThickFrame) + { + return; + } + // Avoid already stamped (zoned) windows const bool isZoned = !FancyZonesWindowProperties::RetrieveZoneIndexProperty(window).empty(); if (isZoned) diff --git a/src/modules/fancyzones/FancyZonesLib/WindowUtils.cpp b/src/modules/fancyzones/FancyZonesLib/WindowUtils.cpp index ef895cf830fd..ec246180fdad 100644 --- a/src/modules/fancyzones/FancyZonesLib/WindowUtils.cpp +++ b/src/modules/fancyzones/FancyZonesLib/WindowUtils.cpp @@ -192,6 +192,12 @@ bool FancyZonesWindowUtils::IsPopupWindow(HWND window) noexcept return ((style & WS_POPUP) == WS_POPUP); } +bool FancyZonesWindowUtils::HasThickFrame(HWND window) noexcept +{ + auto style = GetWindowLong(window, GWL_STYLE); + return ((style & WS_THICKFRAME) == WS_THICKFRAME); +} + bool FancyZonesWindowUtils::HasThickFrameAndMinimizeMaximizeButtons(HWND window) noexcept { auto style = GetWindowLong(window, GWL_STYLE); diff --git a/src/modules/fancyzones/FancyZonesLib/WindowUtils.h b/src/modules/fancyzones/FancyZonesLib/WindowUtils.h index 4ac973bacbaf..80a265e0ab88 100644 --- a/src/modules/fancyzones/FancyZonesLib/WindowUtils.h +++ b/src/modules/fancyzones/FancyZonesLib/WindowUtils.h @@ -20,6 +20,7 @@ namespace FancyZonesWindowUtils bool HasVisibleOwner(HWND window) noexcept; bool IsStandardWindow(HWND window); bool IsPopupWindow(HWND window) noexcept; + bool HasThickFrame(HWND window) noexcept; bool HasThickFrameAndMinimizeMaximizeButtons(HWND window) noexcept; bool IsProcessOfWindowElevated(HWND window); // If HWND is already dead, we assume it wasn't elevated