mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-23 01:46:00 +01:00
layer: don't close special ws when restoring focus (#6424)
modified: src/Compositor.cpp modified: src/Compositor.hpp modified: src/managers/input/InputManager.cpp
This commit is contained in:
parent
e1b05f8eaf
commit
b6bf4afb48
3 changed files with 13 additions and 1 deletions
|
@ -1111,6 +1111,17 @@ bool CCompositor::isWorkspaceVisible(PHLWORKSPACE w) {
|
||||||
return valid(w) && w->m_bVisible;
|
return valid(w) && w->m_bVisible;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool CCompositor::isWorkspaceVisibleNotCovered(PHLWORKSPACE w) {
|
||||||
|
if (!valid(w))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
const auto PMONITOR = getMonitorFromID(w->m_iMonitorID);
|
||||||
|
if (PMONITOR->activeSpecialWorkspace)
|
||||||
|
return PMONITOR->activeSpecialWorkspace->m_iID == w->m_iID;
|
||||||
|
|
||||||
|
return PMONITOR->activeWorkspace->m_iID == w->m_iID;
|
||||||
|
}
|
||||||
|
|
||||||
PHLWORKSPACE CCompositor::getWorkspaceByID(const int& id) {
|
PHLWORKSPACE CCompositor::getWorkspaceByID(const int& id) {
|
||||||
for (auto& w : m_vWorkspaces) {
|
for (auto& w : m_vWorkspaces) {
|
||||||
if (w->m_iID == id && !w->inert())
|
if (w->m_iID == id && !w->inert())
|
||||||
|
|
|
@ -118,6 +118,7 @@ class CCompositor {
|
||||||
PHLWINDOW getWindowFromSurface(SP<CWLSurfaceResource>);
|
PHLWINDOW getWindowFromSurface(SP<CWLSurfaceResource>);
|
||||||
PHLWINDOW getWindowFromHandle(uint32_t);
|
PHLWINDOW getWindowFromHandle(uint32_t);
|
||||||
bool isWorkspaceVisible(PHLWORKSPACE);
|
bool isWorkspaceVisible(PHLWORKSPACE);
|
||||||
|
bool isWorkspaceVisibleNotCovered(PHLWORKSPACE);
|
||||||
PHLWORKSPACE getWorkspaceByID(const int&);
|
PHLWORKSPACE getWorkspaceByID(const int&);
|
||||||
PHLWORKSPACE getWorkspaceByName(const std::string&);
|
PHLWORKSPACE getWorkspaceByName(const std::string&);
|
||||||
PHLWORKSPACE getWorkspaceByString(const std::string&);
|
PHLWORKSPACE getWorkspaceByString(const std::string&);
|
||||||
|
|
|
@ -1409,7 +1409,7 @@ void CInputManager::refocusLastWindow(CMonitor* pMonitor) {
|
||||||
foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP],
|
foundSurface = g_pCompositor->vectorToLayerSurface(g_pInputManager->getMouseCoordsInternal(), &pMonitor->m_aLayerSurfaceLayers[ZWLR_LAYER_SHELL_V1_LAYER_TOP],
|
||||||
&surfaceCoords, &pFoundLayerSurface);
|
&surfaceCoords, &pFoundLayerSurface);
|
||||||
|
|
||||||
if (!foundSurface && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->isWorkspaceVisible(g_pCompositor->m_pLastWindow->m_pWorkspace)) {
|
if (!foundSurface && g_pCompositor->m_pLastWindow.lock() && g_pCompositor->isWorkspaceVisibleNotCovered(g_pCompositor->m_pLastWindow->m_pWorkspace)) {
|
||||||
// then the last focused window if we're on the same workspace as it
|
// then the last focused window if we're on the same workspace as it
|
||||||
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock();
|
const auto PLASTWINDOW = g_pCompositor->m_pLastWindow.lock();
|
||||||
g_pCompositor->focusWindow(PLASTWINDOW);
|
g_pCompositor->focusWindow(PLASTWINDOW);
|
||||||
|
|
Loading…
Reference in a new issue