diff options
| author | Zynix <89567766+alper-han@users.noreply.github.com> | 2026-03-01 00:49:47 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-02-28 21:49:47 +0000 |
| commit | c2bed4103c0382de83f5277c5583bb15ae702c2a (patch) | |
| tree | cc045b65eb9f5ff93ee1e4dbdbbaafbef1fc19d7 /src/Compositor.cpp | |
| parent | 82729db330d11d8b39625f04b88bea093f99b33e (diff) | |
monitor: keep workspace monitor bindings on full reconnect (#13384)
When all monitors disconnect, non-active workspaces could migrate to the wrong output after reconnect. Preserve workspace ownership and re-apply assigned monitor bindings on connect.
Diffstat (limited to 'src/Compositor.cpp')
| -rw-r--r-- | src/Compositor.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp index 2068798d..918d50f4 100644 --- a/src/Compositor.cpp +++ b/src/Compositor.cpp @@ -3067,6 +3067,27 @@ void CCompositor::ensurePersistentWorkspacesPresent(const std::vector<SWorkspace } } +void CCompositor::ensureWorkspacesOnAssignedMonitors() { + for (auto const& ws : getWorkspacesCopy()) { + if (!valid(ws) || ws->m_isSpecialWorkspace) + continue; + + const auto RULE = g_pConfigManager->getWorkspaceRuleFor(ws); + if (RULE.monitor.empty()) + continue; + + const auto PMONITOR = getMonitorFromString(RULE.monitor); + if (!PMONITOR) + continue; + + if (ws->m_monitor == PMONITOR) + continue; + + Log::logger->log(Log::DEBUG, "ensureWorkspacesOnAssignedMonitors: moving workspace {} to {}", ws->m_name, PMONITOR->m_name); + moveWorkspaceToMonitor(ws, PMONITOR, true); + } +} + std::optional<unsigned int> CCompositor::getVTNr() { if (!m_aqBackend->hasSession()) return std::nullopt; |
