Focus to a fullscreen window if present (manual focus)

This commit is contained in:
vaxerski 2021-12-12 13:40:13 +01:00
parent df02ccaa75
commit 7da0c70be8
2 changed files with 33 additions and 8 deletions

View File

@ -1286,19 +1286,33 @@ void CWindowManager::moveActiveWindowTo(char dir) {
warpCursorTo(CURRENTWINDOW->getPosition() + CURRENTWINDOW->getSize() / 2.f);
}
CWindow* CWindowManager::getFullscreenWindowByWorkspace(const int& id) {
for (auto& window : windows) {
if (window.getWorkspaceID() == id && window.getFullscreen())
return &window;
}
return nullptr;
}
void CWindowManager::moveActiveFocusTo(char dir) {
const auto CURRENTWINDOW = getWindowFromDrawable(LastWindow);
if (!CURRENTWINDOW)
return;
const auto neighbor = getNeighborInDir(dir);
const auto PWORKSPACE = getWorkspaceByID(CURRENTWINDOW->getWorkspaceID());
if (!neighbor)
if (!PWORKSPACE)
return;
const auto NEIGHBOR = PWORKSPACE->getHasFullscreenWindow() ? getFullscreenWindowByWorkspace(PWORKSPACE->getID()) : getNeighborInDir(dir);
if (!NEIGHBOR)
return;
// move the focus
setFocusedWindow(neighbor->getDrawable());
setFocusedWindow(NEIGHBOR->getDrawable());
// finish by moving the cursor to the current window
warpCursorTo(CURRENTWINDOW->getPosition() + CURRENTWINDOW->getSize() / 2.f);
@ -1324,11 +1338,21 @@ void CWindowManager::changeWorkspaceByID(int ID) {
activeWorkspaces[workspace.getMonitor()] = workspace.getID();
// set the focus to any window on that workspace
for (auto& window : windows) {
if (window.getWorkspaceID() == ID && window.getDrawable() > 0) {
g_pWindowManager->setFocusedWindow(window.getDrawable());
break;
// if not fullscreen set the focus to any window on that workspace
// if fullscreen, set to the fullscreen window
const auto PWORKSPACE = getWorkspaceByID(ID);
if (PWORKSPACE) {
if (!PWORKSPACE->getHasFullscreenWindow()) {
for (auto& window : windows) {
if (window.getWorkspaceID() == ID && window.getDrawable() > 0) {
setFocusedWindow(window.getDrawable());
break;
}
}
} else {
const auto PFULLWINDOW = getFullscreenWindowByWorkspace(ID);
if (PFULLWINDOW)
setFocusedWindow(PFULLWINDOW->getDrawable());
}
}

View File

@ -143,6 +143,7 @@ private:
SMonitor* getMonitorFromWorkspace(const int&);
void recalcEntireWorkspace(const int&);
void fixMasterWorkspaceOnClosed(CWindow* pWindow);
CWindow* getFullscreenWindowByWorkspace(const int&);
};
inline std::unique_ptr<CWindowManager> g_pWindowManager = std::make_unique<CWindowManager>();