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/events/Windows.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'src/events/Windows.cpp') diff --git a/src/events/Windows.cpp b/src/events/Windows.cpp index b02d63a7..2d1e1384 100644 --- a/src/events/Windows.cpp +++ b/src/events/Windows.cpp @@ -81,14 +81,25 @@ void Events::listener_mapWindow(void* owner, void* data) { const auto TOKEN = g_pTokenManager->getToken(SZTOKEN); if (TOKEN) { // find workspace and use it - std::string WS = std::any_cast(TOKEN->data); + SInitialWorkspaceToken WS = std::any_cast(TOKEN->data); - Debug::log(LOG, "HL_INITIAL_WORKSPACE_TOKEN {} -> {}", SZTOKEN, WS); + Debug::log(LOG, "HL_INITIAL_WORKSPACE_TOKEN {} -> {}", SZTOKEN, WS.workspace); - if (g_pCompositor->getWorkspaceByString(WS) != PWINDOW->m_pWorkspace) { - requestedWorkspace = WS; + if (g_pCompositor->getWorkspaceByString(WS.workspace) != PWINDOW->m_pWorkspace) { + requestedWorkspace = WS.workspace; workspaceSilent = true; } + + if (*PINITIALWSTRACKING == 1) // one-shot token + g_pTokenManager->removeToken(TOKEN); + else if (*PINITIALWSTRACKING == 2) { // persistent + if (!WS.primaryOwner) { + WS.primaryOwner = PWINDOW; + TOKEN->data = WS; + } + + PWINDOW->m_szInitialWorkspaceToken = SZTOKEN; + } } } } -- cgit v1.2.3