summaryrefslogtreecommitdiff
path: root/src/desktop/Window.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/desktop/Window.cpp')
-rw-r--r--src/desktop/Window.cpp29
1 files changed, 27 insertions, 2 deletions
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<Hyprlang::INT>("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<SInitialWorkspaceToken>(TOKEN->data);
+ if (token.primaryOwner == this) {
+ token.workspace = pWorkspace->getConfigName();
+ TOKEN->data = token;
+ }
+ }
+ }
}
static auto PCLOSEONLASTSPECIAL = CConfigValue<Hyprlang::INT>("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<Hyprlang::INT>("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<SInitialWorkspaceToken>(TOKEN->data);
+ if (token.primaryOwner == this)
+ g_pTokenManager->removeToken(TOKEN);
+ }
+ }
+ }
+
m_iLastWorkspace = m_pWorkspace->m_iID;
m_vRealPosition.setCallbackOnEnd(unregisterVar);