@@ -312,6 +312,8 @@ void Workspaces::onEvent(const std::string& ev) {
312312 onSpecialWorkspaceActivated (payload);
313313 } else if (eventName == " destroyworkspacev2" ) {
314314 onWorkspaceDestroyed (payload);
315+ } else if (eventName == " changeworkspaceid" ) {
316+ onWorkspaceIdChanged (payload);
315317 } else if (eventName == " createworkspacev2" ) {
316318 onWorkspaceCreated (payload);
317319 } else if (eventName == " focusedmonv2" ) {
@@ -449,6 +451,35 @@ void Workspaces::onWorkspaceRenamed(std::string const& payload) {
449451 sortWorkspaces ();
450452}
451453
454+ void Workspaces::onWorkspaceIdChanged (std::string const & payload) {
455+ spdlog::debug (" Workspace ID changed: {}" , payload);
456+
457+ const auto [oldIdStr, newIdStr] = splitDoublePayload (payload);
458+
459+ const auto oldId = parseWorkspaceId (oldIdStr);
460+ const auto newId = parseWorkspaceId (newIdStr);
461+
462+ if (!oldId.has_value () || !newId.has_value ()) {
463+ spdlog::warn (" Invalid workspace ID change payload: {}" , payload);
464+ return ;
465+ }
466+
467+ for (auto & workspace : m_workspaces) {
468+ if (workspace->id () == *oldId) {
469+ spdlog::debug (" Changing workspace ID from {} to {}" , *oldId, *newId);
470+ workspace->setId (*newId);
471+ break ;
472+ }
473+ }
474+
475+ if (m_activeWorkspaceId == *oldId) {
476+ m_activeWorkspaceId = *newId;
477+ }
478+
479+ sortWorkspaces ();
480+ updateWindowCount ();
481+ }
482+
452483void Workspaces::onMonitorFocused (std::string const & payload) {
453484 spdlog::trace (" Monitor focused: {}" , payload);
454485
@@ -827,6 +858,7 @@ auto Workspaces::registerIpc() -> void {
827858 m_ipc.registerForIPC (" createworkspacev2" , this );
828859 m_ipc.registerForIPC (" destroyworkspacev2" , this );
829860 m_ipc.registerForIPC (" focusedmonv2" , this );
861+ m_ipc.registerForIPC (" changeworkspaceid" , this );
830862 m_ipc.registerForIPC (" moveworkspacev2" , this );
831863 m_ipc.registerForIPC (" renameworkspace" , this );
832864 m_ipc.registerForIPC (" openwindow" , this );
0 commit comments