From d9292800a27ca7de5cb8b258651e535a7880e9e6 Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Fri, 1 Sep 2023 22:03:56 +0200 Subject: internal: Unsafe state reworks (#3114) --- src/helpers/Monitor.cpp | 42 +++++++++++++++++++----------------------- 1 file changed, 19 insertions(+), 23 deletions(-) (limited to 'src/helpers/Monitor.cpp') 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& 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 wspToMove; - for (auto& w : g_pCompositor->m_vWorkspaces) { - if (w->m_iMonitorID == ID) { - wspToMove.push_back(w.get()); + // move workspaces + std::deque 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& el) { return el->m_iMonitorID == ID; }); - if (g_pCompositor->m_pLastMonitor == this) g_pCompositor->setActiveMonitor(BACKUPMON); -- cgit v1.2.3