summaryrefslogtreecommitdiff
path: root/src/Compositor.cpp
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-04 16:33:50 +0200
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-04-04 16:33:50 +0200
commitd15cda7e4141eb73838cf0e5452c24d427028273 (patch)
treee9433885eb2d2770f9aca184d7d4032be940ec90 /src/Compositor.cpp
parent59b96f782b828b3342f6adc3a190d6b0b99e5f8a (diff)
iterate over floating windows correctly with Z
Diffstat (limited to 'src/Compositor.cpp')
-rw-r--r--src/Compositor.cpp32
1 files changed, 16 insertions, 16 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index 8dd5c561..5d9cfd54 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -243,10 +243,10 @@ bool CCompositor::windowExists(CWindow* pWindow) {
CWindow* CCompositor::vectorToWindow(const Vector2D& pos) {
const auto PMONITOR = getMonitorFromVector(pos);
// first loop over floating cuz they're above, m_lWindows should be sorted bottom->top, for tiled it doesn't matter.
- for (auto& w : m_lWindows) {
- wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
- if (wlr_box_contains_point(&box, pos.x, pos.y) && w.m_bIsMapped && w.m_bIsFloating && isWorkspaceVisible(w.m_iWorkspaceID))
- return &w;
+ for (auto w = m_lWindows.rbegin(); w != m_lWindows.rend(); w++) {
+ wlr_box box = {w->m_vRealPosition.x, w->m_vRealPosition.y, w->m_vRealSize.x, w->m_vRealSize.y};
+ if (wlr_box_contains_point(&box, pos.x, pos.y) && w->m_bIsMapped && w->m_bIsFloating && isWorkspaceVisible(w->m_iWorkspaceID))
+ return &(*w);
}
for (auto& w : m_lWindows) {
@@ -272,10 +272,10 @@ CWindow* CCompositor::vectorToWindowTiled(const Vector2D& pos) {
CWindow* CCompositor::vectorToWindowIdeal(const Vector2D& pos) {
const auto PMONITOR = getMonitorFromVector(pos);
// first loop over floating cuz they're above, m_lWindows should be sorted bottom->top, for tiled it doesn't matter.
- for (auto& w : m_lWindows) {
- wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
- if (w.m_bIsFloating && w.m_bIsMapped && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && isWorkspaceVisible(w.m_iWorkspaceID))
- return &w;
+ for (auto w = m_lWindows.rbegin(); w != m_lWindows.rend(); w++) {
+ wlr_box box = {w->m_vRealPosition.x, w->m_vRealPosition.y, w->m_vRealSize.x, w->m_vRealSize.y};
+ if (w->m_bIsFloating && w->m_bIsMapped && wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && isWorkspaceVisible(w->m_iWorkspaceID))
+ return &(*w);
}
for (auto& w : m_lWindows) {
@@ -291,10 +291,10 @@ CWindow* CCompositor::windowFromCursor() {
const auto PMONITOR = getMonitorFromCursor();
// first loop over floating cuz they're above, m_lWindows should be sorted bottom->top, for tiled it doesn't matter.
- for (auto& w : m_lWindows) {
- wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
- if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w.m_bIsMapped && w.m_bIsFloating && isWorkspaceVisible(w.m_iWorkspaceID))
- return &w;
+ for (auto w = m_lWindows.rbegin(); w != m_lWindows.rend(); w++) {
+ wlr_box box = {w->m_vRealPosition.x, w->m_vRealPosition.y, w->m_vRealSize.x, w->m_vRealSize.y};
+ if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w->m_bIsMapped && w->m_bIsFloating && isWorkspaceVisible(w->m_iWorkspaceID))
+ return &(*w);
}
for (auto& w : m_lWindows) {
@@ -307,10 +307,10 @@ CWindow* CCompositor::windowFromCursor() {
}
CWindow* CCompositor::windowFloatingFromCursor() {
- for (auto& w : m_lWindows) {
- wlr_box box = {w.m_vRealPosition.x, w.m_vRealPosition.y, w.m_vRealSize.x, w.m_vRealSize.y};
- if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w.m_bIsMapped && w.m_bIsFloating && isWorkspaceVisible(w.m_iWorkspaceID))
- return &w;
+ for (auto w = m_lWindows.rbegin(); w != m_lWindows.rend(); w++) {
+ wlr_box box = {w->m_vRealPosition.x, w->m_vRealPosition.y, w->m_vRealSize.x, w->m_vRealSize.y};
+ if (wlr_box_contains_point(&box, m_sWLRCursor->x, m_sWLRCursor->y) && w->m_bIsMapped && w->m_bIsFloating && isWorkspaceVisible(w->m_iWorkspaceID))
+ return &(*w);
}
return nullptr;