diff options
| author | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-05-03 15:15:56 +0100 |
|---|---|---|
| committer | vaxerski <43317083+vaxerski@users.noreply.github.com> | 2023-05-03 15:15:56 +0100 |
| commit | fd3e6a3bfde6d44a62df4834ccae5b24a1f36469 (patch) | |
| tree | 04f840873d79c1695dd1f6a68c2c37a8fb49b039 /src | |
| parent | 0155b85950fd360011b84fcb3460248264191ee2 (diff) | |
workspaces: restore monitor on re-plug
Diffstat (limited to 'src')
| -rw-r--r-- | src/helpers/Monitor.cpp | 10 | ||||
| -rw-r--r-- | src/helpers/Workspace.hpp | 5 |
2 files changed, 14 insertions, 1 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index f9209b8a..924aab1d 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -144,6 +144,14 @@ void CMonitor::onConnect(bool noRule) { setupDefaultWS(monitorRule); + for (auto& ws : g_pCompositor->m_vWorkspaces) { + if (ws->m_szLastMonitor == szName) { + g_pCompositor->moveWorkspaceToMonitor(ws.get(), this); + ws->startAnim(true, true, true); + ws->m_szLastMonitor = ""; + } + } + scale = monitorRule.scale; if (scale < 0.1) scale = getDefaultScale(); @@ -264,6 +272,7 @@ void CMonitor::onDisconnect() { } for (auto& w : wspToMove) { + w->m_szLastMonitor = szName; g_pCompositor->moveWorkspaceToMonitor(w, BACKUPMON); w->startAnim(true, true, true); } @@ -378,6 +387,7 @@ void CMonitor::setupDefaultWS(const SMonitorRule& monitorRule) { g_pCompositor->deactivateAllWLRWorkspaces(PNEWWORKSPACE->m_pWlrHandle); PNEWWORKSPACE->setActive(true); + PNEWWORKSPACE->m_szLastMonitor = ""; } void CMonitor::setMirror(const std::string& mirrorOf) { diff --git a/src/helpers/Workspace.hpp b/src/helpers/Workspace.hpp index 5ecbd483..b9de76d5 100644 --- a/src/helpers/Workspace.hpp +++ b/src/helpers/Workspace.hpp @@ -51,7 +51,10 @@ class CWorkspace { bool m_bDefaultPseudo = false; // don't destroy in sanity check - bool m_bIndestructible = false; + bool m_bIndestructible = false; + + // last monitor (used on reconnect) + std::string m_szLastMonitor = ""; void startAnim(bool in, bool left, bool instant = false); void setActive(bool on); |
