summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2022-09-29 16:53:31 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2022-09-29 16:53:31 +0100
commit9f9129e53647f61ffa70287ae0cc83d70d4c9bf6 (patch)
tree8363ce0f756ff85968e432094884cb2439ee5af3 /src
parent2636abca2dcf1eca2c0296bb817f644b8626a860 (diff)
focusable checks in nextWindow calls
Diffstat (limited to 'src')
-rw-r--r--src/Compositor.cpp12
-rw-r--r--src/Compositor.hpp4
-rw-r--r--src/managers/KeybindManager.cpp14
3 files changed, 15 insertions, 15 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index e3392483..c61c2582 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -1154,7 +1154,7 @@ void CCompositor::deactivateAllWLRWorkspaces(wlr_ext_workspace_handle_v1* exclud
}
}
-CWindow* CCompositor::getNextWindowOnWorkspace(CWindow* pWindow) {
+CWindow* CCompositor::getNextWindowOnWorkspace(CWindow* pWindow, bool focusableOnly) {
bool gotToWindow = false;
for (auto& w : m_vWindows) {
if (w.get() != pWindow && !gotToWindow)
@@ -1165,19 +1165,19 @@ CWindow* CCompositor::getNextWindowOnWorkspace(CWindow* pWindow) {
continue;
}
- if (w->m_iWorkspaceID == pWindow->m_iWorkspaceID && w->m_bIsMapped && !w->m_bHidden)
+ if (w->m_iWorkspaceID == pWindow->m_iWorkspaceID && w->m_bIsMapped && !w->m_bHidden && (!focusableOnly || !w->m_bNoFocus))
return w.get();
}
for (auto& w : m_vWindows) {
- if (w.get() != pWindow && w->m_iWorkspaceID == pWindow->m_iWorkspaceID && w->m_bIsMapped && !w->m_bHidden)
+ if (w.get() != pWindow && w->m_iWorkspaceID == pWindow->m_iWorkspaceID && w->m_bIsMapped && !w->m_bHidden && (!focusableOnly || !w->m_bNoFocus))
return w.get();
}
return nullptr;
}
-CWindow* CCompositor::getPrevWindowOnWorkspace(CWindow* pWindow) {
+CWindow* CCompositor::getPrevWindowOnWorkspace(CWindow* pWindow, bool focusableOnly) {
bool gotToWindow = false;
for (auto it = m_vWindows.rbegin(); it != m_vWindows.rend(); it++) {
if (it->get() != pWindow && !gotToWindow)
@@ -1188,12 +1188,12 @@ CWindow* CCompositor::getPrevWindowOnWorkspace(CWindow* pWindow) {
continue;
}
- if ((*it)->m_iWorkspaceID == pWindow->m_iWorkspaceID && (*it)->m_bIsMapped && !(*it)->m_bHidden)
+ if ((*it)->m_iWorkspaceID == pWindow->m_iWorkspaceID && (*it)->m_bIsMapped && !(*it)->m_bHidden && (!focusableOnly || !(*it)->m_bNoFocus))
return it->get();
}
for (auto it = m_vWindows.rbegin(); it != m_vWindows.rend(); it++) {
- if (it->get() != pWindow && (*it)->m_iWorkspaceID == pWindow->m_iWorkspaceID && (*it)->m_bIsMapped && !(*it)->m_bHidden)
+ if (it->get() != pWindow && (*it)->m_iWorkspaceID == pWindow->m_iWorkspaceID && (*it)->m_bIsMapped && !(*it)->m_bHidden && (!focusableOnly || !(*it)->m_bNoFocus))
return it->get();
}
diff --git a/src/Compositor.hpp b/src/Compositor.hpp
index fcec0fb5..aa4cd878 100644
--- a/src/Compositor.hpp
+++ b/src/Compositor.hpp
@@ -138,8 +138,8 @@ public:
void cleanupFadingOut(const int& monid);
CWindow* getWindowInDirection(CWindow*, char);
void deactivateAllWLRWorkspaces(wlr_ext_workspace_handle_v1* exclude = nullptr);
- CWindow* getNextWindowOnWorkspace(CWindow*);
- CWindow* getPrevWindowOnWorkspace(CWindow*);
+ CWindow* getNextWindowOnWorkspace(CWindow*, bool focusableOnly = false);
+ CWindow* getPrevWindowOnWorkspace(CWindow*, bool focusableOnly = false);
int getNextAvailableNamedWorkspace();
bool isPointOnAnyMonitor(const Vector2D&);
CWindow* getConstraintWindow(SMouse*);
diff --git a/src/managers/KeybindManager.cpp b/src/managers/KeybindManager.cpp
index 9aebe7c4..50a12a80 100644
--- a/src/managers/KeybindManager.cpp
+++ b/src/managers/KeybindManager.cpp
@@ -1003,7 +1003,7 @@ void CKeybindManager::moveFocusTo(std::string args) {
if (PWINDOWTOCHANGETO) {
switchToWindow(PWINDOWTOCHANGETO);
} else {
- const auto PWINDOWNEXT = g_pCompositor->getNextWindowOnWorkspace(PLASTWINDOW);
+ const auto PWINDOWNEXT = g_pCompositor->getNextWindowOnWorkspace(PLASTWINDOW, true);
if (PWINDOWNEXT) {
switchToWindow(PWINDOWNEXT);
}
@@ -1415,9 +1415,9 @@ void CKeybindManager::circleNext(std::string arg) {
};
if (arg == "last" || arg == "l" || arg == "prev" || arg == "p")
- switchToWindow(g_pCompositor->getPrevWindowOnWorkspace(g_pCompositor->m_pLastWindow));
+ switchToWindow(g_pCompositor->getPrevWindowOnWorkspace(g_pCompositor->m_pLastWindow, true));
else
- switchToWindow(g_pCompositor->getNextWindowOnWorkspace(g_pCompositor->m_pLastWindow));
+ switchToWindow(g_pCompositor->getNextWindowOnWorkspace(g_pCompositor->m_pLastWindow, true));
}
void CKeybindManager::focusWindow(std::string regexp) {
@@ -1577,16 +1577,16 @@ void CKeybindManager::swapnext(std::string arg) {
const auto PLASTCYCLED = g_pCompositor->windowValidMapped(g_pCompositor->m_pLastWindow->m_pLastCycledWindow) && g_pCompositor->m_pLastWindow->m_pLastCycledWindow->m_iWorkspaceID == PLASTWINDOW->m_iWorkspaceID ? g_pCompositor->m_pLastWindow->m_pLastCycledWindow : nullptr;
if (arg == "last" || arg == "l" || arg == "prev" || arg == "p")
- toSwap = g_pCompositor->getPrevWindowOnWorkspace(PLASTCYCLED ? PLASTCYCLED : PLASTWINDOW);
+ toSwap = g_pCompositor->getPrevWindowOnWorkspace(PLASTCYCLED ? PLASTCYCLED : PLASTWINDOW, true);
else
- toSwap = g_pCompositor->getNextWindowOnWorkspace(PLASTCYCLED ? PLASTCYCLED : PLASTWINDOW);
+ toSwap = g_pCompositor->getNextWindowOnWorkspace(PLASTCYCLED ? PLASTCYCLED : PLASTWINDOW, true);
// sometimes we may come back to ourselves.
if (toSwap == PLASTWINDOW) {
if (arg == "last" || arg == "l" || arg == "prev" || arg == "p")
- toSwap = g_pCompositor->getPrevWindowOnWorkspace(PLASTWINDOW);
+ toSwap = g_pCompositor->getPrevWindowOnWorkspace(PLASTWINDOW), true;
else
- toSwap = g_pCompositor->getNextWindowOnWorkspace(PLASTWINDOW);
+ toSwap = g_pCompositor->getNextWindowOnWorkspace(PLASTWINDOW, true);
}
g_pLayoutManager->getCurrentLayout()->switchWindows(PLASTWINDOW, toSwap);