From 1f0ce1a5d93f70aa1a17a5d553fbcb840c71aa64 Mon Sep 17 00:00:00 2001 From: DreamMaoMao <2523610504@qq.com> Date: Fri, 27 Oct 2023 14:17:43 +0800 Subject: [PATCH] Fixed variable synchronization exception caused by the "hyprland/workspace" module receiving create or delete IPC requests too quickly --- src/modules/hyprland/workspaces.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/modules/hyprland/workspaces.cpp b/src/modules/hyprland/workspaces.cpp index 684c2b92..62383f46 100644 --- a/src/modules/hyprland/workspaces.cpp +++ b/src/modules/hyprland/workspaces.cpp @@ -153,17 +153,25 @@ auto Workspaces::register_ipc() -> void { } auto Workspaces::update() -> void { + //remove workspaces that wait to be removed + unsigned int current_remove_workspace_num = 0; for (const std::string &workspace_to_remove : workspaces_to_remove_) { remove_workspace(workspace_to_remove); + current_remove_workspace_num++; + } + for (unsigned int i = 0; i < current_remove_workspace_num; i++) { + workspaces_to_remove_.erase(workspaces_to_remove_.begin()); } - workspaces_to_remove_.clear(); - + //add workspaces that wait to be created + unsigned int current_create_workspace_num = 0; for (Json::Value const &workspace_to_create : workspaces_to_create_) { create_workspace(workspace_to_create); + current_create_workspace_num++; + } + for (unsigned int i = 0; i < current_create_workspace_num; i++) { + workspaces_to_create_.erase(workspaces_to_create_.begin()); } - - workspaces_to_create_.clear(); // get all active workspaces auto monitors = gIPC->getSocket1JsonReply("monitors");