diff --git a/src/modules/fancyzones/lib/ZoneSet.cpp b/src/modules/fancyzones/lib/ZoneSet.cpp index 32f37ec66e..cdafc3b98e 100644 --- a/src/modules/fancyzones/lib/ZoneSet.cpp +++ b/src/modules/fancyzones/lib/ZoneSet.cpp @@ -77,17 +77,33 @@ IFACEMETHODIMP ZoneSet::RemoveZone(winrt::com_ptr zone) noexcept IFACEMETHODIMP_(winrt::com_ptr) ZoneSet::ZoneFromPoint(POINT pt) noexcept { + winrt::com_ptr smallestKnownZone = nullptr; for (auto iter = m_zones.begin(); iter != m_zones.end(); iter++) { if (winrt::com_ptr zone = iter->try_as()) { - if (PtInRect(&zone->GetZoneRect(), pt)) + RECT* newZoneRect = &zone->GetZoneRect(); + if (PtInRect(newZoneRect, pt)) { - return zone; + if(smallestKnownZone == nullptr) + { + smallestKnownZone = zone; + } + else + { + RECT* r = &smallestKnownZone->GetZoneRect(); + int knownZoneArea = (r->right-r->left)*(r->bottom-r->top); + + int newZoneArea = (newZoneRect->right-newZoneRect->left)*(newZoneRect->bottom-newZoneRect->top); + + if(newZoneArea) ZoneSet::ZoneFromWindow(HWND window) noexcept @@ -382,4 +398,4 @@ void ZoneSet::GenerateFocusZones(MONITORINFO const& mi) noexcept winrt::com_ptr MakeZoneSet(ZoneSetConfig const& config) noexcept { return winrt::make_self(config); -} \ No newline at end of file +}