summaryrefslogtreecommitdiff
path: root/src/helpers/Monitor.cpp
diff options
context:
space:
mode:
authorVaxry <43317083+vaxerski@users.noreply.github.com>2023-09-01 22:03:56 +0200
committerGitHub <noreply@github.com>2023-09-01 22:03:56 +0200
commitd9292800a27ca7de5cb8b258651e535a7880e9e6 (patch)
treef02edbf66db79faf820c4e45a2f141f4aa745f44 /src/helpers/Monitor.cpp
parent774a5bedf862e9956c1db42522f39a7b9327b32f (diff)
internal: Unsafe state reworks (#3114)
Diffstat (limited to 'src/helpers/Monitor.cpp')
-rw-r--r--src/helpers/Monitor.cpp42
1 files changed, 19 insertions, 23 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp
index 5b30e351..773b0045 100644
--- a/src/helpers/Monitor.cpp
+++ b/src/helpers/Monitor.cpp
@@ -252,33 +252,31 @@ void CMonitor::onDisconnect() {
if (!BACKUPMON) {
Debug::log(WARN, "Unplugged last monitor, entering an unsafe state. Good luck my friend.");
-
- hyprListener_monitorStateRequest.removeCallback();
- hyprListener_monitorDestroy.removeCallback();
-
g_pCompositor->m_bUnsafeState = true;
-
- std::erase_if(g_pCompositor->m_vMonitors, [&](std::shared_ptr<CMonitor>& el) { return el.get() == this; });
-
- return;
}
- // snap cursor
- wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, BACKUPMON->vecPosition.x + BACKUPMON->vecTransformedSize.x / 2.f,
- BACKUPMON->vecPosition.y + BACKUPMON->vecTransformedSize.y / 2.f);
+ if (BACKUPMON) {
+ // snap cursor
+ wlr_cursor_warp(g_pCompositor->m_sWLRCursor, nullptr, BACKUPMON->vecPosition.x + BACKUPMON->vecTransformedSize.x / 2.f,
+ BACKUPMON->vecPosition.y + BACKUPMON->vecTransformedSize.y / 2.f);
- // move workspaces
- std::deque<CWorkspace*> wspToMove;
- for (auto& w : g_pCompositor->m_vWorkspaces) {
- if (w->m_iMonitorID == ID) {
- wspToMove.push_back(w.get());
+ // move workspaces
+ std::deque<CWorkspace*> wspToMove;
+ for (auto& w : g_pCompositor->m_vWorkspaces) {
+ if (w->m_iMonitorID == ID) {
+ wspToMove.push_back(w.get());
+ }
}
- }
- for (auto& w : wspToMove) {
- w->m_szLastMonitor = szName;
- g_pCompositor->moveWorkspaceToMonitor(w, BACKUPMON);
- w->startAnim(true, true, true);
+ for (auto& w : wspToMove) {
+ w->m_szLastMonitor = szName;
+ g_pCompositor->moveWorkspaceToMonitor(w, BACKUPMON);
+ w->startAnim(true, true, true);
+ }
+ } else {
+ g_pCompositor->m_pLastFocus = nullptr;
+ g_pCompositor->m_pLastWindow = nullptr;
+ g_pCompositor->m_pLastMonitor = nullptr;
}
activeWorkspace = -1;
@@ -289,8 +287,6 @@ void CMonitor::onDisconnect() {
wlr_output_commit(output);
- std::erase_if(g_pCompositor->m_vWorkspaces, [&](std::unique_ptr<CWorkspace>& el) { return el->m_iMonitorID == ID; });
-
if (g_pCompositor->m_pLastMonitor == this)
g_pCompositor->setActiveMonitor(BACKUPMON);