diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2023-09-01 22:03:56 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-09-01 22:03:56 +0200 |
| commit | d9292800a27ca7de5cb8b258651e535a7880e9e6 (patch) | |
| tree | f02edbf66db79faf820c4e45a2f141f4aa745f44 /src/helpers/Monitor.cpp | |
| parent | 774a5bedf862e9956c1db42522f39a7b9327b32f (diff) | |
internal: Unsafe state reworks (#3114)
Diffstat (limited to 'src/helpers/Monitor.cpp')
| -rw-r--r-- | src/helpers/Monitor.cpp | 42 |
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); |
