summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorvaxerski <43317083+vaxerski@users.noreply.github.com>2023-05-03 15:15:56 +0100
committervaxerski <43317083+vaxerski@users.noreply.github.com>2023-05-03 15:15:56 +0100
commitfd3e6a3bfde6d44a62df4834ccae5b24a1f36469 (patch)
tree04f840873d79c1695dd1f6a68c2c37a8fb49b039 /src
parent0155b85950fd360011b84fcb3460248264191ee2 (diff)
workspaces: restore monitor on re-plug
Diffstat (limited to 'src')
-rw-r--r--src/helpers/Monitor.cpp10
-rw-r--r--src/helpers/Workspace.hpp5
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);