diff --git a/src/modules/hyprland/workspaces.cpp b/src/modules/hyprland/workspaces.cpp index df9f82f81d..fa49733890 100644 --- a/src/modules/hyprland/workspaces.cpp +++ b/src/modules/hyprland/workspaces.cpp @@ -527,10 +527,7 @@ void Workspaces::createWorkspace(Json::Value const &workspace_data, if (workspace != m_workspaces.end()) { // don't recreate workspace, but update persistency if necessary - if (workspace_data["persistent"].asBool() and !(*workspace)->isPersistent()) { - spdlog::info("Setting workspace {} as persistent", workspaceName); - (*workspace)->setPersistent(); - } + (*workspace)->setPersistent(workspace_data["persistent"].asBool()); return; } spdlog::info("Workspace {} does not exist yet, creating...", workspaceName); @@ -562,6 +559,11 @@ void Workspaces::removeWorkspace(std::string const &name) { void Workspaces::initializeWorkspaces() { spdlog::debug("Initializing workspaces"); + // if the workspace rules changed since last initialization, make sure we reset everything: + for (auto &workspace : m_workspaces) { + m_workspacesToRemove.push_back(workspace->name()); + } + // get all current workspaces auto const workspacesJson = gIPC->getSocket1JsonReply("workspaces"); auto const clientsJson = gIPC->getSocket1JsonReply("clients"); @@ -605,7 +607,9 @@ void Workspaces::initializeWorkspaces() { workspaceData["monitor"] = monitor; workspaceData["windows"] = 0; workspaceData["persistent"] = true; - createWorkspace(workspaceData); + m_workspacesToCreate.push_back(workspaceData); + } else { + m_workspacesToRemove.push_back(workspace); } } }