summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-10-28 19:35:02 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-10-28 19:35:02 +0100
commit83e4006b16e79e747888c507243c37eefabe9790 (patch)
tree008f36dfdb73bb2b6afc8336d5b66deb12b3c6ae /src/Compositor.cpp
parent1759b0483c42421e5e99f4a26b7bb11648407c42 (diff)
properly find the constraint window
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp20
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();
}
}