mirror of
https://github.com/hyprwm/Hyprland.git
synced 2025-08-03 13:41:59 -07:00
@@ -339,21 +339,23 @@ void CPopup::breadthfirst(std::function<void(WP<CPopup>, void*)> fn, void* data)
|
|||||||
|
|
||||||
WP<CPopup> CPopup::at(const Vector2D& globalCoords, bool allowsInput) {
|
WP<CPopup> CPopup::at(const Vector2D& globalCoords, bool allowsInput) {
|
||||||
std::vector<WP<CPopup>> popups;
|
std::vector<WP<CPopup>> popups;
|
||||||
breadthfirst([](WP<CPopup> popup, void* data) { ((std::vector<WP<CPopup>>*)data)->push_back(popup); }, &popups);
|
breadthfirst([&popups](WP<CPopup> popup, void* data) { popups.push_back(popup); }, &popups);
|
||||||
|
|
||||||
for (auto const& p : popups | std::views::reverse) {
|
for (auto const& p : popups | std::views::reverse) {
|
||||||
if (!p->m_pResource || !p->m_bMapped)
|
if (!p->m_pResource || !p->m_bMapped)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!allowsInput) {
|
if (!allowsInput) {
|
||||||
const Vector2D offset = p->m_pResource ? (p->size() - p->m_pResource->geometry.size()) / 2.F : Vector2D{};
|
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 Vector2D size = p->m_pResource ? p->m_pResource->geometry.size() : p->size();
|
||||||
|
|
||||||
const auto BOX = CBox{p->coordsGlobal() + offset, size};
|
const auto BOX = CBox{p->coordsGlobal() + offset, size};
|
||||||
if (BOX.containsPoint(globalCoords))
|
if (BOX.containsPoint(globalCoords))
|
||||||
return p;
|
return p;
|
||||||
} else {
|
} else {
|
||||||
const Vector2D offset = p->m_pResource ? (p->size() - p->m_pResource->geometry.size()) / 2.F : Vector2D{};
|
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 =
|
const auto REGION =
|
||||||
CRegion{p->m_pWLSurface->resource()->current.input}.intersect(CBox{{}, p->m_pWLSurface->resource()->current.size}).translate(p->coordsGlobal() + offset);
|
CRegion{p->m_pWLSurface->resource()->current.input}.intersect(CBox{{}, p->m_pWLSurface->resource()->current.size}).translate(p->coordsGlobal() + offset);
|
||||||
if (REGION.containsPoint(globalCoords))
|
if (REGION.containsPoint(globalCoords))
|
||||||
|
@@ -308,9 +308,7 @@ void CWLSurfaceResource::breadthfirst(std::function<void(SP<CWLSurfaceResource>,
|
|||||||
|
|
||||||
std::pair<SP<CWLSurfaceResource>, Vector2D> CWLSurfaceResource::at(const Vector2D& localCoords, bool allowsInput) {
|
std::pair<SP<CWLSurfaceResource>, Vector2D> CWLSurfaceResource::at(const Vector2D& localCoords, bool allowsInput) {
|
||||||
std::vector<std::pair<SP<CWLSurfaceResource>, Vector2D>> surfs;
|
std::vector<std::pair<SP<CWLSurfaceResource>, Vector2D>> surfs;
|
||||||
breadthfirst([](SP<CWLSurfaceResource> surf, const Vector2D& offset,
|
breadthfirst([&surfs](SP<CWLSurfaceResource> surf, const Vector2D& offset, void* data) { surfs.emplace_back(std::make_pair<>(surf, offset)); }, &surfs);
|
||||||
void* data) { ((std::vector<std::pair<SP<CWLSurfaceResource>, Vector2D>>*)data)->emplace_back(std::make_pair<>(surf, offset)); },
|
|
||||||
&surfs);
|
|
||||||
|
|
||||||
for (auto const& [surf, pos] : surfs | std::views::reverse) {
|
for (auto const& [surf, pos] : surfs | std::views::reverse) {
|
||||||
if (!allowsInput) {
|
if (!allowsInput) {
|
||||||
|
Reference in New Issue
Block a user