From 83e4006b16e79e747888c507243c37eefabe9790 Mon Sep 17 00:00:00 2001 From: vaxerski <43317083+vaxerski@users.noreply.github.com> Date: Fri, 28 Oct 2022 19:35:02 +0100 Subject: [PATCH] properly find the constraint window --- src/Compositor.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 499c3fd7..890c20f6 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -1275,6 +1275,11 @@ bool CCompositor::isPointOnAnyMonitor(const Vector2D& point) { return false; } +void checkFocusSurfaceIter(wlr_surface* pSurface, int x, int y, void* data) { + auto pair = (std::pair*)data; + pair->second = pair->second || pSurface == pair->first; +} + CWindow* CCompositor::getConstraintWindow(SMouse* pMouse) { if (!pMouse->currentConstraint) return nullptr; @@ -1282,11 +1287,18 @@ CWindow* CCompositor::getConstraintWindow(SMouse* pMouse) { const auto PSURFACE = pMouse->currentConstraint->surface; for (auto& w : m_vWindows) { - if (PSURFACE == g_pXWaylandManager->getWindowSurface(w.get())) { - if (!w->m_bIsX11 && w->m_bIsMapped && !w->isHidden()) - continue; + if (w->isHidden() || !w->m_bMappedX11 || !w->m_bIsMapped || !g_pXWaylandManager->getWindowSurface(w.get())) + continue; - return w.get(); + if (w->m_bIsX11) { + if (PSURFACE == g_pXWaylandManager->getWindowSurface(w.get())) + return w.get(); + } else { + std::pair check = {PSURFACE, false}; + wlr_surface_for_each_surface(w->m_uSurface.xdg->surface, checkFocusSurfaceIter, &check); + + if (check.second) + return w.get(); } }