From 608eff600d31879519aa64b795b45709ebfac267 Mon Sep 17 00:00:00 2001 From: Vaxry Date: Wed, 24 Apr 2024 16:16:46 +0100 Subject: tokens: add more modes to initial_workspace_tracking 1 is single-shot, 2 is persistent fixes #5732 --- src/desktop/Window.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/desktop/Window.cpp') diff --git a/src/desktop/Window.cpp b/src/desktop/Window.cpp index 8dcfc397..cebdad49 100644 --- a/src/desktop/Window.cpp +++ b/src/desktop/Window.cpp @@ -385,9 +385,20 @@ void CWindow::moveToWorkspace(PHLWORKSPACE pWorkspace) { if (m_pWorkspace == pWorkspace) return; + static auto PINITIALWSTRACKING = CConfigValue("misc:initial_workspace_tracking"); + if (!m_szInitialWorkspaceToken.empty()) { - g_pTokenManager->removeToken(g_pTokenManager->getToken(m_szInitialWorkspaceToken)); - m_szInitialWorkspaceToken = ""; + const auto TOKEN = g_pTokenManager->getToken(m_szInitialWorkspaceToken); + if (TOKEN) { + if (*PINITIALWSTRACKING == 2) { + // persistent + SInitialWorkspaceToken token = std::any_cast(TOKEN->data); + if (token.primaryOwner == this) { + token.workspace = pWorkspace->getConfigName(); + TOKEN->data = token; + } + } + } } static auto PCLOSEONLASTSPECIAL = CConfigValue("misc:close_special_on_empty"); @@ -468,6 +479,20 @@ void CWindow::onUnmap() { if (g_pInputManager->currentlyDraggedWindow == this) g_pInputManager->currentlyDraggedWindow = nullptr; + static auto PINITIALWSTRACKING = CConfigValue("misc:initial_workspace_tracking"); + + if (!m_szInitialWorkspaceToken.empty()) { + const auto TOKEN = g_pTokenManager->getToken(m_szInitialWorkspaceToken); + if (TOKEN) { + if (*PINITIALWSTRACKING == 2) { + // persistent token, but the first window got removed so the token is gone + SInitialWorkspaceToken token = std::any_cast(TOKEN->data); + if (token.primaryOwner == this) + g_pTokenManager->removeToken(TOKEN); + } + } + } + m_iLastWorkspace = m_pWorkspace->m_iID; m_vRealPosition.setCallbackOnEnd(unregisterVar); -- cgit v1.2.3