summaryrefslogtreecommitdiff
path: root/src/desktop
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2025-02-06 12:13:35 +0000
committervaxerski <vaxry@vaxry.net>2025-02-06 12:15:41 +0000
commit30b49c75bf04ceffc9fb1652a4d02e4eebacc24c (patch)
tree1621a2b62d2b7bd3dad53810fffe9a5873237ca1 /src/desktop
parentff9e059de6dd30c813270ff5a74053339cc94765 (diff)
popup: improve ::at() behavior
Diffstat (limited to 'src/desktop')
-rw-r--r--src/desktop/Popup.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/desktop/Popup.cpp b/src/desktop/Popup.cpp
index 4accb58f..82767ead 100644
--- a/src/desktop/Popup.cpp
+++ b/src/desktop/Popup.cpp
@@ -347,18 +347,19 @@ WP<CPopup> CPopup::at(const Vector2D& globalCoords, bool allowsInput) {
continue;
if (!allowsInput) {
- const Vector2D offset =
- p->m_pResource && p->m_pResource->surface ? (p->size() - p->m_pResource->geometry.size()) / 2.F - p->m_pResource->surface->current.geometry.pos() : Vector2D{};
- const Vector2D size = p->m_pResource ? p->m_pResource->geometry.size() : p->size();
+ const bool HASSURFACE = p->m_pResource && p->m_pResource->surface;
- const auto BOX = CBox{p->coordsGlobal() + offset, size};
+ Vector2D offset = HASSURFACE ? p->m_pResource->surface->current.geometry.pos() : Vector2D{};
+ Vector2D size = HASSURFACE ? p->m_pResource->surface->current.geometry.size() : p->size();
+
+ if (size == Vector2D{})
+ size = p->size();
+
+ const auto BOX = CBox{p->coordsGlobal() + offset, size};
if (BOX.containsPoint(globalCoords))
return p;
} else {
- const Vector2D offset =
- p->m_pResource && p->m_pResource->surface ? (p->size() - p->m_pResource->geometry.size()) / 2.F - p->m_pResource->surface->current.geometry.pos() : Vector2D{};
- const auto REGION =
- CRegion{p->m_pWLSurface->resource()->current.input}.intersect(CBox{{}, p->m_pWLSurface->resource()->current.size}).translate(p->coordsGlobal() + offset);
+ const auto REGION = CRegion{p->m_pWLSurface->resource()->current.input}.intersect(CBox{{}, p->m_pWLSurface->resource()->current.size}).translate(p->coordsGlobal());
if (REGION.containsPoint(globalCoords))
return p;
}