mirror of
https://github.com/hyprwm/Hyprland
synced 2024-11-23 00:25:57 +01:00
core: simplify sanityCheckWorkspaces
This commit is contained in:
parent
4909b0f350
commit
094bce8118
3 changed files with 8 additions and 34 deletions
|
@ -1256,43 +1256,12 @@ PHLWORKSPACE CCompositor::getWorkspaceByID(const int& id) {
|
||||||
void CCompositor::sanityCheckWorkspaces() {
|
void CCompositor::sanityCheckWorkspaces() {
|
||||||
auto it = m_vWorkspaces.begin();
|
auto it = m_vWorkspaces.begin();
|
||||||
while (it != m_vWorkspaces.end()) {
|
while (it != m_vWorkspaces.end()) {
|
||||||
|
// If ref == 1, only the compositor holds a ref, which means it's inactive and has no mapped windows.
|
||||||
const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(*it);
|
if (!(*it)->m_bPersistent && it->use_count() == 1) {
|
||||||
if (WORKSPACERULE.isPersistent) {
|
it = m_vWorkspaces.erase(it);
|
||||||
++it;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& WORKSPACE = *it;
|
|
||||||
const auto WINDOWSONWORKSPACE = getWindowsOnWorkspace(WORKSPACE->m_iID);
|
|
||||||
|
|
||||||
if (WINDOWSONWORKSPACE == 0) {
|
|
||||||
if (!isWorkspaceVisible(WORKSPACE)) {
|
|
||||||
|
|
||||||
if (WORKSPACE->m_bIsSpecialWorkspace) {
|
|
||||||
if (WORKSPACE->m_fAlpha.value() > 0.f /* don't abruptly end the fadeout */) {
|
|
||||||
++it;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto PMONITOR = getMonitorFromID(WORKSPACE->m_iMonitorID);
|
|
||||||
|
|
||||||
if (PMONITOR && PMONITOR->activeSpecialWorkspace == WORKSPACE)
|
|
||||||
PMONITOR->setSpecialWorkspace(nullptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
it->get()->markInert();
|
|
||||||
it = m_vWorkspaces.erase(it);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!WORKSPACE->m_bOnCreatedEmptyExecuted) {
|
|
||||||
if (auto cmd = WORKSPACERULE.onCreatedEmptyRunCmd)
|
|
||||||
g_pKeybindManager->spawn(*cmd);
|
|
||||||
|
|
||||||
WORKSPACE->m_bOnCreatedEmptyExecuted = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
++it;
|
++it;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,6 +41,9 @@ void CWorkspace::init(PHLWORKSPACE self) {
|
||||||
|
|
||||||
m_bInert = false;
|
m_bInert = false;
|
||||||
|
|
||||||
|
const auto WORKSPACERULE = g_pConfigManager->getWorkspaceRuleFor(self);
|
||||||
|
m_bPersistent = WORKSPACERULE.isPersistent;
|
||||||
|
|
||||||
g_pEventManager->postEvent({"createworkspace", m_szName});
|
g_pEventManager->postEvent({"createworkspace", m_szName});
|
||||||
g_pEventManager->postEvent({"createworkspacev2", std::format("{},{}", m_iID, m_szName)});
|
g_pEventManager->postEvent({"createworkspacev2", std::format("{},{}", m_iID, m_szName)});
|
||||||
EMIT_HOOK_EVENT("createWorkspace", this);
|
EMIT_HOOK_EVENT("createWorkspace", this);
|
||||||
|
|
|
@ -61,6 +61,8 @@ class CWorkspace {
|
||||||
// Whether the user configured command for on-created-empty has been executed, if any
|
// Whether the user configured command for on-created-empty has been executed, if any
|
||||||
bool m_bOnCreatedEmptyExecuted = false;
|
bool m_bOnCreatedEmptyExecuted = false;
|
||||||
|
|
||||||
|
bool m_bPersistent = false;
|
||||||
|
|
||||||
// Inert: destroyed and invalid. If this is true, release the ptr you have.
|
// Inert: destroyed and invalid. If this is true, release the ptr you have.
|
||||||
bool inert();
|
bool inert();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue