modify exit behaviour a bit

This commit is contained in:
vaxerski 2022-08-25 21:35:47 +02:00
parent e327b0a835
commit 0d1a9e4ba9
3 changed files with 10 additions and 4 deletions

View file

@ -216,7 +216,7 @@ void CCompositor::initAllSignals() {
} }
void CCompositor::cleanup() { void CCompositor::cleanup() {
if (!m_sWLDisplay) if (!m_sWLDisplay || m_bIsShuttingDown)
return; return;
m_pLastFocus = nullptr; m_pLastFocus = nullptr;
@ -225,9 +225,13 @@ void CCompositor::cleanup() {
m_vWorkspaces.clear(); m_vWorkspaces.clear();
m_vWindows.clear(); m_vWindows.clear();
for (auto& m : m_vMonitors) for (auto& m : m_vMonitors) {
g_pHyprOpenGL->destroyMonitorResources(m.get()); g_pHyprOpenGL->destroyMonitorResources(m.get());
wlr_output_enable(m->output, false);
wlr_output_commit(m->output);
}
if (g_pXWaylandManager->m_sWLRXWayland) { if (g_pXWaylandManager->m_sWLRXWayland) {
wlr_xwayland_destroy(g_pXWaylandManager->m_sWLRXWayland); wlr_xwayland_destroy(g_pXWaylandManager->m_sWLRXWayland);
g_pXWaylandManager->m_sWLRXWayland = nullptr; g_pXWaylandManager->m_sWLRXWayland = nullptr;
@ -235,7 +239,7 @@ void CCompositor::cleanup() {
wl_display_terminate(m_sWLDisplay); wl_display_terminate(m_sWLDisplay);
m_sWLDisplay = nullptr; m_bIsShuttingDown = true;
// kill the PID with a sigkill after 2 seconds // kill the PID with a sigkill after 2 seconds
const auto PID = getpid(); const auto PID = getpid();

View file

@ -98,6 +98,7 @@ public:
bool m_bSessionActive = true; bool m_bSessionActive = true;
bool m_bDPMSStateON = true; bool m_bDPMSStateON = true;
bool m_bUnsafeState = false; // unsafe state is when there is no monitors. bool m_bUnsafeState = false; // unsafe state is when there is no monitors.
bool m_bIsShuttingDown = false;
// ------------------------------------------------- // // ------------------------------------------------- //

View file

@ -61,7 +61,8 @@ int main(int argc, char** argv) {
// If we are here it means we got yote. // If we are here it means we got yote.
Debug::log(LOG, "Hyprland reached the end."); Debug::log(LOG, "Hyprland reached the end.");
g_pCompositor->cleanup(); wl_display_destroy_clients(g_pCompositor->m_sWLDisplay);
wl_display_destroy(g_pCompositor->m_sWLDisplay);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }