diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-10-28 19:35:02 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2022-10-28 19:35:02 +0100 |
| commit | 83e4006b16e79e747888c507243c37eefabe9790 (patch) | |
| tree | 008f36dfdb73bb2b6afc8336d5b66deb12b3c6ae /src/Compositor.cpp | |
| parent | 1759b0483c42421e5e99f4a26b7bb11648407c42 (diff) | |
properly find the constraint window
Diffstat (limited to 'src/Compositor.cpp')
| -rw-r--r-- | src/Compositor.cpp | 20 |
1 files 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<wlr_surface*, bool>*)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<wlr_surface*, bool> check = {PSURFACE, false}; + wlr_surface_for_each_surface(w->m_uSurface.xdg->surface, checkFocusSurfaceIter, &check); + + if (check.second) + return w.get(); } } |
