summaryrefslogtreecommitdiff
path: root/src/helpers/Monitor.cpp
diff options
context:
space:
mode:
authorvaxerski <vaxry@vaxry.net>2022-08-10 21:54:09 +0200
committervaxerski <vaxry@vaxry.net>2022-08-10 21:54:09 +0200
commit58ff04fdf3124fbe739193cb1a8070c85bec166b (patch)
tree5b5a2171025f93749a15be248e0f4652fbfc3fc8 /src/helpers/Monitor.cpp
parent9b39a0c2e0fb3ad4500c132dc975580f90eb1c08 (diff)
added experimental monitor saving
Diffstat (limited to 'src/helpers/Monitor.cpp')
-rw-r--r--src/helpers/Monitor.cpp24
1 files changed, 14 insertions, 10 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp
index 51ff65bb..bd547a3b 100644
--- a/src/helpers/Monitor.cpp
+++ b/src/helpers/Monitor.cpp
@@ -160,6 +160,9 @@ void CMonitor::onConnect(bool noRule) {
wlr_xcursor_manager_load(g_pCompositor->m_sWLRXCursorMgr, scale);
+ g_pHyprRenderer->arrangeLayersForMonitor(ID);
+ g_pLayoutManager->getCurrentLayout()->recalculateMonitor(ID);
+
g_pEventManager->postEvent(SHyprIPCEvent{"monitoradded", szName});
}
@@ -177,16 +180,21 @@ void CMonitor::onDisconnect() {
}
}
- if (!BACKUPMON) {
- Debug::log(CRIT, "No monitors! Unplugged last! Exiting.");
- g_pCompositor->cleanup();
- return;
- }
-
m_bEnabled = false;
hyprListener_monitorFrame.removeCallback();
+ if (!BACKUPMON) {
+ Debug::log(WARN, "Unplugged last monitor, entering an unsafe state. Good luck my friend.");
+
+ hyprListener_monitorMode.removeCallback();
+ hyprListener_monitorDestroy.removeCallback();
+
+ g_pCompositor->m_bUnsafeState = true;
+
+ return;
+ }
+
const auto BACKUPWORKSPACE = BACKUPMON->activeWorkspace > 0 ? std::to_string(BACKUPMON->activeWorkspace) : "name:" + g_pCompositor->getWorkspaceByID(BACKUPMON->activeWorkspace)->m_szName;
// snap cursor
@@ -215,10 +223,6 @@ void CMonitor::onDisconnect() {
wlr_output_commit(output);
- for (auto& lsl : m_aLayerSurfaceLists) {
- lsl.clear();
- }
-
g_pCompositor->m_vWorkspaces.erase(std::remove_if(g_pCompositor->m_vWorkspaces.begin(), g_pCompositor->m_vWorkspaces.end(), [&](std::unique_ptr<CWorkspace>& el) { return el->m_iMonitorID == ID; }));
Debug::log(LOG, "Removed monitor %s!", szName.c_str());