summaryrefslogtreecommitdiff
path: root/src/events/Windows.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/events/Windows.cpp')
-rw-r--r--src/events/Windows.cpp19
1 files changed, 15 insertions, 4 deletions
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<std::string>(TOKEN->data);
+ SInitialWorkspaceToken WS = std::any_cast<SInitialWorkspaceToken>(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;
+ }
}
}
}